ポケモンGOで自分の近くにポケモンが出現したらSlackに通知する

pasted_image_at_2016_07_22_05_24_pm-1469201215067

シンジです。会社や自宅で「歩かずに」ポケモンGOをやってるときって、起動させっぱなし画面付けっぱなしでヤリスギ感が半端ないので、近くにポケモンが出現したらSlackに通知させてお手軽にゲットしちゃおうという話です。

とりあえずソースはこちら

Send Slack notifications whenever a Pokémon spawns nearby using a Pokémon GO SlackBot
https://www.themarketingtechnologist.co/pokemon-go-slack-notifications/

Slack連携できるとこんな感じ

とりあえずSlackに通知が来ます。ポケモンの名前が英語表記になってますが、これは後ほど説明します。

pokemongo-slack-01

ほっほーと思いながらおもむろにリンクをクリックするとPOKEVISONの地図が出ます。

pokemongo-slack-02

そして突如訪れる世界平和。

セットアップ方法

AWSでEC2立てて下さい。Amazon Linux使いましょう。もろもろ初期設定すませたらセットアップ開始です。

git使うので入れます

sudo yum install git

gcc使うので入れます

sudo yum install gcc

プログラム本体をゲットだぜ

git clone https://github.com/rubenmak/PokemonGo-SlackBot.git

チェンジディレクトリだぜ

cd PokemonGo-SlackBot/

必要なあれこれをインストールする

sudo pip install -r requirements.txt

Slack連携プログラムのセットアップは以上で完了。

ポケモンGOのアカウントを用意する

ポケモントレーナークラブで新規アカウントを作った方が良いです。Googleアカウント連携版でもプログラムは動作しますが、引数指定が面倒なので普通にアカウント作って下さい。

SlackのIncoming Webhookを用意する

URL発行したらどっかにメモっておいて下さい。

ポケモンを探す中心となる拠点の経度と緯度を調査する

Google Mapを使ってみます。とりあえず住所などで拠点を表示しましょう。今回は虎ノ門ヒルズにしてみました。

pokemongo-slack-03

赤いピンを右クリックすると「この場所について」と出るので、それをクリックします。そうすると、

pokemongo-slack-04

下のほうにこんな感じで詳細が出てきます。
使うのは、「35.667047 139.749596」です。カンマ要らないです。

準備完了!あとは起動するだけ

引数がいっぱいありますので解説します。

python pokeslack.py -u ポケモンGOのユーザー名 -p と、パスワード -l "35.667047 139.749596" -st 1 -r 探したい距離の数字入れます。50メートルなら50 -sw https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXXXX/xxxxxxxxxxxxxxxxxxxxxx

-u の後ろには、ポケモントレーナークラブのユーザー名を入れます。

-p の後ろには、ポケモントレーナークラブのパスワードを入れます。

-l の後ろには、経度と緯度を入れます。

-r の後ろには、ポケモンを探したい距離をメートルで数字を入れます。100mで探したいなら100って入れます。

-sw の後ろには、SlackのIncoming WebhookのURLをそのまま書いてあげます。

python pokeslack.py -u username -p password -l "35.667047 139.749596" -st 1 -r 1000 -sw https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXXXX/xxxxxxxxxxxxxxxxxxxxxx

こんなかんじ。

フォアグラウンドで起動してくるので、何度かテストして問題無さそうなら、バックグラウンドにするのがオススメ。

ポケモンの名前を日本語にしたいよね?

できるんですが、面倒なので誰かやってもらえませんかwww

追記・対応しました!jaがあるはずです

cd locales/

すると、中には

pokemon.de.json  pokemon.ja.json  pokemon.en.json  pokemon.fr.json  pokemon.zh_cn.json

5つのファイルが確認出来ます。
プログラム本体の利用言語を変更するためには2通りあって、簡単なのは引数指定。本体プログラムpokeslack.py起動時に

-L ja

を追加すれば良いです。もしくは、

pokeslack.py

の、581行目

default="en"

のenを、jaにすればOKってわけです。そうするとこんなかんじで。

pokemongo-slack-05

追記・ポケモンのアイコンに対応させる方法

pokemongo-slack-06

名前だけだと味気ないので、アイコンをポケモンにしてしまおうという試みです。これ、日本語だとおかしな事になるうえに準備がちょっと面倒ですし、Slackがシングルサインオンの場合は対応出来ません。

環境を整えます

sudo yum install gcc-c++ make
sudo yum install openssl-devel
git clone --depth=1 -b v0.12.7 git://github.com/nodejs/node.git
cd node
./configure
make
sudo make install
sudo su -
visudo

で、以下の通りに変更

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

続き。

cd ../
git clone --depth=1 -b v2.11.3 https://github.com/npm/npm.git
cd npm
sudo make install
sudo npm update -g npm
cd ../

ポケモン絵文字セットをインストール

sudo npm install -g emojipacks
sudo vi /usr/local/bin/emojipacks

で、以下の通りに変更

#!/usr/local/bin/node --harmony

よし起動

emojipacks

いろいろ聞かれますので回答していきます。

  • Slack Subdomain
    アイコンを登録したいSlackのチームドメイン

  • Email address login
    Slackのユーザーのメールアドレス

  • Password
    上のSlackのユーザーのパスワード

  • Path or URL of Emoji yaml file
    https://raw.githubusercontent.com/templarian/slack-emoji-pokemon/master/pokemon-prefix.yaml
    これコピペしてください。

あとは引数指定して起動です

長ったらしい起動コマンドの末尾に、

-pi ':pokemon-'

これ入れて起動することで絵文字が出ます。

というわけで鳥ポケモンばかりゲットしているシンジは

焼き鳥屋でも始めようかと思います。

7 件のコメント

  • 昨日あたりから出現数がかなり減ってるような気がしますが、皆様いかがでしょうか?
    対策されたのかな。。。

  • ファイル頭で
    from datetime import timedelta
    でtimedeltaをインポート

    830行目付近
    disappear_time = disappear_datetime.strftime("%H:%M:%S")
    の下に
    disappear_datetime_ja = disappear_datetime + timedelta(hours=9)
    disappear_time_ja = disappear_datetime_ja.strftime("%H:%M:%S")
    を追加
    その下の方にある
    alert_text = 内のdisappear_timeをdisappear_time_jaに変更

    することによって,いなくなる時間を日本時間に変更できました.

    ついでに
    alert_text = 'I\'m just <https://pokevision.com/#/@'

    alert_text = pokename.lower() + '<https://pokevision.com/#/@'
    にすることによってポケモンの名前を表示してくれるので,通知としては便利
    引数 -L ja にすることによって,とりあえず日本語環境では使えるものになると思うのですが,フィルターがかけられないのがネック

    MYさんのがよくわからない...

  • 日本語が使いたい場合は「unicode(' が出現しました。場所は ', 'utf-8')」としてやるといいです。
    名前は、
    pokename = pokemonsJSON[pokeid]
    の下に
    pokename_en = pokemonsJSON_en[pokeid]
    として
    下のほうで使用しているところをこうしました。
    if pokemon_icons_prefix != ':pokeball:':
    user_icon = pokemon_icons_prefix + pokename_en.lower() + ':'
    else:
    user_icon = ':pokeball:'

    また、PythonがWebサーバを立ち上げてGoogleMapで表示してくれる機能もあるので非常に便利ですね

    ちなみにGoogleAccountでログインする場合は引数に「 -a google」を追加するだけです、たしか

  • コメントを残す

    メールアドレスが公開されることはありません。

    日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)