[HELP]RSS - News Aggregator su web site[X Sergio anche...]

Collapse
X
 
  • Filter
  • Ora
  • Show
Clear All
new posts
  • zuperman
    Zuper Hero
    • May 2003
    • 17204
    • 364
    • 274
    • Burundi/usr/bin
    • Send PM

    [HELP]RSS - News Aggregator su web site[X Sergio anche...]

    Ciao ragazzi,
    anche se questo non è esattamente la location adatta scrivo qui questa mia domanda.

    Ho installato nel mio sito cavia offerto da Lycos http://utenti.lycos.it/bodygeneration un news aggregator in php.
    Non è altro che un paio di script:
    rss_merge.php
    lastRSS.php


    Ho copiato questi due script nella cartella http://utenti.lycos.it/bodygeneration/rss
    e all'interno della stessa cartella ho creato una sottodirectory denominata temp con permessi 777.

    Riporto il mio rss_merge.php

    <!-- Heading -->
    <h1>Simple RSS agregator</h1>
    <img src="lastrss_button.gif" alt="" width="88" height="31" border="0">
    </a><hr>
    <!-- / Heading -->

    <?php
    /*
    ======================================================================
    lastRSS usage DEMO 3 - Simple RSS agregator
    ----------------------------------------------------------------------
    This example shows, how to create simple RSS agregator
    - create lastRSS object
    - set transparent cache
    - show a few RSS files at once
    ======================================================================
    */

    function ShowOneRSS($url) {
    global $rss;
    if ($rs = $rss->get($url)) {
    echo "<big><b><a href=\"$rs[link]\">$rs[title]</a></b></big><br />\n";
    echo "$rs[description]<br />\n";

    echo "<ul>\n";
    foreach ($rs['items'] as $item) {
    echo "\t<li><a href=\"$item[link]\" title=\"$item[description]\">$item[title]</a></li>\n";
    }
    if ($rs['items_count'] <= 0) { echo "<li>Sorry, no items found in the RSS file :-(</li>"; }
    echo "</ul>\n";
    }
    else {
    echo "Sorry: It's not possible to reach RSS file $url\n<br />";
    // you will probably hide this message in a live version
    }
    }

    // ===============================================================================

    // include lastRSS
    include "./lastRSS.php";

    // List of RSS URLs
    $rss_left = array(
    'http://data.kataweb.it/rss/news/sport',
    'http://data.kataweb.it/rss/news/sport'
    );
    $rss_right = array(
    'http://data.kataweb.it/rss/news/nazionali',
    'http://data.kataweb.it/rss/news/nazionali'
    );

    // Create lastRSS object
    $rss = new lastRSS;

    // Set cache dir and cache time limit (5 seconds)
    // (don't forget to chmod cahce dir to 777 to allow writing)
    $rss->cache_dir = './temp';
    $rss->cache_time = 3000;


    // Show all rss files
    echo "<table cellpadding=\"10\" border=\"0\"><tr><td width=\"50%\" valign=\"top\">";
    foreach ($rss_left as $url) {
    ShowOneRSS($url);
    }
    echo "</td><td width=\"50%\" valign=\"top\">";
    foreach ($rss_right as $url) {
    ShowOneRSS($url);
    }
    echo "</td></tr></table>";


    e questo è lastRSS.php (standard)
    <?php
    /*
    ======================================================================
    lastRSS 0.9.1

    Simple yet powerfull PHP class to parse RSS files.

    by Vojtech Semecky, webmaster @ webdot . cz

    Latest version, features, manual and examples:


    ----------------------------------------------------------------------
    LICENSE

    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License (GPL)
    as published by the Free Software Foundation; either version 2
    of the License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    GNU General Public License for more details.

    To read the license please visit http://www.gnu.org/copyleft/gpl.html
    ======================================================================
    */

    /**
    * lastRSS
    * Simple yet powerfull PHP class to parse RSS files.
    */
    class lastRSS {
    // -------------------------------------------------------------------
    // Public properties
    // -------------------------------------------------------------------
    var $default_cp = 'UTF-8';
    var $CDATA = 'nochange';
    var $cp = '';
    var $items_limit = 0;
    var $stripHTML = False;
    var $date_format = '';

    // -------------------------------------------------------------------
    // Private variables
    // -------------------------------------------------------------------
    var $channeltags = array ('title', 'link', 'description', 'language', 'copyright', 'managingEditor', 'webMaster', 'lastBuildDate', 'rating', 'docs');
    var $itemtags = array('title', 'link', 'description', 'author', 'category', 'comments', 'enclosure', 'guid', 'pubDate', 'source');
    var $imagetags = array('title', 'url', 'link', 'width', 'height');
    var $textinputtags = array('title', 'description', 'name', 'link');

    // -------------------------------------------------------------------
    // Parse RSS file and returns associative array.
    // -------------------------------------------------------------------
    function Get ($rss_url) {
    // If CACHE ENABLED
    if ($this->cache_dir != '') {
    $cache_file = $this->cache_dir . '/rsscache_' . md5($rss_url);
    $timedif = @(time() - filemtime($cache_file));
    if ($timedif < $this->cache_time) {
    // cached file is fresh enough, return cached array
    $result = unserialize(join('', file($cache_file)));
    // set 'cached' to 1 only if cached file is correct
    if ($result) $result['cached'] = 1;
    } else {
    // cached file is too old, create new
    $result = $this->Parse($rss_url);
    $serialized = serialize($result);
    if ($f = @fopen($cache_file, 'w')) {
    fwrite ($f, $serialized, strlen($serialized));
    fclose($f);
    }
    if ($result) $result['cached'] = 0;
    }
    }
    // If CACHE DISABLED >> load and parse the file directly
    else {
    $result = $this->Parse($rss_url);
    if ($result) $result['cached'] = 0;
    }
    // return result
    return $result;
    }

    // -------------------------------------------------------------------
    // Modification of preg_match(); return trimed field with index 1
    // from 'classic' preg_match() array output
    // -------------------------------------------------------------------
    function my_preg_match ($pattern, $subject) {
    // start regullar expression
    preg_match($pattern, $subject, $out);

    // if there is some result... process it and return it
    if(isset($out[1])) {
    // Process CDATA (if present)
    if ($this->CDATA == 'content') { // Get CDATA content (without CDATA tag)
    $out[1] = strtr($out[1], array('<![CDATA['=>'', ']]>'=>''));
    } elseif ($this->CDATA == 'strip') { // Strip CDATA
    $out[1] = strtr($out[1], array('<![CDATA['=>'', ']]>'=>''));
    }

    // If code page is set convert character encoding to required
    if ($this->cp != '')
    //$out[1] = $this->MyConvertEncoding($this->rsscp, $this->cp, $out[1]);
    $out[1] = iconv($this->rsscp, $this->cp.'//TRANSLIT', $out[1]);
    // Return result
    return trim($out[1]);
    } else {
    // if there is NO result, return empty string
    return '';
    }
    }

    // -------------------------------------------------------------------
    // Replace HTML entities &something; by real characters
    // -------------------------------------------------------------------
    function unhtmlentities ($string) {
    // Get HTML entities table
    $trans_tbl = get_html_translation_table (HTML_ENTITIES, ENT_QUOTES);
    // Flip keys<==>values
    $trans_tbl = array_flip ($trans_tbl);
    // Add support for &apos; entity (missing in HTML_ENTITIES)
    $trans_tbl += array('&apos;' => "'");
    // Replace entities by values
    return strtr ($string, $trans_tbl);
    }

    // -------------------------------------------------------------------
    // Parse() is private method used by Get() to load and parse RSS file.
    // Don't use Parse() in your scripts - use Get($rss_file) instead.
    // -------------------------------------------------------------------
    function Parse ($rss_url) {
    // Open and load RSS file
    if ($f = @fopen($rss_url, 'r')) {
    $rss_content = '';
    while (!feof($f)) {
    $rss_content .= fgets($f, 4096);
    }
    fclose($f);

    // Parse document encoding
    $result['encoding'] = $this->my_preg_match("'encoding=[\'\"](.*?)[\'\"]'si", $rss_content);
    // if document codepage is specified, use it
    if ($result['encoding'] != '')
    { $this->rsscp = $result['encoding']; } // This is used in my_preg_match()
    // otherwise use the default codepage
    else
    { $this->rsscp = $this->default_cp; } // This is used in my_preg_match()

    // Parse CHANNEL info
    preg_match("'<channel.*?>(.*?)</channel>'si", $rss_content, $out_channel);
    foreach($this->channeltags as $channeltag)
    {
    $temp = $this->my_preg_match("'<$channeltag.*?>(.*?)</$channeltag>'si", $out_channel[1]);
    if ($temp != '') $result[$channeltag] = $temp; // Set only if not empty
    }
    // If date_format is specified and lastBuildDate is valid
    if ($this->date_format != '' && ($timestamp = strtotime($result['lastBuildDate'])) !==-1) {
    // convert lastBuildDate to specified date format
    $result['lastBuildDate'] = date($this->date_format, $timestamp);
    }

    // Parse TEXTINPUT info
    preg_match("'<textinput(|[^>]*[^/])>(.*?)</textinput>'si", $rss_content, $out_textinfo);
    // This a little strange regexp means:
    // Look for tag <textinput> with or without any attributes, but skip truncated version <textinput /> (it's not beggining tag)
    if (isset($out_textinfo[2])) {
    foreach($this->textinputtags as $textinputtag) {
    $temp = $this->my_preg_match("'<$textinputtag.*?>(.*?)</$textinputtag>'si", $out_textinfo[2]);
    if ($temp != '') $result['textinput_'.$textinputtag] = $temp; // Set only if not empty
    }
    }
    // Parse IMAGE info
    preg_match("'<image.*?>(.*?)</image>'si", $rss_content, $out_imageinfo);
    if (isset($out_imageinfo[1])) {
    foreach($this->imagetags as $imagetag) {
    $temp = $this->my_preg_match("'<$imagetag.*?>(.*?)</$imagetag>'si", $out_imageinfo[1]);
    if ($temp != '') $result['image_'.$imagetag] = $temp; // Set only if not empty
    }
    }
    // Parse ITEMS
    preg_match_all("'<item(| .*?)>(.*?)</item>'si", $rss_content, $items);
    $rss_items = $items[2];
    $i = 0;
    $result['items'] = array(); // create array even if there are no items
    foreach($rss_items as $rss_item) {
    // If number of items is lower then limit: Parse one item
    if ($i < $this->items_limit || $this->items_limit == 0) {
    foreach($this->itemtags as $itemtag) {
    $temp = $this->my_preg_match("'<$itemtag.*?>(.*?)</$itemtag>'si", $rss_item);
    if ($temp != '') $result['items'][$i][$itemtag] = $temp; // Set only if not empty
    }
    // Strip HTML tags and other bullshit from DESCRIPTION
    if ($this->stripHTML && $result['items'][$i]['description'])
    $result['items'][$i]['description'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['description'])));
    // Strip HTML tags and other bullshit from TITLE
    if ($this->stripHTML && $result['items'][$i]['title'])
    $result['items'][$i]['title'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['title'])));
    // If date_format is specified and pubDate is valid
    if ($this->date_format != '' && ($timestamp = strtotime($result['items'][$i]['pubDate'])) !==-1) {
    // convert pubDate to specified date format
    $result['items'][$i]['pubDate'] = date($this->date_format, $timestamp);
    }
    // Item counter
    $i++;
    }
    }

    $result['items_count'] = $i;
    return $result;
    }
    else // Error in opening return False
    {
    return False;
    }
    }
    }

    ?>

    Questo è il link per testare il mio script http://utenti.lycos.it/bodygeneration/rss/rss_merge.php .

    Come vedete non riesce a raggiungere il file RSS... che sia un problema di lycos che non supporta questa function?

    Grazie
    Last edited by zuperman; 18-10-2005, 16:34:52.
    Allenamento e dieta fanno di te un atleta
  • Ayurvedi77
    Bodyweb Senior
    • Apr 2002
    • 1632
    • 19
    • 6
    • Pisa
    • Send PM

    #2
    E' quasi certo che sia Lycos che non supporta la funzione fopen().
    ___________________


    Codice:
    apt-get remove brain
    apt-get install windows-Vista
    ___________________

    Commenta

    • zuperman
      Zuper Hero
      • May 2003
      • 17204
      • 364
      • 274
      • Burundi/usr/bin
      • Send PM

      #3
      Originariamente Scritto da Ayurvedi77
      E' quasi certo che sia Lycos che non supporta la funzione fopen().
      una alternativa?
      Allenamento e dieta fanno di te un atleta

      Commenta

      • Ayurvedi77
        Bodyweb Senior
        • Apr 2002
        • 1632
        • 19
        • 6
        • Pisa
        • Send PM

        #4
        Alla funzione o a Lycos?
        ___________________


        Codice:
        apt-get remove brain
        apt-get install windows-Vista
        ___________________

        Commenta

        • zuperman
          Zuper Hero
          • May 2003
          • 17204
          • 364
          • 274
          • Burundi/usr/bin
          • Send PM

          #5
          Originariamente Scritto da Ayurvedi77
          Alla funzione o a Lycos?
          A entrambe
          Però come free hosting preferirei restare su lycos ma se sei a conoscenza di una altro free hosting che supporti php dimme dimme...
          Allenamento e dieta fanno di te un atleta

          Commenta

          • Ayurvedi77
            Bodyweb Senior
            • Apr 2002
            • 1632
            • 19
            • 6
            • Pisa
            • Send PM

            #6
            Ok allora crea un file col seguente contenuto e dammi l'output:

            <?php $content = fopen("http://www.bodyweb.it/index.php","r"); $text = fread($content, 24096); fclose($content); echo $text; ?>
            ___________________


            Codice:
            apt-get remove brain
            apt-get install windows-Vista
            ___________________

            Commenta

            • Sergio
              Administrator
              • May 1999
              • 88036
              • 2,166
              • 2,786
              • United States [US]
              • Florida
              • Send PM

              #7
              Originariamente Scritto da zuperman
              A entrambe
              Però come free hosting preferirei restare su lycos ma se sei a conoscenza di una altro free hosting che supporti php dimme dimme...
              Eccomi Zup, sono stato via tutto il giorno oggi.
              Volendo ti posso aprire io sitozzo di prova.



              Commenta

              • zuperman
                Zuper Hero
                • May 2003
                • 17204
                • 364
                • 274
                • Burundi/usr/bin
                • Send PM

                #8
                Originariamente Scritto da Ayurvedi77
                Ok allora crea un file col seguente contenuto e dammi l'output:

                <?php $content = fopen("http://www.bodyweb.it/index.php","r"); $text = fread($content, 24096); fclose($content); echo $text; ?>
                Ho creato un test.php col tuo codice ma non produce output. Pagina bianca.
                Allenamento e dieta fanno di te un atleta

                Commenta

                • zuperman
                  Zuper Hero
                  • May 2003
                  • 17204
                  • 364
                  • 274
                  • Burundi/usr/bin
                  • Send PM

                  #9
                  Originariamente Scritto da Sergio
                  Eccomi Zup, sono stato via tutto il giorno oggi.
                  Volendo ti posso aprire io sitozzo di prova.
                  se vuoi almeno faccio 2prove.
                  Sto testando in locale un news aggregator freeware e non è malaccio. Permette di pubblicare su qualche blog predefinito ma penso che certi possano pubblicare ovunque.
                  Cmq è migliore la strada dell'RSS tramite script.
                  Allenamento e dieta fanno di te un atleta

                  Commenta

                  • Ayurvedi77
                    Bodyweb Senior
                    • Apr 2002
                    • 1632
                    • 19
                    • 6
                    • Pisa
                    • Send PM

                    #10
                    Originariamente Scritto da zuperman
                    Ho creato un test.php col tuo codice ma non produce output. Pagina bianca.
                    Mi sa che fopen() è disabilitata, ma si potrebbe ovviare usando curl.
                    In ogni caso se Sergio ti dà lo spazio meglio così, altrimenti fammi sapere che ti posto altro codice.
                    ___________________


                    Codice:
                    apt-get remove brain
                    apt-get install windows-Vista
                    ___________________

                    Commenta

                    • zuperman
                      Zuper Hero
                      • May 2003
                      • 17204
                      • 364
                      • 274
                      • Burundi/usr/bin
                      • Send PM

                      #11
                      Originariamente Scritto da Ayurvedi77
                      Mi sa che fopen() è disabilitata, ma si potrebbe ovviare usando curl.
                      In ogni caso se Sergio ti dà lo spazio meglio così, altrimenti fammi sapere che ti posto altro codice.
                      intanto ti sarei grato se mi postassi altro codice
                      Allenamento e dieta fanno di te un atleta

                      Commenta

                      • Ayurvedi77
                        Bodyweb Senior
                        • Apr 2002
                        • 1632
                        • 19
                        • 6
                        • Pisa
                        • Send PM

                        #12
                        Prova se funziona questa, in caso affermativo deve essere adattata per i tuoi script:

                        Codice:
                        [b]
                         <?php
                         [/b]      [b]function[/b] get_content[color=#008000]([/color][color=#5555ff]$url[/color][color=#008000])[/color] {
                                 [color=#5555ff]$ch[/color] = [color=#000080]curl_init[/color][color=#008000]();[/color]
                         
                                 [color=#000080]curl_setopt[/color] [color=#008000]([/color][color=#5555ff]$ch[/color][color=#008000],[/color] CURLOPT_URL[color=#008000],[/color] [color=#5555ff]$url[/color][color=#008000]);[/color]
                                 [color=#000080]curl_setopt[/color] [color=#008000]([/color][color=#5555ff]$ch[/color][color=#008000],[/color] CURLOPT_HEADER[color=#008000],[/color] [color=#0000ff]0[/color][color=#008000]);[/color]
                         
                                 [color=#000080]ob_start[/color][color=#008000]();[/color]
                         
                                 [color=#000080]curl_exec[/color] [color=#008000]([/color][color=#5555ff]$ch[/color][color=#008000]);[/color]
                                 [color=#000080]curl_close[/color] [color=#008000]([/color][color=#5555ff]$ch[/color][color=#008000]);[/color]
                                 [color=#5555ff]$string[/color] = [color=#000080]ob_get_contents[/color][color=#008000]();[/color]
                         
                                 [color=#000080]ob_end_clean[/color][color=#008000]();[/color]
                         
                                 [color=#a1a100]return[/color] [color=#5555ff]$string[/color][color=#008000];[/color]
                              }
                         
                              [color=#808080][i]#uso:[/i][/color]
                              [color=#5555ff]$content[/color] = get_content [color=#008000]([/color][color=#dd0000]"http://www.bodyweb.it/index.php"[/color][color=#008000]);[/color]
                              [color=#000080]echo[/color] [color=#008000]([/color][color=#5555ff]$content[/color][color=#008000]);[/color]
                         [b]?>[/b]
                        ___________________


                        Codice:
                        apt-get remove brain
                        apt-get install windows-Vista
                        ___________________

                        Commenta

                        • zuperman
                          Zuper Hero
                          • May 2003
                          • 17204
                          • 364
                          • 274
                          • Burundi/usr/bin
                          • Send PM

                          #13
                          Originariamente Scritto da Ayurvedi77
                          Prova se funziona questa, in caso affermativo deve essere adattata per i tuoi script:

                          Codice:
                          [b]
                             <?php
                             [/b]      [b]function[/b] get_content[color=#008000]([/color][color=#5555ff]$url[/color][color=#008000])[/color] {
                                     [color=#5555ff]$ch[/color] = [color=#000080]curl_init[/color][color=#008000]();[/color]
                             
                                     [color=#000080]curl_setopt[/color] [color=#008000]([/color][color=#5555ff]$ch[/color][color=#008000],[/color] CURLOPT_URL[color=#008000],[/color] [color=#5555ff]$url[/color][color=#008000]);[/color]
                                     [color=#000080]curl_setopt[/color] [color=#008000]([/color][color=#5555ff]$ch[/color][color=#008000],[/color] CURLOPT_HEADER[color=#008000],[/color] [color=#0000ff]0[/color][color=#008000]);[/color]
                             
                                     [color=#000080]ob_start[/color][color=#008000]();[/color]
                             
                                     [color=#000080]curl_exec[/color] [color=#008000]([/color][color=#5555ff]$ch[/color][color=#008000]);[/color]
                                     [color=#000080]curl_close[/color] [color=#008000]([/color][color=#5555ff]$ch[/color][color=#008000]);[/color]
                                     [color=#5555ff]$string[/color] = [color=#000080]ob_get_contents[/color][color=#008000]();[/color]
                             
                                     [color=#000080]ob_end_clean[/color][color=#008000]();[/color]
                             
                                     [color=#a1a100]return[/color] [color=#5555ff]$string[/color][color=#008000];[/color]
                                  }
                             
                                  [color=#808080][i]#uso:[/i][/color]
                                  [color=#5555ff]$content[/color] = get_content [color=#008000]([/color][color=#dd0000]"http://www.bodyweb.it/index.php"[/color][color=#008000]);[/color]
                                  [color=#000080]echo[/color] [color=#008000]([/color][color=#5555ff]$content[/color][color=#008000]);[/color]
                             [b]?>[/b]
                          s'incazza a riga 3
                          Fatal error: Call to undefined function: curl_init() in /data/members/free/tripod/it/b/o/d/bodygeneration/htdocs/rss/test.php on line 3

                          Sembra non riconosca la funzione curl_init()
                          Allenamento e dieta fanno di te un atleta

                          Commenta

                          • Ayurvedi77
                            Bodyweb Senior
                            • Apr 2002
                            • 1632
                            • 19
                            • 6
                            • Pisa
                            • Send PM

                            #14
                            PHP non è compilato con l'estensione CURL....
                            Fatti dare lo spazio da Sergio
                            ___________________


                            Codice:
                            apt-get remove brain
                            apt-get install windows-Vista
                            ___________________

                            Commenta

                            • zuperman
                              Zuper Hero
                              • May 2003
                              • 17204
                              • 364
                              • 274
                              • Burundi/usr/bin
                              • Send PM

                              #15
                              Originariamente Scritto da Ayurvedi77
                              PHP non è compilato con l'estensione CURL....
                              Fatti dare lo spazio da Sergio
                              Mi sa che è l'unica... grazie cmq...

                              SERGIOOOOOOOOOOOOOOOOOOOOOOO
                              Allenamento e dieta fanno di te un atleta

                              Commenta

                              Working...
                              X