Kaggle APIとLINE APIを用いたKernelの新規投稿を通知する仕組みの構築
はじめに
Kaggle*1において、上位の成績を収めるためには日々投稿されるDiscussionやKernel、変化するLeaderboardの動向を注視することが大切です。
現状、Discussionについては公式で新しい投稿をメール通知する仕組みがあります*2が、KernelやLeaderboardについては存在していません。8月上旬には、日本人のKaggle参加者が集まるコミュニティ「kaggler-ja」*3での会話を発端として、Leaderboardの通知に関する要望も提案されています*4。
もちろん公式で実装されるのが一番良いですが、今回は暫定的な対応としてKaggle公式が提供する「Kaggle API」*5を利用して、Kernelの新規投稿をLINE通知する仕組みを構築しました。
同様の枠組みを用いることで、Leaderboardの情報などKaggle APIで扱える範囲の通知機能を実装することが可能です。私自身が一番欲しかったのがKernelの通知機能だったので、優先的に実装しました。実装はGitHubで公開しています。
システムの概要
構築したシステムの概要を下図に示します。
大まかな処理の流れは以下の通りです。
以下では、個々の処理について説明していきます。
launchdによる定期実行
launchdを用いることで、Mac OS Xでスクリプトを定期実行する仕組みを実現できます。詳細は、私が実装時に参考にした記事*7をご参照ください。
端的に説明すると ~/Library/LaunchAgents/ に以下のようなファイルを配置して、定期実行の条件を設定できるようになっています。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>kernel-notify</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/zsh</string> <string>/Users/{user_name}/{project_name}/kernel-notify.sh</string> </array> <key>StartInterval</key> <integer>30</integer> <key>RunAtLoad</key> <true/> <key>StandardOutPath</key> <string>/Users/{user_name}/{project_name}</string> <key>StandardErrorPath</key> <string>/Users/{user_name}/{project_name}</string> </dict> </plist>
Kaggle APIの実行
Kaggle API自体の導入については、GitHubのREADMEや下記の記事などをご確認ください。
今回はKernelの情報を取得したかったので、以下のコマンドを実行しました。ここでオプションとしてコンペティションの指定をしています。
kaggle kernels list --competition home-credit-default-risk --sort-by 'dateCreated'
前回実行時からKernelの情報に差分があるか確認
この処理以降、Pythonに委託することにしました。単純に情報を前回実行時と比較し、変更があるか否かを確認しました。
LINE APIでの通知
LINE APIの導入については、下記を参考にしました。
以下の関数を用いて、LINEに通知を送ることができます。文言も自由に編集できるので、今回は新規投稿されたKernelのURLを通知することにしました。
def line(Me): line_notify_token = 'YOUR TOKEN' line_notify_api = 'https://notify-api.line.me/api/notify' message = '\n' + Me payload = {'message': message} headers = {'Authorization': 'Bearer ' + line_notify_token} line_notify = requests.post(line_notify_api, data=payload, headers=headers)
おわりに
今回はKaggle APIとLINE APIを用いて、Kernelの新規投稿を通知する仕組みを構築しました。この仕組みを応用することで、Kaggle APIで扱える範囲のさまざまな条件下の通知機能を実装できます。
こういった仕組みも活用して、より一層Kaggleを楽しんでいきたいと思います。