我为自己的网站创建了自己的提要,并将其连接到feedburner和dlvr.it,以便传播到社交媒体网站。
然而,每当我在我的网站上创建一个新的帖子时,它都需要几分钟的时间才能发布到feedburner(这并不是一个真正的问题),而且它不会在我的社交媒体账户上发布更新,也不会在查看dlvr时发布更新。它的报告说,">通过pull没有找到任何项目">
连接到feedburner的xml的完整代码如下:
<?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>';
?>
怎么了?
首先,将header()
调用移动到第一个echo()
之前。您应该始终在任何其他输出之前输出标头,因为它们将信息放入HTTP标头中,而HTTP标头应该始终在实际正文开始出现之前完成。正如手册中所说:
请记住,在发送任何实际输出之前,必须调用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规范进行比较,或者通过W3 Feed Validator Service运行它来获得一些提示,甚至可以把你的Feed与一个基本的例子进行比较,比如维基百科上的例子,但基本上是:
"心理天气"一词出现在无效位置。删除它,或者将它移动到需要的位置。它是提要的标题吗?如果是,它应该在
<channel>
的<title>
中的"MyProj"所在的位置。"http://www.MySite.info"显示在无效位置。如果这是指向您的网站的链接,则它应该位于
<channel>
的<link>
元素中,靠近末尾,您有echo "<link>MyProj/link>
(当我在那里的时候,你也错过了那条线上
</link>
的开放角括号。)您的
<channel>
的<link>
元素应该在所有项目之前。您的
<channel>
需要一个<description>
元素。
除此之外,您的提要中没有pubDate
或guid
元素。
尽管pubDate
和guid
在技术上是可选的,但经常从RSS提要中提取内容的东西往往会查找其中一个或两个,看看他们以前是否见过它们。pubDate应该是新项目的发布日期,guid应该是它的唯一标识符(通常使用特定项目的URL)。有关更多详细信息,请参阅RSS 2.0规范。
例如,通常从提要中提取的内容只会提取过去30天的项目,因此它会查找pubDate比这更新的任何item
。如果您的项目都没有pubDate,它将不会"看到"任何项目。
当我开发提要时,我通常会获取一个示例作为模板,并使我的输出看起来像这样,只包含我的详细信息
最后,请记住,mysql扩展已被弃用,并且将从PHP的未来版本中删除。您不应该将其用于新代码。