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:
- Najnowsze dzieje Nowego Człowieka wg Zimna
- Twórczość Misiaców :-)
- O tym, że żona go ...
- Ostatnie notki Khan-goora (nie działa, wiadomo, informatyk, ma coś inaczej ustawione)
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