Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2018.04.29;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по XML   Найти похожие ветки 

 
Вэн ©   (2016-04-21 17:55) [0]

Доброго времени суток всем.
В общем стоит задача разработать приложение для работы с программой телепередач. С XML раньше вообще дел не имел, но как-то информацию подтягивать в программу надо. Тут 2 варианта:
1. ручками в табличку вбивать;
2. парсить с какого-нибудь сайта или файла.
Нашёл вот такой сайт http://www.teleguide.info/ там выкладываются программы в форматах JTV и XMLTV.
Я соответственно выбрал второй вариант. Скачал архивчик. Файл преставляет из себя вот такую структуру:

<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE tv SYSTEM "http://www.teleguide.info/download/xmltv.dtd">
<tv generator-info-name="TVH_W/0.751l" generator-info-url="http://www.teleguide.info/">
<channel id="1">
<display-name lang="ru">Первый канал</display-name>
<icon src="http://www.teleguide.info/img/channel/1.gif" />
</channel>
<channel id="2">
<display-name lang="ru">Россия 1</display-name>
<icon src="http://www.teleguide.info/img/channel/2.gif" />
</channel>

...

<programme start="20160418050000 +0300" stop="20160418090000 +0300" channel="1">
<title lang="ru">Телеканал "Доброе утро" (12+)</title>
<category lang="ru">Развлекательные</category>
</programme>
<programme start="20160418090000 +0300" stop="20160418092000 +0300" channel="1">
<title lang="ru">Новости (12+)</title>
<category lang="ru">Информационные</category>
</programme>
<programme start="20160418092000 +0300" stop="20160418095000 +0300" channel="1">
<title lang="ru">Контрольная закупка (12+)</title>
<category lang="ru">Познавательные</category>
</programme>
<programme start="20160418095000 +0300" stop="20160418105500 +0300" channel="1">
<title lang="ru">Жить здорово! (12+)</title>
<category lang="ru">Познавательные</category>
</programme>
<programme start="20160418105500 +0300" stop="20160418120000 +0300" channel="1">
<title lang="ru">Модный приговор (12+)</title>
<category lang="ru">Развлекательные</category>
</programme>

....

<programme start="20160424230000 +0300" stop="20160425000000 +0300" channel="503338">
<title lang="ru">Faras (12+)</title>
<desc lang="ru">Policija gaudo u&#382; &#382;mog&#382;udyst&#281; ie&#353;kom&#261; vyr&#261;. Jei vyras bus sulaikytas, jo dukra pateks &#303; na&#353;lai&#269;i&#371; prieglaud&#261;. Nor&#279;dami i&#353;likti laisvi jie pab&#279;ga &#303; laukin&#281; gamt&#261;. Faras - u&#382;uomina &#303; Portugalijos miest&#261;, kuriame t&#279;vas syk&#303; lank&#279;si.</desc>
</programme></tv>


И вот из этого файла я хочу "вытянуть" данные:

ЕСЛИ ВОЗМОЖНО
1. значения channel id/display-name/icon src нужно передавать, например в кнопки компонента ButtonGroup или в SpeedButton, чтоб помимо названия канала в кнопке отображался и его значок;
2. по нажатию на кнопку канала в окно (вот тут я честно говоря не знаю, во что лучше выводить информацию т.к. не знаю какую информацию должен выдавать файл, возможно будет достаточно и Memo, а может лучше будет на WebBroesr вывести) программу соответствующего id канала;
3. не нашёл стандартный компонент, может есть какой сторонний, чтобы можно было сделать наподобие как в Office есть настройка ленты, там что-то на подобие CheckListBox(а) только с иконками кнопок. Хочу сделать в программе наподобие, только для добавления/удаления каналов.

В общем, как говорится - ЧТО я хочу я знаю, а как это переложить на язык дельфи вот тут уже возник затык и мне нужна помощь и советы по реализации данной задачи.


 
Kerk ©   (2016-04-21 18:13) [1]

Чтобы показать изображение на кнопке, нужно это изображение сначала скачать


 
Dimka Maslov ©   (2016-04-21 22:40) [2]

IXMLDocument позволяет получить ВСЁ. А потом останется вопрос, как лучше это отобразить.


 
sniknik ©   (2016-04-22 08:43) [3]

> разработать приложение для работы с программой телепередач
та есть rss, и есть кучи просмотрщиков  rss-a. даже с исходным кодом можно найти. лучше использовать его/готовую программу.

