よくわからないエンジニア

よく分からないエンジニアの日々の記録

よくわからないエンジニア

バファローズポンタのつぶやき(画像)を取得しグループLINEに送る

球春到来!
今年もプロ野球が開幕し、連日熱い試合が各地で繰り広げられています。贔屓チームの調子は如何でしょうか。自分は長年のスワローズファンですが、最近は贔屓の試合結果以外にも気になることがあります。
そう、それはバファローズポンタです。

目次

バファローズポンタとは

皆さんご存知、ポイントがポンポン貯まるでおなじみ、狸のキャラクター“ポンタ”
彼がオリックス・バファローズとスポンサー契約をした事により誕生したマスコットがバファローズ・ポンタです。詳しい説明は以下を参照下さい。

Ponta - Wikipedia

これだけ聞くと「何がおもろいねん?」と思うかもしれませんね。わかります。
バファローズ・ポンタにはTwitterの公式アカウントがあり、

①試合前の応援ツイートと画像
②試合後の結果ツイートと画像

基本的に上記①,②をプロ野球シーズンのオリックス・バファローズの試合の日に呟いてくれます。
このツイートに添付される画像が中々にキュートかつ秀逸なものが多く存在します。(特に負けた時の画像)
ネット上で話題になったりするので、一度は目にした事があるかもしれません。まだ見たことがない人は是非とも、Twitterアカウントをチェック!

twitter.com

友人とのLINEのやり取り

私もこのバファローズ・ポンタは相当気に入っていますが、私のとある友人もすっかりファンになってしまい、バファローズ・ポンタのツイートが更新されると以下のようにお知らせしてくれます。
f:id:unknownengineer:20170411115625j:plain

まじでしょうもないやりとりですね。
しかし、手動で追いかけるのには限界があり、シーズンを通すと見逃してしまう事も多々あります。
なによりこんなことに人生のリソースを割くのは心底虚しいです。

ブログのネタついでに、これらを自動化しようと目論みました。
尚、通知サービスなんて死ぬほどあるとは思いますが、暇つぶしにCentOS7で一連の作業を自動化しようと思います。

ポンタのつぶやきを追跡する

まずはポンタのつぶやきを監視し、画像が投稿されたら画像を取得するようにします。
今回は「berryjack」というTwitter画像、一括ダウンロードシェルスクリプトを使います。

Twitterの画像を一括ダウンロードするシェルスクリプト「berryjack」を書いた。 – dyama's page

まずはCentOS7にこちらを用意します。nkfはberryjackを使う前にインストールしておきます。

# cd /usr/local/src
#  yum localinstall -y http://mirror.centos.org/centos/6/os/x86_64/Packages/nkf-2.0.8b-6.2.el6.x86_64.rpm
# git clone https://github.com/dyama/berryjack.git
# cd berryjack/
# mkdir -p ponta

早速berryjackを使ってみます。berryjackディレクトリ内に作ったpontaディレクトリをダウンロード場所に指定し、ポンタのTwitterID「bs_ponta」を引数で渡してあげると…

# ./berryjack -d /usr/local/berryjack/ponta/ bs_ponta
# ls ./ponta/ |wc -l
315

ポンタの過去数年間のつぶやき画像が取得されます。次回実行時からは、つぶやきが更新された場合のみ新規画像をダウンロードするようになります。

LINEへの通知

これも今回調べてみて初めて知ったのですが、LINEをコマンドラインから使用出来る「LINE Notify」なるものがありました。

engineering.linecorp.com

まずはLine NotifyにLINEのIDでログインします。

notify-bot.line.me

ログインしたら、画面下部にある、「アクセストークンの発行」を選択します。
f:id:unknownengineer:20170411120406j:plain

続いてLINE Notifyで通知するグループを選択します。
f:id:unknownengineer:20170411120420j:plain

アクセストークンが発行されます。表示されたアクセストークンは、コマンドラインからLINEに投稿する際に使うのでコピーしておいて下さい。
f:id:unknownengineer:20170411120428j:plain
試しにコマンドラインからなんか投稿してみます。

# curl -X POST https://notify-api.line.me/api/notify -H 'Authorization: Bearer <取得したLINE Token>'  -F 'message=test' -F "imageFile=@/usr/local/berryjack/ponta/ChL1uQvUkAA-v9d.jpg"

LINEの画面を見てみると…
f:id:unknownengineer:20170411135838j:plain
ちゃんとポンタの画像がLINE Notifyから投稿されています。

ディレクトリの監視

berryjackは新規の画像が投稿されない限り、画像のダウンロードは実施されないので、とりあえず画像がダウンロードされるディレクトリ(/usr/local/berryjack/ponta)が更新されたタイミングでPOSTするようなシェルスクリプトを容易しておきます。
以下サイトを参考に作成してみました。

mizti.hatenablog.com

参考サイトはファイルですが、lsのオプションに-dでディレクトリの時間を取得出来ます。そんで60秒間隔でディレクトリの更新時間を確認し、更新されていれば、curlするという形に変更しました。

# vim ponta.sh
#!/bin/sh
mon=/usr/local/berryjack/ponta
api='https://notify-api.line.me/api/notify'
token='<取得したトークン>'
INTERVAL=60
last=`ls -d --full-time "$mon" | awk '{print $6"-"$7}'`
while true; do
        sleep $INTERVAL
        current=`ls -d --full-time "$mon" | awk '{print $6"-"$7}'`
        if [ $last != $current ] ; then
                echo "updated: $current"
                last=$current
                newponta=`ls -1t "$mon" | head -1`
                curl -X POST "$api" -H "Authorization: Bearer $token"  -F "message=$current" -F "imageFile=@$mon/$newponta"
        fi
done

後はシェルスクリプトに権限を付与し、バックグラウンドで実行させておきます。

#chmod 755 ponta.sh
#nohup ./ponta.sh &

後はcronでberryjackを5~10分感覚くらいでcron実行しておきます。

# crontab -l
*/5 * * * * /usr/local/berryjack/berryjack -d /usr/local/berryjack/ponta/ bs_ponta

これで本日の試合開始&終了時にLINEに投稿されれば成功ですが、結果は…

f:id:unknownengineer:20170412171103j:plain
無事、試合開始前と後に画像が投稿されていました。バッチリ!