【问题标题】:Rss Feed, generating the imageRss Feed,生成图片
【发布时间】:2011-11-26 19:28:25
【问题描述】:

我正在尝试使用以下代码在我的网站上生成 RSS 提要。 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 的链接:Spy 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);
?>

【问题讨论】:

  • 那段代码是你自己写的吗?

标签: php rss


【解决方案1】:

endElement()中,输出feed内容时,调用printf("&lt;dt&gt;%s&lt;/dt&gt;&lt;br&gt;&lt;br&gt;",htmlspecialchars(trim($description)));

如果您删除htmlspecialchars 函数,那么它应该正确显示图像和其他html,而不是将&amp;lt; 转换为&amp;lt; 等。

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

快速解决方法是添加一个名为$numShown 或类似名称的全局变量,在endElement() 的开头,您可以递增它,并检查它是否高于某个值,如果是的话只是在所有 printf 调用之前的 return 以输出提要项目。

<?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;
    }
}

【讨论】:

  • 我删除了你所说的显示图像的内容,现在提要真的一团糟,所有内容都显示为单个文本块,没有图片,也没有标题。
  • 如果在 $description 打印后添加printf("&lt;div style='clear: both'&gt;&lt;/div&gt;");,格式应该是固定的。
  • 你告诉我要删除以删除该部分.. 之后你是什么意思?
  • 我只是想让你在打印描述时删除 htmlspecialchars 的使用。完整代码见粘贴here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多