DeepL + Slack + GitHub Actionsでリモセン論文取得Botの作成
記事要約
- 指定したキーワードが含まれる論文をSlack上に投げるbotを作成
- 内容を簡単に把握するためDeepLの翻訳結果をつけた
- GitHub Actionsで指定時間にbotを起動するようにした
完成イメージ
タイトルとURL、著者に加えて日英の概要を表示
リポジトリ
使い方
準備
- SlackのIncoming Webhookを使用してbotを作成、APIトークンを確認する
- DeepLのアカウントを作成、DeepL APIの認証キーを確認する
GitHub ActionsでのSchedule設定
-
Settings -> Secrets -> Actions
にIncoming WebhookとDeepL APIの認証キーを設定する- SLACK_API_TOKEN:Incoming WebhookのAPIトークン
- DEEPL_API_TOKEN:DeepL APIの認証キー
-
slackbot_settings.py
のCHANNEL
に投稿先チャンネル名を入力する -
keyword.yml
に検索したいキーワードを入力する - 上手くいくと12時~14時の間に検索キーワードにヒットした論文がSlackのチャンネルに流れてきます
keyword.ymlについて
リモセン(Remote Sensing、航空写真や衛星画像を使う分野)関連の論文を探したいため大きく3つのグループに分けて検索キーワードを設定しています。
- genre:大雑把なジャンル名(例:remote sensing, earth observation)
- resource:主に衛星名や特殊なセンサー名(例:Landsat, hyper spectral)
- usecase:使用されている事例名(例:ship detection, landcover)
構成
イメージ図
論文の取得
slackbot_settings.py
のPUBLISH
という変数に記載されている箇所から論文を取得してきます。22/10/28時点ではarXivとMDPIに対応しています。変数の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時)に実行」というふうに書いています。実行内容の手順を簡単に書くと
- Python 3.9のセットアップ
- requirements.txtに書かれたライブラリをpipでインストール
- SECRETSの変数を.envファイルとして書き出し
- run.pyの実行
という感じです。
実行時間に幅があるのはGitHub Actionsの実行にバラツキがあるためです。今回のbotでは厳密なタイムスケジュールである必要が無いためよしとしています。
おわりに
一般的なタスクの論文であればtwitterなどで見かけることがありますが、ニッチな分野の論文だと探すのも大変です。今回は宙畑さんが主催の#MonthlySatDataNewsという論文を読む企画に使えそうだったので昔作成したものを少し改良しました。これをきっかけに衛星データ活用が進んでくれると嬉しいです。
Discussion