2011-11-26 4 views
0

Я пытаюсь создать RSS-канал на своем сайте, используя следующий код. RSS появляется, но у меня возникают два вопроса:Rss Feed, генерирующий изображение

  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); 
?> 
+0

Вы пишете этот код сами? – Tomalak

ответ

1

В 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; 
    } 
} 
+0

Я удалил то, что вы сказали, чтобы показать изображение, и теперь фид действительно перепутался и показывает все как единый блок текста, без изображений и без заголовков. –

+0

Если вы добавили 'printf ("

");' после того, как напечатано описание $, форматирование должно быть исправлено. – drew010

+0

вы сказали мне удалить, чтобы удалить этот раздел .. что вы имеете в виду после? –