昨天一起来就看到GOOGLE READER要离我们而去了,开始是怎么都想不通,一番了解之后才发现原来GOOGLE READER的死早已注定。惋惜归惋惜,首要任务当然是寻找代替产品。去年开始喜欢上了玩豆瓣,所以就想把订阅的条目都搬到九点里去。我在九点里没有别的订阅,所以在页面里只看到一个输入框和一个添加按钮……难道这要我一条一条的加上去?怎么可能!用GOOGLE TAKEOUT可以导出OPML,这是一个XML文件,里面包含了我GOOGLE READER的订阅信息。用脚本解析OPML文件,然后用CURL自动提交到九点添加订阅条目,就是这么个简单的想法,以及这段简单的代码。嗯,我觉得连工具都算不上,只能算玩具=_=
//解析OPML获得订阅源信息
function get_url_list() {
$url_list = array();
$doc = new DOMDocument();
$doc->load('./xml/subscriptions.xml');
$element = $doc->getElementsByTagName('outline');
foreach ($element as $e) {
if ($e->hasAttribute('xmlUrl')) {
$url_list[] = array(
'title' => $e->getAttribute('title'),
'htmlUrl' => $e->getAttribute('htmlUrl'),
);
}
}
return $url_list;
}
//用CURL向九点自动提交订阅
function subscript($sub_url) {
$url = 'http://9.douban.com/reader/subscription';
$post_data = array(
'url' => $sub_url
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$out_put = curl_exec($ch);
if ($out_put === FALSE)
echo 'cURL Error:'.curl_error($ch);
else
echo $out_put;
curl_close($ch);
}
//=======MAIN==============
$url_list = get_url_list();
foreach ($url_list as $url) {
echo $url['title'].' : '.$url['htmlUrl'].'<br />';
subscript($url['htmlUrl']);
echo '<hr />';
}
本来以为这样就能完成订阅的搬迁,结果我再次进入九点发现订阅列表还是空空如也。仔细分析九点提交页面的源码以及脚本的执行结果后发现,提交是没有问题的,但是提交完成后九点并没有直接完成订阅操作,而是返回了一个JSON对象。
{"subscription":{"id":"9136865","unread":0,"is_new":true,"name":"xkcd.com"}}
对象中包含订阅条目的信息,原来这次提交仅仅是一次查询。接下来就是JS的工作了,我猜是从session里找到我的用户信息,然后发送ajax完成订阅(也是,我写的脚本里面没有我的用户信息,它怎么可能知道是谁提交的,要是订阅成功了才奇怪吧)。
就在我看着九点的源码为怎么把JS的工作也接管过来挠头的时候,我发现九点原来有导入OPML的功能……然后,就没有然后了。
没错,失败的玩具……沮丧之时把脚本修改了一下可以用CURL直接向GOOGLE或百度提交搜索请求,得到的输出结果就是搜索页面,和用搜索引擎搜索的结果一样(废话)。
PS:但是,最后我还是选择了FEEDLY……