PHP RSS未发布到社交媒体网站

时间:2013-12-29 14:32:16

标签: php xml rss feed feedburner

我为自己的网站创建了自己的Feed,并将其连接到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>';
?>

怎么了?

1 个答案:

答案 0 :(得分:0)

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

  

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

其次,让我们来看看你正在产生的输出。您没有提供PHP的输出(FeedBurner在尝试帮助使Feed更有效/有用的过程中改变了一些东西),但这大致是您生成的,假设数据库中有一个项目:

<?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运行以获得一些提示,甚至将您的Feed与基本示例[{3}}进行比较,但基本上是:

  • 单词“Mindweather”出现在无效的地方。将其移除,或将其移动到需要的位置。它是饲料的标题吗?如果是这样的话,它应该是<title>的{​​{1}}中的“MyProj”。

  • like the one on Wikipedia”出现在无效的地方。如果这是指向您网站的链接,则应该位于<channel>的{​​{1}}元素中,靠近末尾,您有<link>

  • (当我在那里时,你也错过了那条线上<channel>的开角括号。)

  • 您的echo "<link>MyProj/link> </link>元素应之前所有商品。

  • 您的<channel>需要<link>元素。

最重要的是,您的Feed中没有<channel><description>元素。

即使pubDateguid在技术上是可选的,但定期从RSS Feed中提取内容的内容往往会查找其中一个或两个,以查看他们之前是否已经看过它们。 pubDate应该是新项目的发布日期,guid应该是它的唯一标识符(通常使用特定项目的URL。)有关详细信息,请参阅http://www.MySite.info

例如,通常从Feed中提取的内容只会提取过去30天内的项目,因此,它会查找pubDate比此更新的任何pubDate。如果您的商品都没有pubDate,则不会“看到”任何商品。

当我开发Feed时,我通常会抓取the RSS 2.0 spec作为模板,并使我的输出看起来像这样,只有我的详细信息。

最后,请记住,不推荐使用mysql扩展,并将从未来的PHP版本中删除。您an example了解新代码。