Здравствуйте, давно я не писал в блог ничего, но сами понимаете времени не так много, скоро начну писать о том, как я пытался зарабатывать в сети Интернет, в том числе это будет связано и с программированием. Ну а пока что, я хотел рассказать о том, как можно без сторонних компонентов очень хорошо и быстро прочитать 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-читалку, причем без всяких сторонних компонентов.

Полный исходник можно скачать тут (в исходнике по двойному клику по названию статьи открывается в браузере по умолчанию url статьи)

Автор статьи - Andrey53 

Метки: , , , , ,




К записи “Чтение RSS-новостей. Часть 1” оставлено комментариев: 4.

  1. nmd:

    спасибо за статью

  2. […] RSS-потоки, если Вам это конечно необходимо. Вообще в прошлой статье я рассказал об этом, тот вариант более правильный, […]

  3. Denis:

    У меня почему то не работает!!!

  4. Огромное спасибо за статью, все работает отлично!

Оставить комментарий

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*