【スタダ】ポケモンGOがリリースされたら電話掛かってくるスクリプト

  • 58
    Like
  • 1
    Comment
More than 1 year has passed since last update.

世界中でポケモンGO旋風が起こっています。
日本版のポケモンGOがリリースされたら即電話が掛かってくるスクリプトをお昼休みに書いてみました。
これで最速ポケモンゲットだぜ( ・ㅂ・)و

スクリーンショット 2016-07-15 15.08.00.png

アーキテクチャ

HTTP通信でitunesのページをポーリングしてステータス取得
+
Twilio で電話

PokémonGO の現状調査

Nianticのポケモン公式HPを7月15日確認したところ、iOS版は未公開、Android版は既に公開されています。Android版はソフトウェア側でフィルタされており日本ユーザはプレイ出来ないみたいです。

itunesのページがオープンしたら検知

appstore.py
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import requests


def app_store_is_open(_id):
    """
    日本のAppストアがオープンしていればTrue
    :param _id: str
    :rtype: bool
    """
    headers = {'Content-type': 'application/json; charset=utf-8'}
    url_base = "https://itunes.apple.com/jp/app/apple-store/{}?ct=official&mt=8"
    url = url_base.format(_id)
    response = requests.get(url, headers=headers)
    assert response.status_code == 200  # HTTP Statusが200であること
    return "カスタマーレビュ" in response.text  # オープンしているアプリはカスターマーレビュー項目が存在

ids = {
    "POKEMON GO": "id1094591345",
    "白猫": "id895687962",
    "パズドラ": "id493470467",
    "グラブル": "id852882903",
}

for k, v in ids.items():
    print("{}: {}".format(k, app_store_is_open(v)))
実行結果
$ python appstore.py
グラブル: True
POKEMON GO: False
パズドラ: True
白猫: True

Twilioで電話掛ける

日本ではAUと手を組んで展開している電話関連ベンチャーのTwilioAPIを利用して電話を発信します。

tel.py
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from twilio.rest import TwilioRestClient

ACCOUNT_SID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
AUTH_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"

FROM_CALL_NUMBER = "819012341234"
TO_CALL_NUMBER = "819012341234"

client = TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN)
call = client.calls.create(to=TO_CALL_NUMBER, from_=FROM_CALL_NUMBER,
                           url="http://foo.com/call.xml")
print call.sid

実行結果
$ python tel.py
CA8b5ea1f08503ee8efc6aXXXXXXXX

電話掛かってきました。30秒くらい電話が振動し続けます。
upload_thumb.png

完成品

2つのスクリプトを合体させて、ポケモンGOのAppStore版がリリースされたら電話が掛かってくるスクリプトを完成させます。

poke_check.py
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import requests
from twilio.rest import TwilioRestClient


def app_store_is_open(_id):
    """
    日本のAppストアがオープンしていればTrue
    :param _id: str
    :rtype: bool
    """
    headers = {'Content-type': 'application/json; charset=utf-8'}
    url_base = "https://itunes.apple.com/jp/app/apple-store/{}?ct=official&mt=8"
    url = url_base.format(_id)
    response = requests.get(url, headers=headers)
    assert response.status_code == 200  # HTTP Statusが200であること
    return "カスタマーレビュ" in response.text


def tel():
    ACCOUNT_SID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    AUTH_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"

    FROM_CALL_NUMBER = "819012341234"
    TO_CALL_NUMBER = "819012341234"

    client = TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN)
    call = client.calls.create(to=TO_CALL_NUMBER, from_=FROM_CALL_NUMBER,
                               url="http://foo.com/call.xml")


def start():
    print("start")
    pokemon_go = "id1094591345"
    if app_store_is_open(pokemon_go):
        print("OPEN")
        tel()
    else:
        print("NOT OPEN")


if __name__ == '__main__':
    start()

実行結果
$ python poke_check.py 
start
NOT OPEN

早くオープンするといいですねー

追記

まさか同じことしてる人がいるとは...
http://qiita.com/touyoubuntu/items/af5d8e9e69e099945da1