読者です 読者をやめる 読者になる 読者になる

いけむランド

はてダからやってきました

PokemonGo-Map をインストールしてみた

【追記】
「ポケモンGO」の生みの親、解析ツールPokeVisionを規約違反と明言 - iPhone Mania とのことなので、使用する場合は規約違反となる可能性があることを認識しておいてください。
使用によって生じた損害について、投稿者は一切責任を負いません。

【追記2】
Niantic Breaks Pokemon Go API, All Bots and Trackers Stopped Working とのことなので、
このツールを使用しても、情報を取得することはできません。
Pokémon GOの運用についてのアップデート とのことなので、
このツールの利用は推奨されるものでもありません。

興味本位でインストールしてみました。

github.com


基本的には PoGoMap Wiki Project に従って進めます。

今回は Ubuntu 環境にインストールしてみます。

ダウンロード

git clone します。

$ git clone https://github.com/AHAAAAAAA/PokemonGo-Map.git

インストール

aptitude

$ sudo apt-get install python python-pip nodejs npm python-dev


あとに pip でインストールする python パッケージにコンパイルが必要なものもあるため、python-dev も入れておきます。

pip

次に必要な python パッケージをインストールします。

$ cd PokemonGo-Map
$ sudo pip -r requirements.txt


手元の環境では six というパッケージの Version Conflict が発生しました。

pkg_resources.VersionConflict: (six 1.5.2 (/usr/lib/python2.7/dist-packages), Requirement.parse('six>=1.9'))


そのため、今回は手動でそれを upgrade しました。

$ sudo pip install six --upgrade

node

続いて node パッケージをインストールします。

$ npm install


手元の環境では node がないというエラーが発生しました。

sh: 1: node: not found
npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read
/usr/share/doc/nodejs/README.Debian


README を見たところ、どうやら Ubuntu では実行バイナリが node ではなく nodejs という名前になっていることが原因のようで、これは nodejs-legacy というパッケージで解決できるようです。

$ sudo apt-get install nodejs-legacy

起動

いよいよサーバの起動です。

$ python runserver.py -u ${PTC_USERNAME} -p ${PTC_PASSWORD} -st 10 -k ${GOOGLE_MAPS_API_KEY} -l "${LATITUDE} ${LONGITUDE}"

オプションについては以下のとおりです。

  • -u PTC_USERNAME / -p PTC_PASSWORD はそれぞれ ポケモントレーナークラブ | Pokemon.com で作成、登録したものになります。(-a google を追加すると google のアカウントを使えるようです。)
  • -st は探索ステップ数を指定するものです。これが大きいほど、より遠くまで探索します。
  • -k GOOGLE_MAPS_API_KEY も Google Maps APIs for Web  |  Google Developers から取得します。
  • -l は地図の中心座標を指定するものです。Google Map で適当な場所をクリックするとポップアップするラベルに書いてあります。


起動に成功すると、以下のようなメッセージが流れます。

2016-07-31 15:23:41,852 [     runserver] [   INFO] Parsed location is: XX.XXXX/XX.XXXX/XX.XXXX (lat/lng/alt)
2016-07-31 15:23:41,853 [        search] [   INFO] Search loop 0 starting
2016-07-31 15:23:41,854 [        search] [   INFO] Attempting login to Pokemon Go.
2016-07-31 15:23:41,855 [      auth_ptc] [   INFO] PTC login for: XXXXXXXXXXXXXXXX
2016-07-31 15:23:43,628 [      auth_ptc] [   INFO] PTC Login successful
2016-07-31 15:23:44,139 [        search] [   INFO] Login to Pokemon Go successful.
2016-07-31 15:23:44,555 [        models] [   INFO] Upserted 0 pokemon, 0 pokestops, and 0 gyms


一番下の Upserted... が定期的にデータを取得する時のログです。(デフォルトは 5sec 間隔のようです。)

この状態で http://localhost:5000/ にアクセスすると、以下のような画面になります。


f:id:fd0:20160731171722p:plain


ちなみに高負荷でレスポンスが取得できない場合は以下のようなログが出ます。

2016-07-31 15:46:44,029 [        search] [  ERROR] Search thread failed. Response dictionary key error
2016-07-31 15:46:44,029 [        search] [  ERROR] Niantic servers under heavy load. Waiting before trying again


また、ログインサーバで失敗する場合は以下のようなログが出ます。

2016-07-31 15:57:52,975 [        pgoapi] [  ERROR] Login failed - unexpected server response!
2016-07-31 15:57:52,975 [        search] [   INFO] Failed to login to Pokemon Go. Trying again in 5 seconds.

日本語化

これでも十分に便利なのですが、ポケモンの名前が英語なので、これを日本語にします。

言語リソースは /static/locales にあります。

ここに日本語リソースを置きます。

日本語リソースは別の方が作られているのを拝借します。

github.com

違うリポジトリですが、フォーマットは同じなので使えます。

$ cd static/locales
$ wget https://raw.githubusercontent.com/ttymsd/PokemonGo-SlackBot/738bc3a98c1c140e22e4c55b2393297538868b84/locales/pokemon.ja.json


置いたら再起動します。するとポケモンの名前が日本語表記になります。


f:id:fd0:20160731172419p:plain

おわりに

ちなみに自分はこういうのを使うとゲームが作業になってしまうため、使わないようにしてます。