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

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

![スクリーンショット 2016-07-15 15.08.00.png](https://qiita-image-store.s3.amazonaws.com/0/65312/5474439b-7e18-d7f6-dd6e-0ed1d5aa04da.png)


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

# PokémonGO の現状調査
[Nianticのポケモン公式HP](http://pokemongo.nianticlabs.com/ja/)を7月15日確認したところ、iOS版は未公開、Android版は既に公開されています。Android版はソフトウェア側でフィルタされており日本ユーザはプレイ出来ないみたいです。

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

```python: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)))
```

```shell-session:実行結果
$ python appstore.py
グラブル: True
POKEMON GO: False
パズドラ: True
白猫: True
```

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

```py: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

```

```shell-session:実行結果
$ python tel.py
CA8b5ea1f08503ee8efc6aXXXXXXXX
```

電話掛かってきました。30秒くらい電話が振動し続けます。
![upload_thumb.png](https://qiita-image-store.s3.amazonaws.com/0/65312/a3797601-472e-eb66-07f7-0406bfbddd12.png)


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

```py: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()

```


```shell-session:実行結果
$ python poke_check.py 
start
NOT OPEN
```


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

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