1

我正在尝试将 RSS 提要加载到我的网站中,但我找到了一个 PHP 脚本来执行此操作并将一些可样式化的标签应用于内容。

下面是获取 RSS 提要并将其作为样式化 HTML 输出到我的网站上的原始脚本(这在本地工作,RSS 项目很好地放置在我的本地测试服务器上的网站中)当我将它上传到我的网络服务器时,它不会得到RSS 项目,它只显示 RSS 内容应该存在的空容器。

这是rss-speech.php脚本:

$rss = new DOMDocument();
$rss->load('http://www.whitehouse.gov/podcast/audio/speeches/rss.xml');
$feed = array();

foreach ($rss->getElementsByTagName('item') as $node) {
    $item = array (
        'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
        'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue,
        'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
        'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue,
    );

    array_push($feed, $item);
}

$limit = 34;

for($x=0;$x<$limit;$x++) {
    $title = str_replace(' & ', ' &amp; ', $feed[$x]['title']);
    $link = $feed[$x]['link'];
    $description = $feed[$x]['desc'];
    $date = date('l F d, Y', strtotime($feed[$x]['date']));

    echo '<div class="rssitem">';
    echo '<p><a href="'.$link.'" title="'.$title.'">'.$title.'</a><br />';
    echo '<small><em>Posted on '.$date.'</em></small></p>';
    echo '<p style=" ">'.$description.'</p>';
    echo '</div>';
}

当我在本地测试服务器(MAMP)上测试它时,这似乎工作正常,但是当我将脚本 FTP 到我的远程网络服务器时,它似乎没有加载提要(其他一切正常,因为我可以看到脚本试图制作在“发布于”行中,内容只是丢失了。

我认为这可能与跨域提要解析有关,所以我尝试像这样制作一个 php 代理:

rss-proxy.php

<?php
header ("Content-Type:text/xml");

echo file_get_contents('http://www.whitehouse.gov/podcast/audio/speeches/rss.xml');
?>

如果我运行它,它将在浏览器中显示如下内容:

en clean Public Domain The White House 在这个全面的播客中了解奥巴马总统的所有讲话、市政厅和新闻发布会。此提要偶尔会包含其他校长的评论,例如副总统拜登和第一夫人米歇尔奥巴马。在这个全面的播客中跟上奥巴马总统的所有讲话、市政厅和新闻发布会。此提要偶尔会 [等...]

我试图解析的 XML 示例:

<channel>
    <title>White House Speeches (Audio)</title>
    <link>http://www.whitehouse.gov/podcast/audio/press-briefings/rss.xml
        <description></description>
        <language>en</language>
        <atom:link href="http://www.whitehouse.gov/podcast/audio/speeches/rss.xml" rel="self" 
           type="application/rss+xml">
           <itunes:explicit>clean</itunes:explicit>
           <copyright>Public Domain</copyright>
           <itunes:author>The White House</itunes:author>
           <itunes:image href="http://www.whitehouse.gov/sites/default/files/imagecache/podcast_detail
               /podcasts/audio/speeches_audio.jpg">
               <itunes:subtitle>Keep up with all of President Obama's remarks, town halls, and press 
                   conferences in this comprehensive podcast.  This feed will occasionally include remarks from 
                   other principals like Vice President Biden and First Lady Michelle Obama.</itunes:subtitle>
                   <itunes:summary>Keep up with all of President Obama's remarks, town halls, and press 
                       conferences in this comprehensive podcast.  This feed will occasionally include remarks from    
                       other principals like Vice President Biden and First Lady Michelle Obama.</itunes:summary>
                       <itunes:category text="Government &amp; Organizations">
                        <item>
                           <title>Young African Leaders Initiative Town Hall</title>
                           <link>http://www.whitehouse.gov/photos-and-video/video/2013/06/29/young-african-leaders-
                               initiative-town-hall
    <description><!--[CDATA[At the University of Johannesburg - Soweto, President Obama discusses 
       youth empowerment and leadership with young African leaders in a town hall meeting.]]-->
    </description>
    <enclosure url="http://www.whitehouse.gov/videos/2013/June/062913_UniversityofJohannesburg.mp3" type="audio/mpeg">
       <category domain="http://www.whitehouse.gov/taxonomy/term/16">The President</category>
       <category domain="http://www.whitehouse.gov/admin/category/issue-tag/foreign-policy">
           Foreign Policy</category>
           <category domain="http://www.whitehouse.gov/taxonomy/term/9">Speeches &amp; Events</category>
           <itunes:keywords>Foreign Policy</itunes:keywords>
           <itunes:author>The White House</itunes:author>
           <itunes:summary>
               <itunes:subtitle>At the University of Johannesburg - Soweto, President Obama discusses 
                   youth empowerment and leadership with young African leaders in a town hall meeting.         
               </itunes:subtitle>
               <itunes:explicit>clean</itunes:explicit>
               <pubdate>Sat, 29 Jun 2013 21:26:37 +0000</pubdate>
               <dc:creator>The White House</dc:creator>
               <guid ispermalink="false">223196 at http://www.whitehouse.gov</guid>
           </itunes:summary>
       </enclosure>
   </item>
</channel>

然后让rss-speech.php脚本执行:

$rss->load('rss-proxy.php');

这就是它出错的地方,新的 DOMdocument 似乎没有从rss-proxy.php脚本中得到任何东西,即使我刚刚确认代理正确地获取了 XML 源代码。

我也试过这个:http ://benalman.com/projects/php-simple-proxy/

我什至尝试使用以下方法将 RSS 提要缓存到缓存目录中的 XML 文件:http ://www.javascriptkit.com/dhtmltutors/ajaxticker/ajaxticker2.shtml

这似乎可以在本地正确创建 XML 文件,但在远程它会生成一个 0kb 的空 XML 文件。我已经通过 FTP 检查了所有人的读/写权限。此外,如果我尝试将此文件中的内容发送到rss-speech.php脚本,它不起作用(本地或远程)。

似乎也有很多解析错误,它只会使 0kb 的空缓存 RSS 文档。

我尝试的任何方法似乎都不起作用,它只是无法从 RSS 提要中获取内容。

关于如何让它发挥作用的任何想法?

4

1 回答 1

1

我解决了我的问题!

我使用 cURL 而不是 file_get_contents。

我发现问题是由于在我的托管服务器上禁用了 allow_url_fopen 。然后我找到了一个关于如何使用 cURL 阅读提要的很棒的教程。

http://ditio.net/2008/06/19/using-php-curl-to-read-rss-feed-xml/

顺便感谢您的帮助!

于 2013-06-30T20:40:48.207 回答