PythonとAPIを使ってツイートしたらライトをつける

#1. はじめに
今回はTwitterで「ライトつけて」とつぶやくだけで部屋のライトがつくプログラムを作ります。
ライトをつけるにはSwitch Bot hubが必要なので気を付けてください。

#2. Python開発環境を作る
##2.1 Pythonをダウンロードする
下記のURLへアクセスしてください。

https://www.python.org/downloads/windows/

![python.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966524/f4630b24-ff5c-5d88-ff6b-41c3befcb3cb.jpeg)
次に最新バージョンの Python をダウンロードします。
画面に表示されている「Latest Python 3 Release - Python 3.10.1」をクリックしてください。
![python2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966524/86b450ec-6975-150b-c5cd-baa2b6649d89.jpeg)
一番下までスクロールすると、ソースコードやOSごとに用意されたダウンロード用リンクの一覧が表示されます。
「Windows installer (64-bit)」と書かれたリンクをクリックしダウンロードしてください。

##2.2 Pythonをインストールする
続いてインストールを行います。
ダウンロードしたファイルをダブルクリックするとインストーラーが起動してインストールが開始されます。
![python3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966524/b82d4e6f-2bdb-571f-d068-cd904fb33426.jpeg)
Python をインストールしたあとに Path を自動で設定してもらえるように「Add Python 3.10 to PATH」にチェックをしましょう。
そしてインストール先を変更するなどカスタムする場合以外は「Install Now」をクリックしインストールしましょう。
![python4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966524/b82898a2-0b89-2637-645b-2cd921f3d5af.jpeg)
最後にこの画面が表示されたら「Close」をクリックしインストールは終わりです。

##2.3 試しに使ってみる
自分のPCでPythonが使えるようになっているかを確認してみましょう！
Pythonを実行するには「コマンドプロンプト」と言うツールを使います。

今回はPythonがインストールされているかどうかを確認します。
下記のコマンドを入力して、「Enter」キーを押してください。

```
python --version
```

下記のように、Python 3.6.5 と表示されれば、正常にPythonのインストールができています。

```
Python 3.10.1
```

#3. Switch Botのトークンを取得する
API認証用のトークンを取得します。
SwitchBotアプリの 設定 > アプリバージョンを10回ほどタップすると以下のように表示されます。
![switchbot.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966524/021347e3-d6be-1f91-671b-4b8081a04189.jpeg)
開発者向けオプションからトークンを確認できます。

#4. Switch BotのデバイスIDを調べる
##4.1はじめに
Pythonを書くにはVSCodeなどのエディターが必要です。
下記の記事を参考にしてインストールしてください。

https://qiita.com/psychoroid/items/7d85ae6bade4a67aedb1


##4.2 使うモジュールをインストールする
モジュールをインストールするにはpipコマンドを使います。
下記のコマンドを入力して、「Enter」キーを押してください。

```
pip install requests
```

下記のように、一番下に Successfully と表示されれば、モジュールのインストールができています。

```
Successfully installed requests-2.26.0
```

##4.3 実際にデバイスIDを調べる
まず、下記のプログラムを任意の場所に保存しましょう。

```python:SearchID.py
import requests
import json

token = "先ほど取得したトークン"

url = "https://api.switch-bot.com/v1.0/devices/"
h = {"Authorization": token, "Content-Type": "application/json; charset=utf8"}

reply = json.loads(requests.get(url, headers=h).text)
message = reply['message']

if message == 'success':
    list = reply['body']['infraredRemoteList']
    item = len(list)
    id = None

    name = input("デバイス名は？:")

    for i in range(1, item):
        if name == list[i-1]['deviceName']:
            id = list[i-1]['deviceId']
    
    if id:
        print(id)
    else:
        print('Error!')
else:
    print('Error:', message)

```

次に、「C:\Users\Username\Documents\Python\SearchID.py」のとろは先ほど保存したプログラムのパスに変更し、実行してください。

```
python C:\Users\Username\Documents\Python\SearchID.py
```

