技术小黑屋

Atom订阅转成RSS2.0

Octopress博客自带的只Atom协议的订阅,但是最近提交收录网站时,需要使用RSS协议。于是利用周末简单实现了一下。

Atom和RSS

以下为维基百科对Atom和RSS的解释。

RSS(简易信息聚合)是一种消息来源格式规范,用以聚合经常发布更新数据的网站,例如博客文章、新闻、音频或视频的网摘。RSS文件(或称做摘要、网络摘要、或频更新,提供到频道)包含了全文或是节录的文字,再加上发用者所订阅之网摘布数据和授权的元数据。

Atom是一對彼此相關的標準。Atom供稿格式(Atom Syndication Format)是用於網站消息來源,基于XML的文档格式;而Atom出版協定(Atom Publishing Protocol,簡稱AtomPub或APP)是用於新增及修改網路資源,基于HTTP的协议。

Atom借鉴了各种版本RSS的使用经验,被許多的聚合工具广泛使用在发布和使用上。Atom供稿格式設計作為RSS的替代品;而Atom出版協定用來取代現有的多種發布方式(如Blogger API和LiveJournal XML-RPC Client/Server Protocol)。而值得一提的是Google提供的多種服务正在使用Atom。Google Data API(GData)亦基於Atom。

可以访问Atom與RSS 2.0的比較,了解更详细的内容。

由此可知,Atom是现在和未来的主要供稿格式,而RSS是一个已经声明被冻结的格式。

Atom转换成RSS

atom2rss.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
    $source = $argv[1];
    $toFile = $argv[2];
    $atom2rssXsl = dirname(__FILE__).'/atom2rss.xsl';
    $chan = new DOMDocument();
    $chan->load($source);
    $sheet = new DOMDocument();
    $sheet->load($atom2rssXsl);
    $processor = new XSLTProcessor();
    $processor->registerPHPFunctions();
    $processor->importStylesheet($sheet);
    date_default_timezone_set("Asia/Shanghai");
    $result = $processor->transformToXML($chan);
    if (strlen($result)) {
      file_put_contents($toFile, $result);
  }
?>

主要依赖的就是进行转换的atom2rss.xml规则。 上述代码可以根据自己的需要设置时区。


我的知乎 Live 推荐