きっかけ
弊社ライトカフェグループもついにQiita Organizationsを使い始めたので、SlackにQiitaチャンネルを作ってきゃっきゃうふふしているのですが、SlackデフォルトのRSS通知での表示は見やすいものになっていませんでした。
若干イケていませんよね。
SlackであればURLさえ貼られればデフォルトでいい感じに展開してくれるので、
こんな感じになってくれれば嬉しいですね。
ということでRSSを加工するパイプラインを作成してみましょう。
開発環境
ライトに作りきってしまいたかったのでGoogle Apps Scriptにしました。
本当はローカルで開発してデプロイして。と今風の開発をしたかったのですが、ライトにやってしまいました。
参考(理想)
【GoogleAppsScript】ES6を使ったGoogle Apps Scriptの開発
現実
Google Drive上から、新規ファイル作成でGoogle Apps Script
を指定してコーディング開始です。
GASをwebアプリケーション化するためにはdoGet
やdoPost
関数を作成することでいい感じに処理してくれるようになります。今回はdoGet
で。
urlパラメータから atom
に指定されたフィードurlを拾って、 XmlService
を利用して加工します。
この際、feedにはnamespaceが指定されているため、要素の取得にはnamespaceを指定してやる必要があります。
今回はurlだけにポストされるようにしたかったので、titleとcontentをdetachすることでノードを削除するだけの対応です。
function doGet(e) {
var feed = e.parameter.atom;
var response = UrlFetchApp.fetch(feed);
var xml = XmlService.parse(response.getContentText());
var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom');
var entries = xml.getRootElement().getChildren("entry", atom);
for (var i=0; i<entries.length; i++) {
entries[i].getChild('content', atom).detach();
entries[i].getChild('title', atom).detach();
}
return ContentService
.createTextOutput(XmlService.getPrettyFormat().format(xml.getRootElement()))
.setMimeType(ContentService.MimeType.XML);
}
コードが出来たらメニューから [公開] -> [ウェブ アプリケーションとして導入] を選択すればurlが払い出されるので、以下のようにクエリパラメータでfeed urlを指定してやれば加工されたXMLでレスポンスを得ることができます。
まとめと課題
こうした処理をライトに動かす分にはGoogle Apps Scriptは悪くないです。
- あくまでQiitaが配信するatom形式でのRSS feedに対してのみ使えるAPIです。
- 今更RSSってどれくらい使われてるんでしょうか。