Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Uutiset HeSaRisTa

makeuu [23.10.2003 11:37:27]

#

Niinku kopioitu Mureakuhasta :: Tekijä: Neon :: Muokkaaja: Maqe^ ::

Käyttää XmLLää

<?php
$uutiset = new HS_top_news();
$uutiset = null;
class HS_top_news {
/*
######  HS_top_news class ####
    * @version 1 22.03.2003
    * Maqe^
    * DESCRIPTION: Hakee uusimmat/tärkeimmät uutiset HS:n sivuilta ja parsii ne.
    * CHANGELOG:
        - parser kohtaan lisätty muutama kommentti pienehköksi manuaaliksi
        - errormessageja.....
################################
*/
    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);
        endif;
        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ä luokassa 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->__print();
    /* vapautetaan parser, pakko vapauttaa koska tätä ei automaattisesti tapahdu */
        xml_parser_free($this->parser);
    }
    /* PRIVATE */
    function __print()
    {
    ksort($this->result);
    $this->result = array_reverse($this->result);
    echo "<table>\n";
    foreach($this->result as $data):
        echo $data;
    endforeach;
    echo '</table>';
    return;
    }
    /* PRIVATE */
    function startElement($parser, $name, $attrs) {
    switch($name):
        case "url":
        case "pvm":
        case "otsikko":
            $this->tag = $name;
        break;
    endswitch;
    }
    /* PRIVATE */
    function endElement($parser, $name) {
    if($name == $this->tag)
        $this->tag==null;
      if($name == "uutinen"):
        $part =  "\t <tr>\n\t\t".'<td bgcolor="#00659A">'."\n\t\t\t".'<a href="'.$this->uutinen[1].'"><font color="lightblue" size="3">'.
                          $this->uutinen[2].'</font></a>'."\n\t\t</td>\n\t</tr>\n\t<tr>\n\t\t".'<td bgcolor="#DCEAFD">'."\n\t\t\t".'<font size="-3">('.$this->uutinen[0].')</font>'."\n\t\t</td>\n\t</tr>\n";
        $this->result[$this->uutinen[4]] = $part;
        $this->uutinen[2] = null;
    endif;
     }
    /* 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;
                $id = str_replace(":","",str_replace("-","",str_replace(" ","",$data)));
                $this->uutinen[4] = $id;
            break;
            case "otsikko":
                $this->uutinen[2] .= $data;
            break;
        endswitch;
    endif;
    }
}
?>

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta