webForumDet fria alternativet

Hjälp med en RSS-läsare

PHP

3 svar · 367 visningar · startad av Bire

Medlem sedan dec. 199919 074 inlägg
Frågan#1

Har en läsare som jag vill ha modifierad lite, men jag har noll koll på PHP tyvärr så jag begriper inte hur man gör.. :(

Här är koden:

<?php
/*  PHP RSS Reader v1.1
    By Richard James Kendall 
    Bugs to richard@richardjameskendall.com 
    Free to use, please acknowledge me 
    
    Place the URL of an RSS feed in the $file variable.
       
       The $rss_channel array will be filled with data from the feed,
       every RSS feed is different by by and large it should contain:
       
       Array {
           [TITLE] = feed title
           [DESCRIPTION] = feed description
           [LINK] = link to their website
           
           [IMAGE] = Array {
                       [URL] = url of image
                       [DESCRIPTION] = alt text of image
                   }
           
           [ITEMS] = Array {
                       [0] = Array {
                               [TITLE] = item title
                               [DESCRIPTION] = item description
                               [LINK = a link to the story
                           }
                       .
                       .
                       .
                   }
       }
       
       By default it retrives the Reuters Oddly Enough RSS feed. The data is put into the array
       structure so you can format the information as you see fit.
*/
set_time_limit(0);

$file = "http://www.automotorsport.se/rss/rssgen-nyheter.asp";

$rss_channel = array();
$currently_writing = "";
$main = "5";
$item_counter = 0;

function startElement($parser, $name, $attrs) {
       global $rss_channel, $currently_writing, $main;
       switch($name) {
           case "RSS":
           case "RDF:RDF":
           case "ITEMS":
               $currently_writing = "";
               break;
           case "CHANNEL":
               $main = "CHANNEL";
               break;
           case "IMAGE":
               $main = "IMAGE";
               $rss_channel["IMAGE"] = array();
               break;
           case "ITEM":
               $main = "ITEMS";
               break;
           default:
               $currently_writing = $name;
               break;
       }
}

function endElement($parser, $name) {
       global $rss_channel, $currently_writing, $item_counter;
       $currently_writing = "";
       if ($name == "ITEM") {
           $item_counter++;
       }
}

function characterData($parser, $data) {
    global $rss_channel, $currently_writing, $main, $item_counter;
    if ($currently_writing != "") {
        switch($main) {
            case "CHANNEL":
                if (isset($rss_channel[$currently_writing])) {
                    $rss_channel[$currently_writing] .= $data;
                } else {
                    $rss_channel[$currently_writing] = $data;
                }
                break;
            case "IMAGE":
                if (isset($rss_channel[$main][$currently_writing])) {
                    $rss_channel[$main][$currently_writing] .= $data;
                } else {
                    $rss_channel[$main][$currently_writing] = $data;
                }
                break;
            case "ITEMS":
                if (isset($rss_channel[$main][$item_counter][$currently_writing])) {
                    $rss_channel[$main][$item_counter][$currently_writing] .= $data;
                } else {
                    //print ("rss_channel[$main][$item_counter][$currently_writing] = $data<br>");
                    $rss_channel[$main][$item_counter][$currently_writing] = $data;
                }
                break;
        }
    }
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($file, "r"))) {
    die("could not open XML input");
}

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);

// output as HTML
print ("");
if (isset($rss_channel["ITEMS"])) {
    if (count($rss_channel["ITEMS"]) > 0) {
        for($i = 0;$i < count($rss_channel["ITEMS"]);$i++) {
            print ("<a href=\"" . $rss_channel["ITEMS"][$i]["LINK"] . "\" target=\"_new\">" . $rss_channel["ITEMS"][$i]["TITLE"] . "</a>");
            print ("&nbsp;-&nbsp;");
        }
    } else {
        print ("<b>There are no articles in this feed.</b>");
    }
}
print ("&nbsp;&nbsp;&nbsp;<b>Nyhetskälla: <a href=http://pagead2.googlesyndication.com/pagead/iclk?sa=l&ai=BIgErN2GNQ-LNDL3EiQKWjZ2wBP3jkwqNur-sAcCNtwGgzb4CEAQYBCD8vNkDKAVAwBVIjzlQ-5vrwfv_____AbIBEXd3dy5tb3RvcmZvcnVtLm51ugEKMTYweDYwMF9hc8gBAeABApUCCkJjEw&num=4&adurl=http://www.automotorsport.se&client=ca-pub-4688784803626077>Automotorsport.se</a></center></b>");
?>

Jag vill visa de första 20 tecknen på varje nyhet.

Någon snäll människa som kan ge mig kunskap om det...?

