4
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

Organization

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

きっかけ

弊社ライトカフェグループもついに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ってどれくらい使われてるんでしょうか。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
4
Help us understand the problem. What are the problem?