「デバイス名は？」と聞かれたらSwitch Botで設定しているライトの名前を入力し、「Enter」キーを押してください。
成功すると下記のように表示されます。
後で使うのでどこかにメモしておいてください。

もし、「Error: Unauthorized」が表示されたらトークンを間違えていないか確認してください。
もしくは、「error!」が表示されたらデバイス名を間違えていないか確認してください。

```
デバイス名は？:ライト
00-000000000000-00000000
```

#5. ツイートしたらライトをつける
##5.1 はじめに
Twtter APIを使うにはキーが必要になります。
下記のサイトを参考にして申請し、キーを取得してください。

https://norari-kurari-way.com/python_twitter_api_intro/

##5.2 使うモジュールをインストールする
下記のコマンドを入力して、「Enter」キーを押してください。

```
pip install tweepy
```

下記のように、一番下に Successfully と表示されれば、モジュールのインストールができています。

```
Successfully installed tweepy-4.4.0
```

##5.3 実際に動かしてみる
まず、下記のプログラムを任意の場所に保存しましょう。

```python:TurnOnLight.py
import tweepy
import re
import requests

#Twitter用定数
BT = "先ほど取得したBearer Token"
CK = "先ほど取得したConsumer Key"
CS = "先ほど取得したConsumer Secret"
AT = "先ほど取得したAccess Token"
ATS = "先ほど取得したAccess Token Secret"

#Switch Bot用定数
token = "前回取得したトークン"
url = "https://api.switch-bot.com/v1.0/devices/前回調べたデバイスID/commands"
h = {"Authorization": token, "Content-Type": "application/json; charset=utf8"}
j = {"command": "turnOn", "parameter": "default", "commandType": "command"}

#自分のTwtterのユーザーネーム
UN = "ユーザーネーム"

#認証
client = tweepy.Client(bearer_token=BT, consumer_key=CK, consumer_secret=CS, access_token=AT, access_token_secret=ATS)

#自分のID検索
search = str(client.get_user(username=UN))
UID = re.findall("(?<=User id=)\w+", search)[0]

#ツイートとツイートID検索
tweets = str(client.get_users_tweets(id=UID))
TID = re.findall("(?<=Tweet id=)\w+", tweets)[0]
tweet = re.findall("(?<=text=)\w+", tweets)[0]

#ツイート検索&実行
if tweet == "ライトつけて":
    client.create_tweet(in_reply_to_tweet_id=TID, text="つけました！")
    requests.post(url, headers=h, json=j)
    print("実行しました！")
elif tweet == "ライトけして" :
    client.create_tweet(in_reply_to_tweet_id=TID, text="けしました！")
    requests.post(url, headers=h, json=j)
    print("実行しました！")
else:
    print("見つかりませんでした")
```

次に、「ライトつけて」とツイートしてください。
その後に、「C:\Users\Username\Documents\Python\TurnOnLight.py」のとろは先ほど保存したプログラムのパスに変更し、実行してください。

```
python C:\Users\Username\Documents\Python\TurnOnLight.py
```

成功するとライトがつき、下記のように表示され、リプライに「つけました！」と送信されます。

```
実行しました！
```

もしツイートが見つからなければ下記のように表示されます。
ツイートしたのに見つからない場合は、少しタイムラグがあるようなので数秒後にやりなおしてください。

```
見つかりませんでした
```

#6. 定期的に実行させるには
毎回ツイートした後にプログラムを実行させるのは大変ですよね
なので、[Heroku](https://jp.heroku.com)などを利用して定期的に実行しましょう。
下記の記事を参考にして導入してみてください。

https://qiita.com/nsuhara/items/fac20adb6b0a122a3709

#7. おわりに
今回の記事はどうだったでしょうか。
誤字、脱字があれば教えてくれるとありがたいです。
また、プログラムのわからないことや質問、ミスなどありましたらコメントしてください。

今回作ったプログラムはGitHubにありますので、ご自由にお使いください！

https://github.com/TomEnergy/TurnOnTheLight