чтобы не парится с картинками/сделать более универсально делать все в браузере, на яваскрипте, формируя "псевдо сайт" основываясь на rss канале. распространять проще будет. дельфи не нужен, вообще... ну может положить на форму twebиrowser и у казать внем урл, и все.


 
Вэн ©   (2016-04-22 09:30) [4]


> Dimka Maslov ©   (21.04.16 22:40) [2]
>
> А потом останется вопрос, как лучше это отобразить.

Вот как раз этот вопрос и стоит, по большему счёту, компонент ТXMLDocument я на форму кинул, файл вроде подгрузил, а вот как информацию из него отобразить...

Вроде нашёл один интересный пример:

XML:

<wm.exchanger.response>
 <BankRate direction="RUR/USD">31,6062</BankRate>
 <WMExchnagerQuerys amountin="WMZ" amountout="WMR">
   <query id="2224747" amountin="11606,48"/>
   <query id="2224748" amountin="11606,48"/>
   <query id="2224749" amountin="11606,48"/>
 </WMExchnagerQuerys>
</wm.exchanger.response>


Пример решения в дельфе:
...
XMLDocument.Active:=true;
with XMLDocument.DocumentElement do
 begin
   direction:=VarToStr(ChildNodes["BankRate"].Attributes["direction"]); //получаем RUR/USD
   BankRate:=VarToStr(ChildValues["BankRate"]); //получаем 31,6062
   amountin:=VarToStr(ChildNodes["WMExchnagerQuerys"].Attributes["amountin"]); //получаем WMZ
   id:=VarToStr(ChildNodes["WMExchnagerQuerys"].ChildNodes.Nodes[1].Attributes["id" ]); //получаем 2224748
 end;
XMLDocument.Active:=false;
...


На первый взгляд вроде всё просто. Но там у человека и задачка вроде простенькая - получать с сайта курс доллара, а тут поди разбери...

вот эта часть вроде не сложная
<channel id="1"> - с этим я вообще не знаю как быть, по идее id="i"  должен каким-то образом выводить программу канала channel="i" возможно в WebBrowser или куда-то ещё, в зависимости от того, где представление информации будет выглядеть более т.с. презентабельно =)

<display-name lang="ru">Первый канал</display-name> - это нужно выводить в свойство Caption кнопки (например),

<icon src="http://www.teleguide.info/img/channel/1.gif" /> - это скачивать в какой-то каталог откуда будут подтягиваться иконки кнопок


вот тут уже чуть по сложнее задачка
<programme start="20160418050000 +0300" stop="20160418090000 +0300" channel="1"> - каким-то образом нужно start и stop переводить в нормальный вид. В данном примере start= 05:00  18.04.2016 stop= 09:00  18.04.2016, что такое +0300 вообще не понятно...Московское время по UTC? Тогда надо как-то сделать, чтоб была возможность смены часового пояса, мне допустим Хабаровское время нужно, а не Московское, в таком случае нужно каким-то образом подменять +0300 на +1000. Ну и channel="i" о котором я писал выше - по нажатию кнопки соответствующей каналу id="i" из channel="i" должен загружаться перечень передач,

<title lang="ru">Телеканал "Доброе утро" (12+)</title>
<category lang="ru">Развлекательные</category> - title и category можно я так понимаю получить примерно так же => "BankRate:=VarToStr(ChildValues["BankRate"]); //получаем 31,6062", только тут выдаёт единственное значение, а у меня получается целый список, при чём значения привязаны к значениям времени - когда наступает определённое время (start) в программе выделяется передача которая сейчас идёт и сколько времени до её окончания (stop).
</programme>


Вот всё расписал, вроде всё элементарно и просто да? А как это реализовать на практике - не знаю т.к. как я уже говорил с XML работать приходится впервые...


> Kerk ©   (21.04.16 18:13) [1]
>
> Чтобы показать изображение на кнопке, нужно это изображение сначала скачать


Ну вот видимо придётся так и сделать. Я зачем-то хотел иконки цеплять напрямую с сайта.

А всё-таки по 3-ему пункту хоть он напрямую к теме топика не относится (но в тот компонент тоже нужно будет на самом деле из первой части файла данные подтягивать) кто-нибудь может что-нибудь подсказать? Возможно можно каким-то образом воткнуть иконки каналов в стандартный CheckListBox? Или может, как вариант попробовать модифицировать CheckListBox добавив в него возможность вставки иконки и залепить его как новый компонент...


 
Вэн ©   (2016-04-22 09:47) [5]


