Delphi-Help

Главная Статьи Интернет Чтение RSS-новостей. Часть 1

Чтение RSS-новостей. Часть 1

Оцените материал
(0 голосов)


Чтение RSS-новостей. Часть 1

Здравствуйте, давно я не писал в блог ничего, но сами понимаете времени не так много, скоро начну писать о том, как я пытался зарабатывать в сети Интернет, в том числе это будет связано и с программированием. Ну а пока что, я хотел рассказать о том, как можно без сторонних компонентов очень хорошо и быстро прочитать RSS-новости, ну по крайней мере отобразить их названия и ссылку на них. Что нам для этого понадобится из визуальных компонентов:

  • TListBox – 2 шт
  • TButton
  • TEdit

В TEdit мы будет вводить url нашего rss-потока, в 1 TListBox мы будем получать url нашей новости, а во второй TListBox будем получать название нашей новости. Да кстати, если Вы обратили внимание, то в новости присутствует Часть 1, это означает, что в следующей статье я покажу как можно сделать чтение rss-новостей с помощью парсинга и тогда Вы увидите различия. Конечно все будет зависеть от того на сколько быстрый парсинг новостей, но об этом немного потом. Для начала давайте подключим модули, необходимые нам при работе:

  • MSXML
  • Shellapi

MSXML – для чтение rss-потоков, Shellapi – для того, чтобы воспользоваться функцией ShellExecute, которая поможет нам открывать ссылки новостей в браузере. Ну так вроде бы у нас все готово, теперь можем приступать к работе.

Для начала объявим необходимые переменные

var
 CoD:CoDOMDocument;
 XML:DOMDocument;
 ixml:IXMLDOMElement;
 node:IXMLDOMNode;
 url:WideString;
 i:integer;

XML – объект самого DOM документа, ixml – элемент DOM документа, а node – узел DOM документа, то есть узел rss-потока, url – будет хранить адрес нашего rss-потока, а i – счетчик, который понадобится нам для того, чтобы пройтись по всем узлам нашего rss-потока.

Весь код, который я написал на событие OnClick TButton выглядит следующим образом

procedure TForm1.Button1Click(Sender: TObject);
var
 CoD:CoDOMDocument;
 XML:DOMDocument;
 ixml:IXMLDOMElement;
 node:IXMLDOMNode;
 url:WideString;
 i:integer;
begin
   try
    url:=Edit1.Text;
    XML:=CoD.Create;
    XML.async:=False;
    XML.load(url);
    ixml:=XML.documentElement;
    node:=ixml.selectSingleNode('//rss');
    if node.attributes.getNamedItem('version').text<>'2.0' then
     begin
      ShowMessage('Error is version rss');
      exit;
     end;
    Caption:=node.selectSingleNode('//title').text;
    for i:=0 to node.selectnodes('//item').length-1 do
     begin
      ListBox2.Items.Add(node.selectnodes('//item').item[i].childNodes.item[0].text);
      ListBox1.Items.Add(node.selectnodes('//item').item[i].childNodes.item[1].text);
     end;
   except
    on e:Exception do
   end;
end;

Вначале мы создаем наш документ XML, затем задаем как будем грузить в него данные, а с помощью метода load загружаем сам наш поток, причем его можно загрузить не только как url, но и как текстовый файл, либо xml-файл. Далее мы просто перебираем нам нужные узлы в нашем rss-потоке. Как получить нужные узлы Вы увидели, с помощью двойной наклонной черты, а затем само название узла, так можно получить любой узел. В данном примере мы только получаем версию rss, заголовок сайта и затем название 10 последних новостей и ссылки на них. Можете поэкспериментировать, доработать кое-что, а потом будем сравнивать насколько быстрее работает чтение rss-новостей с помощью обычного парсинга.

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

Прочитано 4693 раз

Авторизация



Счетчики