Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

きっかけ

https://qiita.com/organizations/lightcafe_gr

弊社ライトカフェグループもついに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でレスポンスを得ることができます。

https://script.google.com/macros/s/{applicationのIDぽいもの}/exec?atom={feedのurl}

まとめと課題

こうした処理をライトに動かす分にはGoogle Apps Scriptは悪くないです。

  • あくまでQiitaが配信するatom形式でのRSS feedに対してのみ使えるAPIです。
  • 今更RSSってどれくらい使われてるんでしょうか。
lightcafe_gr
全国にグループ会社を持つIT企業です
https://www.lightcafe.co.jp/
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした