LoginSignup
2
4

More than 5 years have passed since last update.

GASをパイプラインにしてQiita RSSのSlack通知を改善する。

Posted at

きっかけ

弊社ライトカフェグループもついにQiita Organizationsを使い始めたので、SlackにQiitaチャンネルを作ってきゃっきゃうふふしているのですが、SlackデフォルトのRSS通知での表示は見やすいものになっていませんでした。
スクリーンショット 2018-11-14 10.31.35.png
若干イケていませんよね。
SlackであればURLさえ貼られればデフォルトでいい感じに展開してくれるので、
スクリーンショット 2018-11-14 10.31.48.png
こんな感じになってくれれば嬉しいですね。
ということでRSSを加工するパイプラインを作成してみましょう。

開発環境

ライトに作りきってしまいたかったのでGoogle Apps Scriptにしました。
本当はローカルで開発してデプロイして。と今風の開発をしたかったのですが、ライトにやってしまいました。

参考(理想)

【GoogleAppsScript】ES6を使ったGoogle Apps Scriptの開発

現実

Google Drive上から、新規ファイル作成でGoogle Apps Scriptを指定してコーディング開始です。
GASをwebアプリケーション化するためにはdoGetdoPost関数を作成することでいい感じに処理してくれるようになります。今回は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ってどれくらい使われてるんでしょうか。
2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4