Форум: "Начинающим";
Текущий архив: 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ž žmogžudystę ieškomą vyrą. Jei vyras bus sulaikytas, jo dukra pateks į našlaičių prieglaudą. Norėdami išlikti laisvi jie pabėga į laukinę gamtą. Faras - užuomina į Portugalijos miestą, kuriame tėvas sykį lankė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