🛰️

DeepL + Slack + GitHub Actionsでリモセン論文取得Botの作成

2022/10/25に公開約2,600字

記事要約

  • 指定したキーワードが含まれる論文をSlack上に投げるbotを作成
  • 内容を簡単に把握するためDeepLの翻訳結果をつけた
  • GitHub Actionsで指定時間にbotを起動するようにした

完成イメージ

タイトルとURL、著者に加えて日英の概要を表示

リポジトリ

https://github.com/manuriya/arxiv-satellite

使い方

準備

  • SlackのIncoming Webhookを使用してbotを作成、APIトークンを確認する
  • DeepLのアカウントを作成、DeepL APIの認証キーを確認する

GitHub ActionsでのSchedule設定

  1. Settings -> Secrets -> ActionsにIncoming WebhookとDeepL APIの認証キーを設定する
    • SLACK_API_TOKEN:Incoming WebhookのAPIトークン
    • DEEPL_API_TOKEN:DeepL APIの認証キー
  2. slackbot_settings.pyCHANNELに投稿先チャンネル名を入力する
  3. keyword.ymlに検索したいキーワードを入力する
  4. 上手くいくと12時~14時の間に検索キーワードにヒットした論文がSlackのチャンネルに流れてきます

keyword.ymlについて

リモセン(Remote Sensing、航空写真や衛星画像を使う分野)関連の論文を探したいため大きく3つのグループに分けて検索キーワードを設定しています。

  • genre:大雑把なジャンル名(例:remote sensing, earth observation)
  • resource:主に衛星名や特殊なセンサー名(例:Landsat, hyper spectral)
  • usecase:使用されている事例名(例:ship detection, landcover)

構成

イメージ図

論文の取得

slackbot_settings.pyPUBLISHという変数に記載されている箇所から論文を取得してきます。22/10/28時点ではarXivMDPIに対応しています。変数のkeyに論文検索先、valueに検索したいジャンルを指定する形を取っています。

取得にはfeedparserを用いています。RSSを取得したらタイトルに検索キーワードが含まれる論文のみを抜き出してSlack投稿用にフォーマットを整えます。

DeepLによる翻訳

DeepLのライブラリがあるのでそれを用いて実現しています。

論文情報にはdescription(論文のAbstructに該当)があるため、deepl.Translator.translate_textによって日本語へ翻訳しています。ただ、用語も直訳されるため元の文も一緒にSlackに投稿できるようにしています。

Slackへの投稿

Slackの公式SDKによって実現しています。タイトルや著者など基本的な情報はtextに、翻訳結果はattachmentを生成しIncoming Webhook経由でSlackに投稿されます。

GitHub Actionsの利用

指定した時間にスクリプトを実行するためGitHub Actionsを用いて実現しています。以前はHerokuを使ってたのですが、無料枠の廃止のため移行しました。コードの書き直しが発生しないのとcronでの定期実行に対応していたのが決め手でした。

workflowの定義は.github/workflow/python-scheduler.ymlに記述しています。cronには「毎日UTCの3時(日本時間12時)に実行」というふうに書いています。実行内容の手順を簡単に書くと

  1. Python 3.9のセットアップ
  2. requirements.txtに書かれたライブラリをpipでインストール
  3. SECRETSの変数を.envファイルとして書き出し
  4. run.pyの実行

という感じです。

実行時間に幅があるのはGitHub Actionsの実行にバラツキがあるためです。今回のbotでは厳密なタイムスケジュールである必要が無いためよしとしています。

おわりに

一般的なタスクの論文であればtwitterなどで見かけることがありますが、ニッチな分野の論文だと探すのも大変です。今回は宙畑さんが主催の#MonthlySatDataNewsという論文を読む企画に使えそうだったので昔作成したものを少し改良しました。これをきっかけに衛星データ活用が進んでくれると嬉しいです。

Discussion

ログインするとコメントできます