【问题标题】:PHP RSS not posting to Social Media SitesPHP RSS 未发布到社交媒体网站
【发布时间】:2013-12-29 14:32:16
【问题描述】:

我为我的网站创建了自己的提要,并将其连接到 feedburner 和 dlvr.it 以传播到社交媒体网站。

但是,每当我在我的网站上创建新帖子时,都需要几分钟才能发布到 feedburner(这不是一个真正的问题),并且它不会在我的社交媒体帐户和查看 dlvr.it 的报告时发布更新,它说'没有通过拉取找到项目'

我的 xml 的 完整 代码连接到 feedburner,如下所示:

 <?php
include('db.php');

header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="ISO-8859-1"?>  
<rss version="2.0">  
<channel>  
<title>MindWeather Thesis</title>  
<description>Latest News from my website</description>  
<link>http://www.MySite.info</link>';  

$get_articles = "SELECT ID, NewsType, Content,   
DATE_FORMAT(DateTime,'%a, %e %b %Y %T') as formatted_date   
FROM tblnews ORDER BY DateTime DESC LIMIT 15";  

$articles = mysql_query($get_articles) or die(mysql_error());  

while ($article = mysql_fetch_array($articles)){  

    echo '  
       <item>  
          <title>'.$article['NewsType'].'</title>  
          <description><![CDATA['.$article['Content'].']]></description>  
          <link>http://www.MySite.info</link>  
          <pubDate>'.$article['formatted_date'].' GMT</pubDate>  
      </item>';  
} 
echo '</channel>
</rss>';
?>

怎么了?

【问题讨论】:

  • 我的印象是您禁用了 PHP 错误报告(或将其降低到对开发无用的水平)。此外,您不需要转义输入数据,因此只要它包含 &lt;&gt; 或类似内容,它就会破坏提要(无论如何这都是无效的)。
  • 这是brief explanation。错误报告的经验法则是:在开发中显示,在生产中登录。

标签: php xml rss feed feedburner


【解决方案1】:

首先,将header() 调用移到您的第一个echo() 之前。您应该始终在任何其他输出之前输出标头,因为它们将信息放入 HTTP 标头中,在实际正文开始出现之前,该标头应该始终是完整的。正如the manual 所说:

请记住,header() 必须在发送任何实际输出之前调用,无论是通过普通 HTML 标记、文件中的空白行还是通过 PHP。使用 include 或 require 函数或其他文件访问函数读取代码并在调用 header() 之前输出空格或空行是一个非常常见的错误。使用单个 PHP/HTML 文件时也存在同样的问题。

其次,让我们看看您正在生成的输出。您尚未提供 PHP 的输出(FeedBurner 在进行过程中进行了更改以尝试帮助提要更有效/有用),但这大致是您正在生成的内容,假设数据库中有一个项目:

<?xml version='1.0' encoding='ISO-8859-1' ?>
<rss version='2.0'>
Mindweather
  <channel>http://www.MySite.info
    <title>MyProj</title>
    <item>
      <title>NewsType</title>
      <link>http://www.MySite.info/signin.ph</link>
      <description>Content</description>
    </item>
    <link>MyProj/link>
  </channel>
</rss> 

所以,这里有一些问题。您可以将您的输出与RSS spec 进行比较,或者通过W3 Feed Validator Service 运行它以获取一些提示,或者甚至将您的提要与基本示例like the one on Wikipedia 进行比较,但基本上:

  • 单词“Mindweather”出现在无效位置。将其移除,或将其移动到需要的位置。是提要的标题吗?如果是这样,它应该是“MyProj”所在的位置,在&lt;channel&gt;&lt;title&gt; 中。

  • http://www.MySite.info”出现在无效位置。如果那是指向您网站的链接,它应该位于&lt;channel&gt;&lt;link&gt; 元素中,靠近末尾,您有echo "&lt;link&gt;MyProj/link&gt;

  • (当我在那里时,您也错过了该行上&lt;/link&gt; 中的左尖括号。)

  • 您的&lt;channel&gt;&lt;link&gt; 元素应该在您的所有项目之前

  • 您的 &lt;channel&gt; 需要一个 &lt;description&gt; 元素。

除此之外,您的提要中没有 pubDateguid 元素。

尽管 pubDateguid 在技术上是可选的,但定期从 RSS 提要中提取内容的事物往往会查找其中一个或两个,以查看他们以前是否看过它们。 pubDate 应该是新项目的发布日期,而 guid 应该是它的唯一标识符(通常使用特定项目的 URL。)有关更多详细信息,请参阅the RSS 2.0 spec

例如,从提要中提取的内容通常只会提取过去 30 天的项目,例如,它会查找 pubDate 比这更近的任何 items。如果您的所有项目都没有 pubDate,则它不会“看到”其中任何一个。

当我开发一个提要时,我通常会抓取an example 作为模板,并让我的输出看起来像这样,只包含我的详细信息。

最后,请记住 mysql 扩展已被弃用,并将从 PHP 的未来版本中删除。您shouldn't be using it 获取新代码。

【讨论】:

  • 啊,好吧——比我想象的还要糟糕。检查 Feed Validator 给出的错误for your feed;吃完早餐后,我会用更多细节更新我的答案 :) 另外:你能给我们提供你传递给 Feedburner 的 original 提要 XML 吗?看起来 Feedburner 正在尝试通过为您插入 pubDates 来清理您的 RSS,但它们都在 1969 年!
  • 嗨!由于网络问题,过去几天我失去了互联网。无论如何,谢谢你的回复。我已经更新了我的 xml 代码(请参阅问题中的更新代码)并且传递给 feedburner 的 xml 是 mindweather.info/feeding.php
  • 我已经更新了我的代码。我通过了它,终于得到了一个有效的 rss(请参阅上面的更新代码或查看validator.w3.org/feed/…)我已将 dlvr.it 设置为每 30 分钟发布 10 个帖子,但它只发布了一个(尽管它说通过 pull 找到了 10 个帖子,10发布)。还有什么问题?
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多