你真的能得到 FeedBurner 订阅数?


有时候,你看上去好像真的能搞定读书时的班花系花或者工作后公司的某个交际花—-不过对大多数人来说,这种经历都不曾发生,部分原因是你从没有开始行动,部分原因是你遵循了错误的泡妞指南—-指南,指到他妈的北去了。

在 FeedBurner feed 往 Google 迁移的过程中,有个小变化是 Awareness API 里 XML URI 的,从这个 XML 里可以拿到诸如你的 blog 在 FeedBurner 的订阅数这样的信息—-有时候有的人,更喜欢自己拿订阅数,然后呈现出来,而不是用 FeedBurner 那个傻傻的 GIF 图片。好了,因为往 Google 迁移的问题,很多指南更新了,给出了类似这样的 code 来拿订阅数。

$fburl=”https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=YourURL”;
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $fburl);
$stored = curl_exec($ch);
curl_close($ch);
$grid = new SimpleXMLElement($stored);
$rsscount = $grid->feed->entry['circulation'];
echo $rsscount;

很多地方都是这个写法,仅仅是更新 rul 而已,少数细节可能不同,不过逻辑是一样的。给出这样 sample 的地方还不少,有些是我觉得不错的 blog,经常提供新奇使用 WordPress 方法的地方,按理是我觉得“懂道”的人,比方(下列都是错的,不工作) WpRecipeshongkiatyoast 的好几个版本。不过,很遗憾,我真的不相信他们的作者确认过了这段 code 可以工作—-因为它确实在我这儿不工作,或者至少和你以为没问题缺省配置不搭配。

解决方法是,你还需要一行:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

完整的正确代码是:

$fburl=”https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=YourURL”;
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $fburl);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$stored = curl_exec($ch);
curl_close($ch);
$grid = new SimpleXMLElement($stored);
$rsscount = $grid->feed->entry['circulation'];
echo $rsscount;

我开始也纳闷了很久,怎么这么多地方的参考代码都不工作。被逼无奈,先用 wget 取 XML,碰到错误信息,很明显:
ERROR: Certificate verification error for feedburner.google.com: unable to get local issuer certificate
To connect to feedburner.google.com insecurely, use `–no-check-certificate’.
Unable to establish SSL connection.

再查看 curl 文档就行了。或许那些参考代码可以在某些地方工作,不过我觉得修正后的更稳健,适应性更好。换句话说,给参考代码要交代清楚环境需要,自然也要考虑会被应用到什么样的环境里,乱 assumption 可是相当地不专业。