Google Scholar Alert
Google Scholarには新しい論文が発表されたときに,メールでお知らせしてくれる機能があります.
- 研究者に関するアラート
- 新しい論文
- その著者の論文を引用した新しい論文
- 関連した研究

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

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

Scholar Alert Digest
Google Scholarのアラートは,アラートの設定条件ごとにメールが送られてくるため,同じ論文に関するメールがたくさん届いたりします.例えば,論文P が フォローしてる著者A~Eの各論文を引用すると、同じ論文P のアラートが5回来る,という仕様になっており鬱陶しいのです.
そこで,重複したお知らせを1件にまとめ,重複数(≒自分にとっての重要さ)を数えてソートしてSlackに投稿するbotを作りました.
リポジトリ
- 重複するお知らせをまとめてくれるプログラム bzz/scholar-alert-digest
- このプログラムは日本語に対応していない.日本語対応のプルリクを送っているけどまだマージされてない
- 矢作が修正した日本語対応版 FlechaMaker/scholar-alert-digest
- 書式を整えてSlackに投稿するbot FlechaMaker/scholar-alert-digest-to-slack
使い方・セットアップ (所要時間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 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) を環境変数に設定してください.

環境変数の設定は,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"