25 stycznia 2004 (niedziela), 20:49:49

Programować każdy może...

Programować każdy może, to znaczy, że mogę ja też. A więc chcąc sobie zrobić spis treści moich notek zagłębiłem się w XML-a, programowanie w PHP-ie, wyrażenia regularne... Myślę, że każdy, nawet niepraktykujący informatyk powinien raz na 5 lat, tak dla sportu rozwiązać jakiś fajny problem przy pomocy wyrażeń regularnych.

Efekty (okropne) można oglądać tu:

A kod, który to robi jest poniżej. Szkoda tylko, że nie robi tego co chciałem, czyli nie wyciąga mi spisów notek z archiwum. Ale tak to zawsze jest z projektami informatycznymi: założenia są jakieś a wychodzi coś innego, o czym przekonujemy się obserwując jak Softbank robi CEPIK.

Ale ja mam korzyści z tej zabawy: dowiedziałem się czegoś o XML-u, o parsowaniu, przypomniałem sobie PHP-a (od czasów stworzenia FIKI zapomniałem wiele), potrenowałem ereg_replace, liznąłem UTF-8 i Unicode... Trening mózgu zaliczony!

/******************************************************************

To prosty program, ktory pobiera pierwsza strone bloga z blog.pl
 
jako RSS w formacie XML i rozbiera ja na elementy pierwsze
korzystajac ze standardowego parseta dostepnego w PHP4.
 
Programowac kazdy moze !
 
Program w piekna styczniowa 2004 roku noc popelnil W34.

*******************************************************************/
 
 $ItemOn = 0;             // wskaznik, czy analizuje opis bloga czy notke
 $LinkOn = 0; $TitleOn = 0; $DateOn = 0; $DescriptionOn = 0;
 $SpisNotek1 = array();  // tablica, w ktorej skompletuje spis tresci
 $xSpisNotek1 = 0;       // indeks do budowania tablicy notek
 $TytulBloga = "";
 
 // najlepiej zrobic to tak aby nikomu nie wpadlo do 
 // glowy otwieranie /etc/shadow
 $blog = $_SERVER[QUERY_STRING]; 
 $file = "http://" . $blog . ".blog.pl/index.rss";
 wyswietl_tematy_notek ($file);
 
 function wyswietl_tematy_notek ($blog_rss_url) {
     global $SpisNotek1, $TytulBloga;
 
     # na poczatek parsowanie tego XML-a co sie go wczytuje
 
     $xml_parser = xml_parser_create ();
     xml_set_element_handler ($xml_parser, "startElement", "endElement");
     xml_set_character_data_handler ($xml_parser, "characterData");
 
     if (!($fp = fopen ($blog_rss_url, "r")))
         die ("cos ta strona w  XML nie chce sie otworzyc");
 
     while ($data = fread ($fp, 4096)) {
         if (!xml_parse ($xml_parser, $data, feof ($fp))) {
             die(sprintf("XML error: %s at line %d",
             xml_error_string (xml_get_error_code ($xml_parser)),
             xml_get_current_line_number ($xml_parser)));
         }
     }
 
     xml_parser_free ($xml_parser);
     # a teraz wyrzucenie spisu notek w jakims formacie
echo '<b>' . $TytulBloga . '</B></BR>';
foreach ($SpisNotek1 as $notka) {
echo '<P>';
echo '<a href="' . $notka [link] . '" target="nw">';
echo '' . $notka [title] . '</A>';
echo '<small>' . $notka [date] . '</small>';
# echo '' . $notka [description]; // cos to brzydko wyglada
# echo '<HR>'; } } # # funkja wolana przez parser w chwili, gdy znajdzie on emelemt otwierajacy # function startElement($parser, $name, $attrs) { global $LinkOn, $ItemOn, $TitleOn, $DateOn, $DescriptionOn; switch ($name) { case "ITEM" : // notki sa umieszczone w $ItemOn++; break; case "LINK" : $LinkOn++; break; case "TITLE" : $TitleOn++; break; case "DC:DATE" : $DateOn++; break; case "DESCRIPTION" : $DescriptionOn++; break; } } # # funkja wolana przez parser w chwili, gdy znajdzie on zamkniecie # function endElement($parser, $name) { global $LinkOn, $ItemOn, $TitleOn, $DateOn, $DescriptionOn; global $xSpisNotek1; switch ($name) { case "ITEM" : $ItemOn--; $xSpisNotek1++; break; case "LINK" : $LinkOn--; break; case "TITLE" : $TitleOn--; break; case "DC:DATE" : $DateOn--; break; case "DESCRIPTION" : $DescriptionOn--; break; } } # # funkcja wolana przez parser, gdy ma on dane zawarte w elemencie # function characterData ($parser, $data) { global $LinkOn, $ItemOn, $TitleOn, $DateOn, $DescriptionOn; global $SpisNotek1, $xSpisNotek1, $TytulBloga; if ($ItemOn){ if ($LinkOn) $SpisNotek1 [$xSpisNotek1] [link] = $data; if ($TitleOn) $SpisNotek1 [$xSpisNotek1] [title] = utf82iso88592 ($data); if ($DateOn) // na pewno mozna ta date potraktowac lepiej :-) $SpisNotek1 [$xSpisNotek1] [date] = substr ($data, 0, 10); # if ($DescriptionOn) // cos te konwersje tekstu nie dzialaja :-) # $SpisNotek1 [$xSpisNotek1] [description] = utf82iso88592 (html2text ($data)); } else if ($TitleOn) $TytulBloga = utf82iso88592 ($data); } ?>

Kategorie: informatyka, _blog


Słowa kluczowe: PHP, XML, parser, blog, programowanie


Komentarze: (2)

marekm, January 28, 2004 13:37 Skomentuj komentarz


> Programować każdy może, to znaczy, że mogę ja też.

No, teraz przynajmniej wiadomo dlaczego jordan przestal dzialac... ;)

> Myślę, że każdy, nawet niepraktykujący informatyk powinien raz na 5 lat, tak dla sportu rozwiązać jakiś fajny problem przy pomocy wyrażeń regularnych.

Nam na studiach kazali to robic na kartce - teraz zrozumialem dlaczego....

khan-goor, January 26, 2004 15:59 Skomentuj komentarz


0
Skomentuj notkę

Disclaimers :-) bo w stopce coś wyglądającego mądrze można napisać. Wszystkie powyższe notatki są moim © wymysłem i jako takie związane są ze mną. Ale są też materiały obce, które tu przechowuję lub cytuje ze względu na ich dobrą jakość, na inspiracje, bądź ilustracje prezentowanego lub omawianego tematu. Jeżeli coś narusza czyjeś prawa - proszę o sygnał abym mógł czym prędzej naprawić błąd i naruszeń zaniechać.