Hai sa fim practici!
RSS icon Email icon Home icon
  • PHP XML Blogroll sursa: blogspot.com - Suport cache si MYSQL

    Posted on October 18th, 2009 admin No comments

    Am scris acest articol si functie cu scopul de a o implementa intr-un site pentru a afisa ultimele posturi de pe un blog gazduit pe blogspot.com (gen: http://carbonenergy.blogspot.com), cu alte cuvinte: Blogroll

    Este facut in PHP cu suport MYSQL pentru a stoca cache-ul si foloseste simpleXML pentru luare datelor de pe blog.

    Este setat sa actualizeze informatiile la 24 de ore, dar acest interval se poate modifica, regland intervalul de secunde. Prescurteaza textul din titlu si din continut la un numar setat de caractere (acestea pot fi setat in script).

    Folosit scriptul returneaza un array cu informatile despre posturi: date (datetime), link, titlu si continut, timestamp.

    Singura sa problema e ca nu curata posturile vechi din baza de date.  Poate implementez in urmatoarea versiune.

    Exemplu: http://www.carbonenergy.ro/ : vezi partea de stanga a siteului (Blogroll)

    Functia PHP:

    function get_broll ($num = 3) {

    $query = mysql_query(”SELECT `id`, `date`, `title`, `link`, `content`, `tstamp` FROM `cms_broll` ORDER by `date` DESC LIMIT 0, 3″);

    $i = 0;
    while ($row = mysql_fetch_assoc($query)) {
    $brollq[$i] = $row;
    $brollq[$i]['date'] = substr($brollq[$i]['date'], 0, 10);
    $i++;
    }

    $tstamp = time();

    if ((mysql_num_rows($query) == 0) || !isset($brollq[0]['tstamp']) || (($tstamp - $brollq[0]['tstamp']) > 86400)) {

    $xml=@simplexml_load_file(’http://carbonenergy.blogspot.com/feeds/posts/default’);

    if(!$xml){return 0;}

    for ($i = 0; $i < $num ; $i++) {

    $broll[$i]['link'] = $xml->entry[$i]->link[4]->attributes()->href;
    $broll[$i]['date'] = str_replace(’T', ‘ ‘, substr($xml->entry[$i]->published, 0, 19));
    $broll[$i]['title'] = substr($xml->entry[$i]->title, 0, 33);
    if (strlen($xml->entry[$i]->title) > 33) {$broll[$i]['title'] .= ‘…’; }
    $broll[$i]['content'] = substr($xml->entry[$i]->content, 0, 137);
    if (strlen($xml->entry[$i]->content) > 132) {$broll[$i]['content'] .= ‘…’; }

    if ((mysql_num_rows($query) == 0) || ($brollq[$i]['link'] != $broll[$i]['link']) ) {
    $up = mysql_query(”INSERT INTO `cms_broll` (`date`, `title`, `link`, `content`, `tstamp`) VALUES(’”.$broll[$i]['date'].”‘,’”.$broll[$i]['title'].”‘,’”.$broll[$i]['link'].”‘,’”.$broll[$i]['content'].”‘,’”.$tstamp.”‘)”);
    }
    $broll[$i]['date'] = substr($xml->entry[$i]->published, 0, 10);

    }

    } else {
    return $brollq;}

    return $broll;

    }

    Structura tabel de date MYSQL:
    CREATE TABLE IF NOT EXISTS `cms_broll` (
    `id` int(11) NOT NULL auto_increment,
    `date` datetime NOT NULL,
    `title` text NOT NULL,
    `link` text NOT NULL,
    `content` text NOT NULL,
    `tstamp` int(11) NOT NULL,
    UNIQUE KEY `id_2` (`id`),
    UNIQUE KEY `id_3` (`id`),
    KEY `id` (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=34 ;


    – Dumping data for table `cms_broll`

    INSERT INTO `cms_broll` (`id`, `date`, `title`, `link`, `content`, `tstamp`) VALUES
    (33, ‘2009-10-16 02:34:00′, ‘Doua miliarde euro din emisiile d…’, ‘http://carbonenergy.blogspot.com/2009/10/doua-miliarde-euro-din-emisiile-de-co2.html’, ‘Ca sa mai faca rost de niste bani la buget pe timp de criza, Guvernul spera sa obtina doua miliarde euro din vanzarea surplusului de drep…’, 1255794474),
    (32, ‘2009-10-16 02:36:00′, ‘Primul proiect de captare a CO2 i…’, ‘http://carbonenergy.blogspot.com/2009/10/primul-proiect-de-captare-co2-in.html’, ‘Producatorul de gaze Romgaz, transportatorul national de gaze Transgaz si producatorul de energie electrica Complexul Energetic Craiova v…’, 1255794474),
    (31, ‘2009-10-16 02:38:00′, ‘EU: Romania, Bulgaria must cut na…’, ‘http://carbonenergy.blogspot.com/2009/10/eu-romania-bulgaria-must-cut-national.html’, ‘London. The European Commission Friday ruled that Romania and Bulgaria must both reduce their carbon dioxide national allocation plans fo…’, 1255794474);

    Astept comentarii si sugestii.