繁体   English   中英

Rss Feed,生成图像

[英]Rss Feed, generating the image

我正在尝试使用以下代码在我的网站上生成RSS feed。 rss出现了,但是我遇到两个问题:

  1. 当提要显示在我的页面上时,图像没有显示,而是看到img链接像这样直接显示在页面上... <a href="http://movies.nytimes.com/2011/11/18/movies/garbo-the-spy-about-juan-pujol-garcia-review.html?partner=rssnyt&emc=rss"><img src="http://graphics8.nytimes.com/images/2011/11/18/movies/18RDP_GARBO/18RDP_GARBO-thumbStandard.jpg" border="0" height="75" width="75" hspace="4" align="left"></a>

  2. 如何限制网站上显示的文章数量?

这是RSS的链接: 间谍RSS FEED这是我正在使用的代码:

    <?php
$insideitem = false;
$tag = "";
$title = "";
$description = "";
$link = "";
$locations = array('http://topics.nytimes.com/topics/reference/timestopics/subjects/e/espionage/index.html?rss=1');
srand((float) microtime() * 10000000); // seed the random gen 
$random_key = array_rand($locations);
function startElement($parser, $name, $attrs) {
 global $insideitem, $tag, $title, $description, $link;
 if ($insideitem) {
  $tag = $name;
 } elseif ($name == "ITEM") {
  $insideitem = true;
 }
}
function endElement($parser, $name) {
 global $insideitem, $tag, $title, $description, $link;
 if ($name == "ITEM") {
  printf("<dt><b><a href='%s' target=new>%s</a></b></dt>",
  trim($link),htmlspecialchars(trim($title)));
  printf("<dt>%s</dt><br><br>",htmlspecialchars(trim($description)));
  $title = "";
  $description = "";
  $link = "";
  $insideitem = false;
 }
}
function characterData($parser, $data) {
 global $insideitem, $tag, $title, $description, $link;
 if ($insideitem) {
 switch ($tag) {
  case "TITLE":
  $title .= $data;
  break;
  case "DESCRIPTION":
  $description .= $data;
  break;
  case "LINK":
  $link .= $data;
  break;
 }
 }
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
$fp = fopen($locations[$random_key], 'r')
 or die("Error reading RSS data.");
while ($data = fread($fp, 4096))
 xml_parse($xml_parser, $data, feof($fp))
  or die(sprintf("XML error: %s at line %d",
   xml_error_string(xml_get_error_code($xml_parser)),    
   xml_get_current_line_number($xml_parser)));
fclose($fp);
xml_parser_free($xml_parser);
?>

endElement() ,当输出提要内容时,它将调用printf("<dt>%s</dt><br><br>",htmlspecialchars(trim($description)));

如果删除htmlspecialchars函数,则它应正确显示图像和其他html,而不是将<转换为&lt; 等等

给定该代码,没有内置的方式来限制提要的数量。 Nytimes可能有一个选项,您可以将其作为查询字符串的一部分来传递,以限制结果的数量,但是我不确定。

一种快速的解决方案是添加一个名为$numShown或类似名称的全局变量,在endElement()的开头,您可以对其进行递增,并检查其是否在某个值之上,如果是,则在return之前所有printf调用以输出提要项。

<?php

function endElement($parser, $name) {
    global $insideitem, $tag, $title, $description, $link, $numShown;

    if ($name == "ITEM") {
        $numShown++;

        if ($numShown >= 5) {
            return ;
        }

        printf ( "<dt><b><a href='%s' target=new>%s</a></b></dt>", trim ( $link ), htmlspecialchars ( trim ( $title ) ) );
        printf ( "<dt>%s</dt><br><br>", trim ( $description ) );
        $title = "";
        $description = "";
        $link = "";
        $insideitem = false;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM