arXiv を DeepL して Slack する Bot を Github Action で作った話


この記事は

「arXiv を Deepl して Slack する Bot を Github Action で作った話」

作ったもの

こんなことありませんか?

  • arXivの新着チェックしたい!
  • 毎日N件アップされる!
  • 英語で読むの辛くなる .. orz
  • Deeplで翻訳して読む!
  • 毎回Ctrl+C, Ctrl+Cが疲れてくる .. orz
  • そして、電車だとDeepl使うの面倒 .. orz
  • そもそもチェックするの忘れる ... orz
    • (先週の自分) 「よし、今日から毎日やるぞー! 」
    • (今週の自分) 「あ、忘れてた一日しかやってない.. よし、今日からんpなぽうwfー!!」
  • bot化するぞー!
  • サーバーが必要 .. orz
    • GCP? AWS? CRON実行? デプロイ? 料金? サーバレス? FaaS? ... orz

そんなあなたに

「Github リポジトリをフォークするだけで使える arXiv botのお知らせです」

(略してarXivotです)

毎日論文チェックする方に、需要あれば嬉しいです。

できるだけ、クラウドに詳しくない方でも、github アカウントさえあれば使えるようにしてます。

過去記事調査

Qiitaではarxivタグがついた記事は37記事ありました。

通知機能を実装している記事や、Twitterの反応でフィルタしているbotなど、参考になる記事が多数ありました。

前提として、私の場合は、時系列分析系の専門なので、Time Seriesというワードを追いかけています。
なので、画像のように毎日数十件オーダーで新着がある訳ではないので、高度なTwitterの反応フィルタなどは必要ないと判断しました。

(もし、画像系などでTwitterの反応でフィルタされた結果が欲しい方は上の記事がおすすめです.)

過去記事では、Github Actionを利用してbot化する記事が見当たらなかったので投稿させていただきました.

Github Actionを使ってみて良いなと思ったこと

  • 設定変更が楽すぎる
    • 検索したいワードの変更を、github上のエディタで変更するだけでOK
    • (さらに、検索ワードを環境変数で管理する仕組みにしておけばさらによかった..orz )
  • リポジトリと定期実行を同時に管理できるので楽でした.

何をしているのか?

  1. arxivの検索ページで、引数していしたワードを検索
  2. 引数指定したトップN件を取得
  3. BeautifulSoup4でパース
  4. API経由でDeeplにて日本語に翻訳
  5. 整形してSlackに通知

この一連の動作をPythonで書いて、
あとは、Github Actionで定期的に実行してます。


検索結果上位のポストが翻訳と一緒に呟かれているのがわかります。

必要なもの

  • Github アカウント
  • SlackのIncoming WebHookのキー
  • DeeplのAPIキー

DeepLとSlackの各API取得方法などは他の記事にお任せしますmm

DeepL API を使ってみる - Qiita
https://www.deepl.com/pro-account.html

使い方

1. リポジトリをフォークする

以下のURL先のリポジトリをフォークしてください。
https://github.com/peace098beat/arxivot

2. 「Settings」>「Secrets」にて環境変数をセットします

変数名はDEEPL_TOKEN, SLACK_HOOK_URLとしてください.

DeepLとSlackの各API取得方法などは他の記事にお任せしますmm

3.「Actions」からActionを新規作成

4. 左サイドバーからActionを実行

Actionが実行されます。

発展

github actionに呼び出される設定ファイルを変更することで、動作を変更できます.

設定ファイルは.github/workflows/python-app-2.ymlです.

検索ワード変更

  • 引数 --search_wordを変更ください.
# 単語
PYTHON_PATH=src python src/main.py --top=10 --search_word='"recommendation"'    
# 複数単語
PYTHON_PATH=src python src/main.py --top=10 --search_word='"anomaly+detection"' 

CRONの設定変更

デフォルトでは、毎朝6:00に実行されます.

on:
  workflow_dispatch:
  schedule:
    - cron:  '0 21 * * *'

設定ファイルでは +9時間 なので注意!

GitHub Actionsのワークフロー構文 - GitHub Docs

投稿する論文数の変更

  • 引数の--top=を変更してください
# トップ10件の場合
PYTHON_PATH=src python src/main.py --top=10 --search_word='"time+series"'

# トップ30件の場合
PYTHON_PATH=src python src/main.py --top=30 --search_word='"time+series"'

(件数が多くなるとその分DeepLの課金が増えるので注意!)

DeepLの費用感

毎日10件ほど呟いた結果です。
(たまに大きな文字数になっているのは、テストで呟く頻度や量を増やしたためです。)

毎月の費用は1500円くらいです.

最後に

先ほど別のアカウントで動作検証したところ問題なく動きました。
ご興味ある方は、DeeplとSlack HookのAPIキーを取得したあと、
Githubリポジトリをフォークしていただき、環境変数にAPIキーを登録するだけで動くつもりです。

ABEJAでは

ABEJAでは一緒に仕事をする仲間を募集しています!!
興味がある方がいましたら、カジュアル面談からでも、気軽にご連絡ください!!