HPCシステムズではエンジニアを募集しています。詳しくはこちらをご覧ください。
HPCシステムズのエンジニア達による技術ブログ

Tech Blog

arXiv新記事を自動で見張らせてみた

概要

IFTTTの面白さを再発見し、作ってみました。arXiv(RSS feed) ⇒ IFTTT ⇒ Slack 、これでイメージできる方は、はい、それです。

背景

新しい学術情報の収集にarXivのプレプリントを見ている方は少なからずいらっしゃるでしょう。もちろん、それ以外の論文掲載サイトもたくさんありますが、大抵、更新があるかどうかは見に行かないとわからないし、それに、見に行ったけど更新がなくて残念ということもあるでしょう。更新があったときだけ高頻度に読むメディアに通知してくれたら便利ですよね。それも、自分の興味のあるキーワードに引っかかる更新だけについて通知してくれたら・・・。私(この記事の著者)は以前そのようなシステム(関連記事)の開発・保守に携わっていたことがあり、RSS が無い中Perlでスクレイピングをガリガリ書いていたのが懐かしいですが、それは横に置いといて、こうしたニーズはあると思います。これを今回IFTTTを使って作ってみます。コーディングはほぼ無いです(楽になりましたねぇ)。

IFTTT

初見の方には見慣れない言葉と思いますが、「IF This Then That」の略で、「これが起きたらあれをしろ」を簡単に仕組むことができるWebサービス連携サービスです。『イフト』と発音します。簡単に説明すると、あらかじめ、Webサービスとして公開されているツールで「This」にあたるトリガーを定義し、おなじくWebサービスとして公開されているツールで「That」にあたる行動を定義すると、「This」が発生したら「That」をIFTTTが自動的に実行してくれます。ちなみに、IFTTT と似たようなものに、Microsoft flowZapierがありますが、対応しているWebサービスや価格などに違い(参考)があります。