> sniknik ©   (22.04.16 08:43) [3]
>
> > разработать приложение для работы с программой телепередач
> та есть rss, и есть кучи просмотрщиков  rss-a. даже с исходным
> кодом можно найти. лучше использовать его/готовую программу.
>
>
> чтобы не парится с картинками/сделать более универсально
> делать все в браузере, на яваскрипте, формируя "псевдо сайт"
> основываясь на rss канале. распространять проще будет. дельфи
> не нужен, вообще... ну может положить на форму twebиrowser
> и у казать внем урл, и все.


Угу...если б я эту программу писал от нечего делать я бы не заморачивался, но мне её нужно по учёбе, там задание разработать
информационную систему с применением динамических структур данных. Обеспечить возможность выполнения следующих операций над выбранными структурами данных:
1. инициализацию;
2. добавление новых элементов;
3. удаление элементов;
4. перемещение по структуре данных;
5 поиск элементов структуры данных, отвечающих заданным критериям;
6. вывод всех элементов структуры данных на экран.
У меня по варианту программа телепередач.
Так что я думаю предлагаемый тобой вариант тут вообще ни как не подходит, к сожалению.


 
Плохиш ©   (2016-04-22 09:50) [6]


> Вэн ©   (22.04.16 09:30) [4]
>
>
> > Dimka Maslov ©   (21.04.16 22:40) [2]
> >
> > А потом останется вопрос, как лучше это отобразить.
>
> Вот как раз этот вопрос и стоит, по большему счёту, компонент
> ТXMLDocument я на форму кинул, файл вроде подгрузил, а вот
> как информацию из него отобразить...


> Вот всё расписал, вроде всё элементарно и просто да? А как
> это реализовать на практике - не знаю т.к. как я уже говорил
> с XML работать приходится впервые...
>

Какая связь между выделенными фразами?

PS. Т.к. ветка не в начинающим, рискну предложить нанять дизайнера и программиста.


 
Dimka Maslov ©   (2016-04-22 10:18) [7]


>  компонент ТXMLDocument я на форму кинул


Кинуть на форму компонент - это действительно не проблема. Проблема - научится с ним работать.


 
sniknik ©   (2016-04-22 10:18) [8]

> Но там у человека и задачка вроде простенькая - получать с сайта курс доллара, а тут поди разбери...
суть не меняется, методы работы с xml тоже. радуйся, большему научишься.

> но мне её нужно по учёбе
даже так лучше использовать rss, примеров больше чем с их вариантов, и пользы больше научишься широко распространенному формату/стандарту, а так по сути тот же xml (если в задании оговорен xml).

> 3. удаление элементов;
это лишнее... тебе же редактировать программу передач не нужно. сформировал отобразил, поиск... все в принципе, на следующий день повторить то же самое, а не удалять и заменять.

> предлагаемый тобой вариант тут вообще ни как не подходит
почему это? если делать самому, пусть и в вебе, как учебное ничем не хуже, и вполне реализуемо, все написанное по 1 .. 6.
что не видел сайтов с менюшками/кнопками, или динамически формируемых? или не веришь что на яваскрипте возможны "динамические структуры данных"? зря.  
другое дело в вебе интерфейс делать сложнее. и скорее всего не хочется ради лабы или чего там.


 
Вэн ©   (2016-04-22 19:04) [9]

> 3. удаление элементов;
это лишнее... тебе же редактировать программу передач не нужно. сформировал отобразил, поиск... все в принципе, на следующий день повторить то же самое, а не удалять и заменять.

Возможно оно и лишнее, но, если реализовывать через XML + добавить возможность настройки списка каналов, то вот как раз и получится "удаление элементов", либо добавление.

Для примера: у меня на дому подключено спутниковое ТВ с кучей каналов, я каналы типа ТНТ и ему подобные не смотрю, соответственно при настройке телевизора я выбрал только то, что мне интересно. Получилось порядка 12-13 каналов и то я их не все смотрю, да и сам телевизор-то по сути включаю редко, НО дело не в этом. Просто у кого-то может быть настроено и больше каналов и этот человек ещё же успевает их все смотреть! О_О И вот для таких случаев как раз и нужен режим в программе для настройки списка отображаемых каналов...мне вот в программе допустим нафиг не нужны ТНТ, СТС, ещё там какие-то каналы есть которые смотрят обычно женщины (что-то там про фитнес что-ли =) ) и прочая муть я могу (пока не могу...не куда) зайти в настройки программы и там отключить лишние каналы, чтоб глаза не мозолили, а кому-то хочется посмотреть во сколько начнётся ДОМ-2 (згинь нечистый), а на панели вдруг не окажется кнопочки канала ТНТ.

