HS news

neon 24.03.03 21:13

Haetaan tärkeimmät/tuoreimmat uutiset HS:n sivuilta.

 Tekstiversio  Arvo: 5 (9 ääntä)  Äänestä: +  -
<?php
$uutiset = new HS_top_news();
foreach($uutiset->get() as $uutinen)
{
    printf('<li><a href="%s">%s</a>(%s)</li>', $uutinen[1], $uutinen[2], date("Y.m.d H:i", $uutinen[0]));;
}

class           HS_top_news {
    /*
     *  HS_top_news class
     *  @version 1 22.03.2003 @copyright
     * neon <neon@neon-line.net>
     * DESCRIPTION: Hakee uusimmat/tärkeimmät uutiset HS:n sivuilta ja parsii ne.
     * CHANGELOG:
     * - parser kohtaan lisätty muutama kommentti pienehköksi manuaaliksi
     * - errormessageja.....
     * - palauttaa uutiset taulukkona. kellonajat unix timestamp muodossa.
     */

    var $parser;
    /*
     * @resource XMLparser
     */

    var $tag;
    /*
     * @string viimeinen käsitelty merkki
     */

    var $result = array();
    /*
     * @array itse lopullinen data
     */

    var $uutinen = array();
    /*
     * @array sisäinen datakeeper
     */


    /* PUBLIC */
    function        HS_top_news() {
        if (!function_exists('xml_parse')) {
            exit('Järjestelmässäsi ei ole XML SAX-parser ominaisuuksia, ohjelma lopetetaan.');
        }
        $url = "http://siirto.helsinginsanomat.fi/aukio/HS-Tuoreet-Top5.xml";
        if (function_exists("file_get_contents")) {
            $data = @file_get_contents($url);
        } else {
            $fp = @fopen($url, "r");
            $data = @fread($fp, 4086);
            @fclose($fp);
        }
        if              (!empty($data)) {
            $this->parse($data);
        } else {
            exit("Kohteesta $url ei saatu tietoja");
        }
        return;
    }
    /* PRIVATE */
    function        parse($xmlstring) {
        /* luodaan parser */
        $this->parser = xml_parser_create();
        /*
         * Asetetaan mikä muuttuja sisältää xml parserin ja miss assa
         * parser toimii
         */

        xml_set_object($this->parser, $this);
        xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false);
        /*
         * parsittaessa tagin alkaessa kutsutaan startElement metodi
         * ja tagin loppuessa endElement metodi
         */

        xml_set_element_handler($this->parser, "startElement", "endElement");
        /* characterData käsittelee varsinaisen datan tagien välissä */
        xml_set_character_data_handler($this->parser, "characterData");
        /* parsitaan */
        xml_parse($this->parser, $xmlstring);
        $this->__sort();
        /*
         * vapautetaan parser, pakko vapauttaa koska tätä ei
         * automaattisesti tapahdu
         */

        xml_parser_free($this->parser);
    }
    /* PUBLIC */
    function        get() {
        $tmp = array();
        foreach($this->result as $item)
        $tmp[] = $item;
        return $tmp;
    }
    /* PRIVATE */
    function        __sort() {
        ksort($this->result);
        $this->result = array_reverse($this->result);
        return;
    }
    /* PRIVATE */
    function        startElement($parser, $name, $attrs) {
        switch ($name) {
            case "url":
            case "pvm":
            case "otsikko":
            $this->tag = $name;
            break;
        }
    }
    /* PRIVATE */
    function        endElement($parser, $name) {
        if ($name == $this->tag) {
            $this->tag == null;
        }
        if ($name == "uutinen") {
            $this->uutinen[0] = strtotime($this->uutinen[0]);
            $this->result[$this->uutinen[0]] = $this->uutinen;
            $this->uutinen = array();
        }
    }
    /* PRIVATE */
    function        characterData($parser, $data) {
        $data = trim($data);
        if (!empty($data) && $data != "\n") {
            switch ($this->tag) {
                case "url":
                    $this->uutinen[1] = $data;
                    break;
                case "pvm":
                    $this->uutinen[0] = $data;
                    break;
                case "otsikko":
                    if (!isset($this->uutinen[2]))
                        $this->uutinen[2] = '';
                    $this->uutinen[2].= utf8_decode($data);
                    break;
            }
        }
    }
}
?>

kihis 21:21 24.3.03 
miks pitää tehdä kaikki niin vaikeesti?
Runoltaja 01:01 25.3.03 
Neon on valo
ane 08:33 25.3.03 
kvihijar: mieti sitä :)
ZcMander 14:14 25.3.03 
HS = Helsingin sanomat?
Täällä kyllä on semmonen ja on lyhempi
Akiro 14:42 25.3.03 
Se toinen on sellanen purkka-systeemi, näin XML:ää kuuluu parsia..
neon 16:29 25.3.03 
Lähinnä ajattelin että tässä olisi käytännön esimerkki miten XML:lää suositellaan parsittavaksi, tietty voit myös käyttää DOM parseria tai rekentaa vaikkapa oman. Kukaan ei rajoita sitä mitä käytät, mutta toivon että joku sai vinkkejä XML opiskelujaan varten. Kuitenkin XML:län osema on tulevaisuudessa merkittävässä osassa.
Runoltaja 10:10 31.3.03 
Tämä on erinomainen esimerkki. But. Olen nähnyt muutamia koodinpätkiä, jolla laitetaa xmllää kantaan, mutta sellainen yksinkrertainen esimerkki puuttuisi, sellainen josta hahmottaisi itse asian...
verpamil 15:05 24.4.03 
Hyvä! Mutta vielä kun saisi turhan html:n pois fuktioista. Pelkkä array palautukseen, millä kukin saa tehdä mitä lystää.
Antarktis 19:00 21.5.05 
kertosko joku mulle kuinka saan ton bugin korjattua kun se näyttää tälleen:

Persson hyökkää pornoa vastaan
(2005-05-21 18:34:34)
Haka ja TamU pelasivat maalittoman tasapelin
(2005-05-21 18:30:01)
Poliisi hajotti mielenosoituksen Uzbekistanissa
(2005-05-21 18:21:28)
Räikkönen nopein 1. aika-ajossa
(2005-05-21 15:11:39)
SAK:n liitot valmiit tukemaan Paperia
(2005-05-21 14:57:50)
VhtrMrk 13:33 13.10.05 
Ääkköset tosiaan bygii
maggaraa 10:44 25.1.06 
Antarktis ja VhtrMrk: Se on utf-8 decodattua... utf8_decode($data)