メインコンテンツまでスキップ

Google Scholar Alert

Google Scholarには新しい論文が発表されたときに,メールでお知らせしてくれる機能があります.

  • 研究者に関するアラート
    • 新しい論文
    • その著者の論文を引用した新しい論文
    • 関連した研究

研究者に関するアラート

  • 特定の論文に関するアラート
    • その論文を引用した新しい論文

特定の論文に関するアラート

  • 検索結果に関するアラート
    • 検索結果にヒットする新しい論文
    • Google Scholarプロフィールを作っていない研究者の新しい論文のアラートを受け取りたいときにも役立つ

検索結果のアラート

Scholar Alert Digest

Google Scholarのアラートは,アラートの設定条件ごとにメールが送られてくるため,同じ論文に関するメールがたくさん届いたりします.例えば,論文P が フォローしてる著者A~Eの各論文を引用すると、同じ論文P のアラートが5回来る,という仕様になっており鬱陶しいのです.

そこで,重複したお知らせを1件にまとめ,重複数(≒自分にとっての重要さ)を数えてソートしてSlackに投稿するbotを作りました.

リポジトリ

使い方・セットアップ (所要時間20分)

  • Macでの使い方を書きます.Linuxなら,同じように動くと思います.Windowsはよくわかりません.

環境構築

プログラムを走らせるためにGoとNodeJSが必要です.NodeJSのパッケージを入れるために,yarnも入れておきましょう. NodeJSのバージョン管理にnvmを使いたいとか,自分なりのやり方があれば,それでやってください.

brew install go node
npm install --global yarn

scholar-alert-digestのインストール

scholar-alert-digestをインストールとして,コマンドとしてscholar-alert-digest-to-slackが呼び出せるようにします. 下記の手順は,scholar-alert-digestのREADMEと大体同じです.

まず,scholar-alert-digestのソースコードをダウンロード・ビルド・インストールします.

git clone github.com/bzz/scholar-alert-digest
cd scholar-alert-digest
go install

scholar-alert-digestコマンドは $GOPATH/bin ($GOPATHは変数) にインストールされるので,パスに追加します.例えば,bashなら.bash_profileなどに次のコマンドを追記します.

export PATH=$PATH:$GOPATH/bin

次のコマンドを実行して,以下に示す出力が出ればインストールは完了です.

scholar-alert-digest -help
usage: go run [-labels | -subj] [-html | -json] [-compact] [-mark] [-read] [-authors] [-refs] [-l <your-gmail-label>] [-n]

Polls Gmail API for unread Google Scholar alert messaged under a given label,
aggregates by paper title and prints a list of paper URLs in Markdown format.

The -l flag sets the Gmail label to look for (overriden by 'SAD_LABEL' env variable).
The -n flag sets the number of concurent requests to Gmail API.
The -labels flag will only print all available labels for the current account.
The -subj flag will only include email subjects in the report. Usefull for " | uniq -c | sort -dr".
The -html flag will produce ouput report in HTML format.
The -json flag will produce output in JSONL format, one paper object per line.
The -compact flag will produce ouput report in compact format, usefull >100 papers.
The -mark flag will mark all the aggregated emails as read in Gmail.
The -read flag will include a new section in the report, aggregating all read emails.
The -authors flag will include paper authors in the report.
The -refs flag will add links to all email messages that mention each paper.
The -upd-test flag will write emails to ./fixtures/emails.json and quit.

Slack botのダウンロードと環境構築

GitHubからクローンします.

git clone https://github.com/FlechaMaker/scholar-alert-digest-to-slack.git

yarnで必要なパッケージをインストールします.

yarn install

Gmailの準備

メールがGmailアカウントに届くようにGoogle Scholarを設定してください.Google WorkspaceのGmail(nae-lab.orgやg.ecc.u-tokyo.ac.jpなど)でも大丈夫です. scholar-alert-digestはGmailからアラートのメールを取得します.

Gmailの中では,Google Scholarのアラートメールだけが入っているラベルを作成して,メールがそこに振り分けられるようにしてください.例えば,"google-scholar"というラベルを作成して,フィルタによりメールがそこに振り分けられるようにします.

Gmailの設定 Gmailの設定

続いて,Gmail APIの設定をここのインストラクションの通りに進めます.「ダウンロードした JSON ファイルを credentials.json として保存し、ファイルを作業ディレクトリに移動します。」という手順まで行えば大丈夫です.

credentials.jsonは先ほどクローンしてきた scholar-alert-digest -to-slack (scholar-alert-digestではない!)のディレクトリの中におきます. ダウンロードすると client_secret_367588948402-tn2r1ijdg1p3coq0khvk1k3i5sgfpa36.apps.googleusercontent.com.json などの名前になってますが,名前を変更して credentials.jsonにしてください.

次に,一度scholar-alert-digestコマンドを実行して,Google Accountへのログインを行います.次のコマンドを実行し,ブラウザが開くのでGoogleアカウントにログインします.ログインすると「このサイトにアクセスできません localhost で接続が拒否されました。」のようなエラーが出ますが,正しい動作です.

次のコマンドは,scholar-alert-digest-to-slackディレクトリまで移動してから実行してください.

scholar-alert-digest -l "google-scholar" -json -authors -refs -mark

ブラウザはページを読み込めませんが,アドレスバーの中身は変化しています.URLの中に下記のようなコードが現れるので, = よりも後ろの部分から, &scope& よりも前までの部分のコードをコピーします.コピーしたら,ターミナルに貼り付けてenterを押します.token_rw.json というファイルが出来上がっていれば成功です.

&code=4/0AWtgzh78xyaMnEMdDBL5P-tX66J3Fsb_93XvRCJzmLXDplnByMZmaXZcFjde3hJIt3D1pA

Slack botの設定

Slackの認証情報と投稿先のチャンネルを設定します.下記の2つの項目について,環境変数として設定します.

  • SAD_SLACK_TOKEN : Slack APIのトークンです.使う時は矢作にDMしていただければ送ります.
  • SAD_SLACK_CONVERSATION_ID : 投稿先のチャンネルのIDです.PCのSlackアプリでチャンネル名の上で右クリックして,「コピー > リンクをコピー」を選択してください. https://ut-naelab.slack.com/archives/C050GT371NH のようなリンクが得られるので,末尾のCから始まるID (C050GT371NH) を環境変数に設定してください.

conversationid

環境変数の設定は,bashなら例えば次のようになります..bash_profileなどの中に下記のコマンドを書き加えてください.

export SAD_SLACK_TOKEN=xoxb-0000000000-0000000000000-000000000000000000000000
export SAD_SLACK_CONVERSATION_ID=C0000000000

Slack botを投稿するチャンネルに招待する

/invite とSlackのメッセージ欄に書いて,「このチャンネルにアプリを追加する」からGoogle Scholar Alertを選択してください.

Slack botの実行テスト(手動実行)

準備ができたので,Slack botを手動で実行してみましょう.botは未読のGoogle Scholar Alertだけ読み込むので,準備として何件かのメールを未読にしておいてください.

node main.js

Slackに論文情報が投稿されたらセットアップ完了です.

Cronで自動実行する

毎日定時に自動で実行されるようにします.好きな時間に実行されるように設定してください

crontab -e

により設定ファイルを開いて,次のように設定します.次の例は,毎日12時28分に実行する例です.

28 12 * * * fish -c "cd /Users/yuchi/workspace/nae-lab/misc/scholar-alert-digest-to-slack && node main.js"