作り方

  1. IFTTT にお好みの認証方法でSign upしてSign inします。
    • メールアドレス&パスワードの他、Googleアカウント・Facebookアカウントでも認証できるそうです(2019年12月執筆時点)。
  2. IFTTT のページ右上の顔アイコンをクリックし、表示されるメニューから「Create」をクリックします。
  3. Create you own If This Then Thatの画面が表示されたら、Thisの左にある「+」をクリックします。
  4. Choose a serviceの画面が表示されたら、Search servicesの検索窓に RSS Feed と入力します。RSS Feedという名前のWebサービスが表示されますので、これ(アイコン)をクリックします。このWebサービスは、任意URLのRSSフィードを定期的に監視して、更新があったらそれをイベント発火にできるトリガーとして機能します。
  5. Connect RSS Feed画面が表示されたら、「Connect」ボタンをクリックします。
  6. Choose trigger画面が表示されたら、「New feed item」アイコンをクリックします。
    • おまけ:他にも「New feed item matches」というアイコンもありますが、そちらは取得後のRSSフィードに特定のキーワードまたはフレーズが含まれている場合にのみ発火させたい場合に使えます。
  7. Complete trigger fields画面が表示されたら、ここでRSSフィードのURLを入力する必要があります。ここに入力するべきURLを以下のように作成します。
    1. arXivのHelpのRSS news feeds for arXiv updatesのページには、Computer Scienceといったカテゴリ単位、あるいはその下位のArtificial Intelligenceといったsubject area単位で閲覧したいときのRSSフィードのURLが説明されています。かいつまむと、http://arxiv.org/rss/ の後ろにカテゴリ短縮名を付ける、あるいはカテゴリ短縮名にドットを付けてsubject area短縮名を付ける、となります(短縮名の一覧は User’s Manual の Subject Classifications節 に載っています)。たとえば、Computer ScienceのArtificial IntelligenceについてのRSSフィードのURLは http://arxiv.org/rss/cs.AI となります。この単位で見張れればいい、という方はこれでどうぞ。自分で指定した検索条件に引っかかるものだけを見張りたい、という方は次項へどうぞ。
    2. arXiv APIのページには、arXivのAPI的利用について諸々の情報が集まっています。まず、使う上での注意事項や制限事項Terms of Use for arXiv APIsのページに書かれているので、これを守って使うようにしましょう
    3. APIの使用例が、arXiv API User’s ManualのページのAPI QuickStart章に載っていますので、ここから見ていきましょう。
      わかりやすいサンプルが書かれています。
      http://export.arxiv.org/api/query?search_query=all:electron
      ↑これでelectronの検索結果がRSS(Atom 1.0)で取得できます。また、
      http://export.arxiv.org/api/query?search_query=all:electron+AND+all:proton
      ↑これでelectronとprotonの両方を含むものが取得できます。
    4. ほかにも細やかな検索条件を指定したい場合、Calling the API節、および Details of Query Construction章に詳しく解説されています。なかでも便利そうなのは、最新〇〇件、といった制限かと思います。これには、sortByとsortOrderのオプションを加えてソートし、max_resultsのオプションで最大件数を制限します。たとえば、”deep learning”を含むもので、投稿日(submittDate)の新しいものから最大20件としたい場合は、次のURLになります。
      http://export.arxiv.org/api/query?search_query=all:%22deep+learning%22&start=0&max_results=20&sortBy=submittedDate&sortOrder=descending
      (ここで、%22 は、複数語をまとめて一つの検索フィールドとして渡したいときに使うダブルクオーテーションをHTML URLにエンコードした文字列です。)

      • sortByオプションには以下を指定できます。
        “relevance”・・・関連度
        “lastUpdatedDate”・・・最終更新日
        “submittedDate”・・・投稿日
      • sortOrderオプションには以下を指定できます。
        “ascending”・・・昇順(日付は古いものから並ぶ)
        “descending”・・・降順(日付は新しいものから並ぶ)
  8. RSS フィードのURLを作成できたら、Complete trigger fields画面のFeed URL箇所に入力し、「Create trigger」ボタンをクリックします。
  9. これで「This」は設定できました。続いてThatの左にある「+」をクリックします。
  10. Choose action service画面が表示されたら、今回は更新をSlackへ投稿させたいので、Search servicesの検索窓に Slack と入力します。Slackという名前のWebサービスが表示されますので、これ(アイコン)をクリックします。このWebサービスは、Slackの任意のチャンネルに記事を投稿する行動として機能します。
  11. ここで、別ウィンドウを開いて、RSS フィードの更新を投稿させたいSlackチャンネルを用意しておきます
  12. Connect Slack画面が表示されたら、「Connect」ボタンをクリックします。
  13. 新しいSlackのウィンドウが開いて、「IFTTT が 【ワークスペース名】Slack ワークスペースにアクセスする権限をリクエストしています」と聞いてきますので、IFTTT がアクセスできる情報と、IFTTT が実行できる内容を確認し、問題なければ「許可する」ボタンをクリックします。
  14. IFTTT 側のウィンドウでChoose action画面が表示されたら、「Post to channel」アイコンをクリックします。
  15. Complete action fields画面が表示されたら、投稿の際の選択肢を選んでいきます。Which channel? のところで Channels を選び、続いて投稿先のチャンネルを選びます(もし、ここで Direct Messages を選んだ場合、送信相手を選ぶことができます)。続いて、Message、Title、Title URL、Thumbnail URLを必要に応じてカスタマイズします。大抵、変更する必要はないかと思います。入力できたら、「Create action」ボタンをクリックします。
  16. Review and finish画面が表示されたら、最終確認です。「Receive notifications when this Applet runs」のスイッチが有効になっている場合、このRSSフィード⇒Slack連携サービス(この連携されて出来上がったものをIFTTTではAppletと呼んでいます)が実行されるときに通知を受け取ることができます。問題なければ「Finish」ボタンをクリックします。
  17. お疲れ様でした。以上で設定は完了です。あとは1~3日程度待って、Slackに更新が届くようになったか確認しましょう。RSS フィードをトリガーとするAppletでは、作成してもすぐには実行されないようです。気長に待ちましょう。

まとめ

IFTTT では、RSS FeedやSlack以外にも、スマートフォンや、AIアシスタントなどのIoTデバイス等と連携できる様々なWebサービスが提供されています。便利な機能を実現できるかどうかは、あなたのアイデア次第!時間や手間が掛かっていることをコンピュータにやらせて自動化できないか、ちょっと考えてみませんか?