PowerShell » Gotowce

Parsowanie nagłówków RSS

  • 2007-09-07 19:07
  • 0 komentarzy
  • 745 odsłon
  • Oceń ten tekst jako pierwszy
Używając PowerShella można w łatwy sposób parsować nagłówki RSS</wiki>. RSS jest bardzo uniwersalnym formatem do publikacji nowości, stosowanym przez wiele serwisów internetowych, a sam oparty jest o XML, co powoduje, że bardzo łatwo jest nim operować, używając na przykład klasy platformy .NET System.Xml.XmlDocument.

Aby pobrać dokument ze strony internetowej można wykorzystać dostępną w .NET 2.0 i bardzo prostą w użyciu klasę System.Net.WebClient, o wiele łatwiejszą do tak prostych celów, niż używanie klas HttpRequest i HttpResponse.

$webClient = New-Object System.Net.WebClient; # tworzymy obiekty klas WebClient oraz XmlDocument
$xmlDoc = New-Object System.Xml.XmlDocument; # używając komendy New-Object
$webClient.Encoding = [System.Text.Encoding]::UTF8; # ustawiamy kodowanie klienta Web na UTF-8, by prawidłowo ściągnął nagłówki
$xml = $webClient.DownloadString("http://4programmers.net/rss.php?rss=news"); # pobieramy nagłówki RSS z serwisu 4programmers
$xmlDoc.LoadXml($xml); # ładujemy następnie pobrany kod kanału RSS do obiektu XmlDocument


Teraz możemy zrobić już różne rzeczy z instancją XmlDocument - przykładowo bez problemu wyświetlić w ładnej tabeli tytuł oraz datę publikacji za pomocą takiego polecenia:

$xmlDoc.GetElementsByTagName("item") | Format-Table title,pubDate


Co daje na przykład taki wynik:
PS E:\> $xmlDoc.GetElementsByTagName("item") | format-table title,pubDate
title                                                       pubDate
-----                                                       -------
 Przezroczyste ikony w nagłówku kontrolki ListView          Fri,20 Apr 2007 19:03:36 +0100
 Gotowce                                                    Fri,20 Apr 2007 18:57:53 +0100
 listview.zip                                               Fri,20 Apr 2007 18:44:14 +0100
 lv trans.png                                               Fri,20 Apr 2007 18:43:19 +0100
 lv n trans.png                                             Fri,20 Apr 2007 18:41:13 +0100
 Td                                                         Thu,19 Apr 2007 21:04:29 +0100
 Strcoll                                                    Thu,19 Apr 2007 16:09:40 +0100
 Wyjątki                                                    Tue,17 Apr 2007 10:48:25 +0100
 Zmienne                                                    Sun,15 Apr 2007 12:07:28 +0100
 Milyges                                                    Sat,14 Apr 2007 20:02:40 +0100
 Rozdział 1                                                 Sat,14 Apr 2007 14:57:02 +0100
 Register                                                   Sat,14 Apr 2007 13:39:53 +0100
 Ikonka z bitmapy                                           Wed,11 Apr 2007 17:51:32 +0100
 OpenGL                                                     Wed,11 Apr 2007 12:40:00 +0100
 LKS                                                        Mon,09 Apr 2007 20:20:21 +0100
 Konwersje liczb                                            Mon,09 Apr 2007 13:40:37 +0100
 Strtol                                                     Sat,07 Apr 2007 20:18:55 +0100
 Jak pobrać losowy cytat z Basha                            Sat,07 Apr 2007 14:11:08 +0100
 Delphi                                                     Fri,06 Apr 2007 21:17:11 +0100
 Artykuły do usunięcia                                      Fri,06 Apr 2007 15:48:42 +0100


Bez problemu można także odwołać się do jednego, określonego elementu kanału RSS, na przykład:
$xmlDoc.rss.channel.item[7] | Format-List


PS E:\> $xmlDoc.rss.channel.item[7] | Format-List
title       :  Strcoll
link        : http://4programmers.net/C/Strcoll
description : Budowa:
              #include
              int strcoll(const char *cStr1, const char *cStr2);
              Funkcja strcoll() porównuje łańcuch wskazywany przez cStr1 z łańcuchem wskazywanym przez cStr2. Funkcja s
              trcoll()
pubDate     : Thu,19 Apr 2007 16:09:40 +0100