Google AJAX Feed API的冷门用法

Google AJAX Feed API是google提供的一个很实用的API,我经常用它来跨域获取某些rss feed并展现。但是使用前需要申请一个API KEY,然后才可以在指定网站上使用,如果有多级子域名的话,挨个申请key是一个很烦人的事情,所以也就有了下面说的冷门用法。

Google AJAX Feed API提供了针对Flash或javascript无效这两种环境的额外接口,其中一种可以支持jsonp方式调用,跨域调用feed就全靠它了。

jsonp调用代码示例



这段代码中,指定了callback function为foo,所以我预先定义了一个function foo,运行时就可以在firebug的控制台里清楚的看到返回的json串结构。

使用yahoo pipes烧制RSS集合

看着Google Reader里日益庞大的rss清单,大量的内容一个个浮上来,却没得时间一一细看,这里头实在是有很多我不希望看到的内容存在。若是取消订阅,又显得可惜。

因此我是迫切希望有一个RSS过滤网,滤掉部分内容再仔细阅读。前阵子也花了点时间写了个小小的rss过滤程序,写了一半因为时间关系暂时搁置。这时候想起pipes.yahoo.com似乎能实现类似功能,下边就用pipes烧了几个平常看的rss,然后用Google Reader重新订阅,效果倒也不错。

pipes

http://pipes.yahoo.com/fronend/devel

pipes现在可以支持自定义url了,所以你才可以看到这么短的一个pipes url。根据我的观察,发现要输出较短的rss url也不是难事,如下:

http://pipes.yahoo.com/fronend/devel?_render=rss

BTW:在烧制rss的过程中,有部分utf-8的内容显示为乱码,只要用feedsky先处理一遍,然后加到pipes里头就正常了。

测试feedsky的ping功能

自从开始使用feedsky的来烧制feed之后,更新就成了一个问题。我很早就添加了feedsky的ping服务,但是好像一直没有生效,往往在发布了1小时之后,还没有看到feedsky上的feed更新,最后还得去手工更新一把。

小小的调整了一下,这篇blog算是对ping功能的再次测试,希望能够奏效。

今天开始rss改成全文输出。

update

  • feedsky抽风了,根本不更新 6.4
  • 也许是发牢骚有被人知道了,抓取频率貌似提高了很多,看来不爽就要喊出来啊
    正常 :      2008-06-03 05:46:56     [200] : 已更新
    正常 :      2008-06-03 05:13:49     [304] : 客户端通知未更新
    正常 :      2008-06-03 04:46:59     [304] : 客户端通知未更新
    正常 :      2008-06-03 04:31:51     [304] : 客户端通知未更新
    正常 :      2008-06-03 03:46:58     [304] : 客户端通知未更新
    正常 :      2008-06-03 03:13:50     [304] : 客户端通知未更新
    正常 :      2008-06-03 03:09:13     [304] : 客户端通知未更新
    正常 :      2008-06-03 02:56:14     [304] : 客户端通知未更新
    
  • ping失败了 17:00

用php5的simplexml解析各种feed

最近使用simplexml来解析各种feed源,碰到了一些小问题。

用simplexml处理atom数据

很多博客使用atom来输出数据,但是atom使用了名称空间(namespace),所以现在请求被命名的元素和本地名称时必须指定名称空间统一资源标识符(URI),还有一点就是simplexml的xpath方法无法直接query这个xml tree。

从 PHP 5.1 版开始,SimpleXML 可以直接对带名称空间的文档使用 XPath 查询。和通常一样,XPath 位置路径必须使用名称空间前缀,即使搜索的文档使用默认名称空间也仍然如此。registerXPathNamespace() 函数把前缀和后续查询中使用的名称空间 URL 联系在一起。

下面是使用xpath查询atom文档title元素的例子:


$atom =  simplexml_load_file('http://www.ooso.net/index.php/feed/atom');
$atom->registerXPathNamespace('atom', 'http://www.w3.org/2005/Atom');
$titles = $atom->xpath('//atom:title');
foreach ($titles as $title) 
  echo "

" . $title . "

";

用simplexml处理rss数据

wordpress可以输出rss2的数据源,这里面也有一些不同的namespace,比如dc。一个使用simplexml解析rss2的例子:

Continue reading “用php5的simplexml解析各种feed”

用simplexml解析rss出错

尝试用simplexml解析一个rss数据源,碰到了一个不小的麻烦。每次解析会碰到一个报错:

Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement—construct]: Entity: line 161: parser error : Entity ‘Acirc’ not defined in D:\xampp\htdocs\rss.php on line 11

这是解析rss的php代码片段:

try {
	$xml = new SimpleXMLElement($rss);
	var_dump($xml);
} catch(Exception $e) {
	echo $e->getMessage();
}

查看rss数据源,发现里面有一些乱字符,尝试过滤掉乱字符。

用下面的xmlSafe函数过滤字符,问题解决。

function xmlSafe(&$xml_str) {
	$xml_str =preg_replace("/[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]/",'',$xml_str);
}