Medlem sedan dec. 199919 074 inlägg
#2

ingen...? :(

Medlem sedan juli 20033 147 inlägg
#3

Ah, sorry, missat tråden.

<?php
/*  PHP RSS Reader v1.1
    By Richard James Kendall
    Bugs to richard@richardjameskendall.com
    Free to use, please acknowledge me

    Place the URL of an RSS feed in the $file variable.

       The $rss_channel array will be filled with data from the feed,
       every RSS feed is different by by and large it should contain:

       Array {
           [TITLE] = feed title
           [DESCRIPTION] = feed description
           [LINK] = link to their website

           [IMAGE] = Array {
                       [URL] = url of image
                       [DESCRIPTION] = alt text of image
                   }

           [ITEMS] = Array {
                       [0] = Array {
                               [TITLE] = item title
                               [DESCRIPTION] = item description
                               [LINK = a link to the story
                           }
                       .
                       .
                       .
                   }
       }

       By default it retrives the Reuters Oddly Enough RSS feed. The data is put into the array
       structure so you can format the information as you see fit.
*/
set_time_limit(0);

$file = "http://www.automotorsport.se/rss/rssgen-nyheter.asp";

$rss_channel = array();
$currently_writing = "";
$main = "5";
$item_counter = 0;

function startElement($parser, $name, $attrs) {
       global $rss_channel, $currently_writing, $main;
       switch($name) {
           case "RSS":
           case "RDF:RDF":
           case "ITEMS":
               $currently_writing = "";
               break;
           case "CHANNEL":
               $main = "CHANNEL";
               break;
           case "IMAGE":
               $main = "IMAGE";
               $rss_channel["IMAGE"] = array();
               break;
           case "ITEM":
               $main = "ITEMS";
               break;
           default:
               $currently_writing = $name;
               break;
       }
}

function endElement($parser, $name) {
       global $rss_channel, $currently_writing, $item_counter;
       $currently_writing = "";
       if ($name == "ITEM") {
           $item_counter++;
       }
}

function characterData($parser, $data) {
    global $rss_channel, $currently_writing, $main, $item_counter;
    if ($currently_writing != "") {
        switch($main) {
            case "CHANNEL":
                if (isset($rss_channel[$currently_writing])) {
                    $rss_channel[$currently_writing] .= $data;
                } else {
                    $rss_channel[$currently_writing] = $data;
                }
                break;
            case "IMAGE":
                if (isset($rss_channel[$main][$currently_writing])) {
                    $rss_channel[$main][$currently_writing] .= $data;
                } else {
                    $rss_channel[$main][$currently_writing] = $data;
                }
                break;
            case "ITEMS":
                if (isset($rss_channel[$main][$item_counter][$currently_writing])) {
                    $rss_channel[$main][$item_counter][$currently_writing] .= $data;
                } else {
                    //print ("rss_channel[$main][$item_counter][$currently_writing] = $data<br>");
                    $rss_channel[$main][$item_counter][$currently_writing] = $data;
                }
                break;
        }
    }
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($file, "r"))) {
    die("could not open XML input");
}

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);

// output as HTML
print ("");
if (isset($rss_channel["ITEMS"])) {
    if (count($rss_channel["ITEMS"]) > 0) {
        for($i = 0;$i < count($rss_channel["ITEMS"]);$i++) {

        	$str = $rss_channel["ITEMS"][$i]["TITLE"];
        	$num = 20;

            print ("<a href=\"" . $rss_channel["ITEMS"][$i]["LINK"] . "\" target=\"_new\">" . (strlen($str) > $num ? substr($str,0,$num-3).'...' : $str) . "</a>");
            print ("&nbsp;-&nbsp;");
        }
    } else {
        print ("<b>There are no articles in this feed.</b>");
    }
}
print ("&nbsp;&nbsp;&nbsp;<b>Nyhetskälla: <a href=http://pagead2.googlesyndication.com/pagead/iclk?sa=l&ai=BIgErN2GNQ-LNDL3EiQKWjZ2wBP3jkwqNur-sAcCNtwGgzb4CEAQYBCD8vNkDKAVAwBVIjzlQ-5vrwfv_____AbIBEXd3dy5tb3RvcmZvcnVtLm51ugEKMTYweDYwMF9hc8gBA  eABApUCCkJjEw&num=4&adurl=http://www.automotorsport.se&client=ca-pub-4688784803626077>Automotorsport.se</a></center></b>");
?>

Tar fram 17 tecken + ... om rubriken är längre än 20, annars visar den bara rubriken som den är.

Medlem sedan dec. 199919 074 inlägg
#4

Tack, funkar klockrent!

269 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)