На счёт удалять/заменять в этом XML фале, который скачивается с сайта твгид программа на всю неделю т.ч. тут как раз оно подходит под 4-6п., а обновление файла происходит еженедельно на самом сайте и соответственно это можно реализовать и в программе - скачивание с сайта архива, распаковка файла в каталог и обновление данных в программе, но сначала нужно разобраться с парсингом.

РСС тоже, конечно тема интересная, но, предположим, что на компьютере на котором будут программу проверять на работу интернета не будет, как преподаватель проверит работоспособность? И кстати сейчас посмотрел на телегиде и на яндексе там нет возможности тянуть программу через рсс.

> Какая связь между выделенными фразами?

> PS. Т.к. ветка не в начинающим, рискну предложить нанять дизайнера и
> программиста.

Понимаешь, Плохиш...если бы у меня было бы времени на решение данной задачи пол года - год, я бы сюда с вопросом и не сунулся, а попробовал бы сам как-то разобраться, но у меня осталось всего 2 месяца до конца семестра и я вот что-то боюсь, что за это время я просто не успею т.к. мне ещё дохрена предметов нужно успеть сдать...я же не прошу за меня программу полностью написать, я прошу помочь, подсказать как правильно сделать, чтобы из того вида файла который я представил в СП вытащить то, что мне нужно, туда куда мне нужно... Блин, я уже сам почти написал всё по моему во втором своём посте, осталось переложить это всё на дельфятник...

Вот, попробовал в кнопку вывести название канала

XMLDocument1.LoadFromFile("C:\Users\Angel\Documents\Embarcadero\Studio\Pro jects\var4\tv\xmltv.xml\xmltv.xml");
XMLDocument1.Active := True;
SpeedButton1.Caption := VarToStr(XMLDocument1.DocumentElement.ChildValues["display-name"]);


если в файле присутствует такая строчка <!DOCTYPE tv SYSTEM "http://xmltv.cvs.sourceforge.net/viewvc/xmltv/xmltv/xmltv.dtd">
то дельфи выдаёт ошибку "dtd запрещен". Нашёл в интернете способы лечения, попробовал применить - не помогли. Если убрать эту строчку и нажать волшебную кнопочку [F9], то то делфа ВРОДЕ БЫ запускает приложение на выполнение, НО оно не появляется ещё минуты 2-3 наверное. Хотя так было пока я в настройках парсинга не включил первые 2 опции..сейчас уже минут 20 (если не больше0 уже прошло с момента как я запустил программу на выполнение и до сих пор тишина.

Такое чувство, что где-то что-то я делаю не так *задумался*


 
Плохиш ©   (2016-04-26 14:18) [10]


>
> Понимаешь, Плохиш...если бы у меня было бы времени на решение
> данной задачи пол года - год

Фигасе у тебя желаемые сроки 8-O

> сейчас уже минут 20 (если не больше0 уже прошло с момента
> как я запустил программу на выполнение и до сих пор тишина.

Ошибка в 17й строки, в общем-то.


 
sniknik ©   (2016-04-26 18:19) [11]

> сейчас уже минут 20
для проверок возьми xml поменьше... а несколько килобайт, а не мегабайт.
возможно парсер придется поменять, мелкосософкий весьма требователен к "биг-сайз". (хотя оно и не биг вообще то)

и правильнее будет
XMLDocument1.LoadFromFile("C:\Users\Angel\Documents\Embarcadero\Studio\Pro  jects\var4\tv\xmltv.xml\xmltv.xml");
SpeedButton1.Caption := XMLDocument1.DocumentElement.ChildValues[0].ChildValues["display-name"].Text;

у тебя пропущен тег channel.


 
sniknik ©   (2016-04-26 18:21) [12]

блин
SpeedButton1.Caption := XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes["display-name"].Text;/CODE>



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2018.04.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.002 c
15-1472130326
Fox
2016-08-25 16:05
2018.04.29
Игра Мельница


15-1472290243
Ehot
2016-08-27 12:30
2018.04.29
Версия Unicode


15-1472237941
andrd
2016-08-26 21:59
2018.04.29
Успешные примеры использования Embarcadero для Android


2-1461250553
Вэн
2016-04-21 17:55
2018.04.29
Вопрос по XML


15-1472154273
Кто б сомневался
2016-08-25 22:44
2018.04.29
Вай даз май харт фил соу бэд





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский