Twitterのbotをpythonで作成する手順

執筆日時:2015.08.09

いつも皆様のブログやQita,Githubなどを参考にさせていただきありがとうございます。

## 1.準備
1.[Twitter App](https://apps.twitter.com)にアクセス
2.[Create New App]で新規appを作成する
3.各種keyを手に入れる

- Consumer Key(API Key)
- Consumer Secret(API Secret)
- Access Token
- Access Token Secret

※Access Levelは作成したいアプリによってAccess Levelを変更すること


## 2.PythonでTwitterを扱う
環境はPython3.5.1
Python上でTwitterを扱うライブラリは多々ある. 私が使ったことあるのは下の三つである.

- [python-twitter](https://pypi.python.org/pypi/python-twitter)
- [Tweepy](http://www.tweepy.org/)
- [TwitterAPI](https://github.com/geduldig/TwitterAPI)

大抵どれも

```zsh
$ pip install twitter
```
みたいな感じで大抵インストールできると思います.

Twitterのbotって

1.定期的にツイートするタイプ
2.リアルタイムに応対するタイプ 

の二つのタイプがあると私は考えています.(もしかしたら他にあるかもしれませんけど)

今回はこの二つのタイプのBotの作成を行いたい.

### 1.定期的にツイートするタイプ

```py3
import twitter

auth = twitter.OAuth(consumer_key="",
consumer_secret="",
token="",
token_secret="")

t = twitter.Twitter(auth=auth)

#ツイートのみ
status="Hello,World" #投稿するツイート
t.statuses.update(status=status) #Twitterに投稿

#画像付きツイート
pic=""　#画像を投稿するなら画像のパス
with open(pic,"rb") as image_file:
 image_data=image_file.read()
pic_upload = twitter.Twitter(domain='upload.twitter.com',auth=auth)
id_img1 = pic_upload.media.upload(media=image_data)["media_id_string"]
t.statuses.update(status=status,media_ids=",".join([id=img1]))

```
画像や文言の定期ツイートする程度のbotであれば,これを多少改変すればok!!  


スクリプトの定期実行に関してはいくつかの方法がありますがcrontabを用いるのが一番良さげ(私個人としては表記方法が嫌い)
>crontab とは設定した時間になったら定期的にコマンドを実行してくれるツール
・[crontabの書き方](http://www.server-memo.net/tips/crontab.html)

### 2.リアルタイムに応対するタイプ
Streaming APIを用います.

```py3
import twitter

auth = twitter.OAuth(consumer_key="",
consumer_secret="",
token="",
token=secret="")

t = twitter.Twitter(auth=auth)
#Userstreamを用いる
t_userstream = twitter.TwitterStream(auth=auth,domain='userstream.twitter.com')

#自分のタイムラインのツイートおよびユーザーの情報が流れる
for msg in twitter.userstream.user():
 print(msg)

```
プログラムではmsgの中身に
一つずつユーザー情報、ツイート情報など様々な情報が流れてくるので欲しい情報を入手できるよう加工してください。

私がよく使うのだけ載せておきます.

| parameter | contents |
|:----|:----|
|in_reply_to_screen_name|返信先ユーザー名|
|text|ツイート内容|
|name|ツイートしたユーザの名前(≠screen_name)|
|media_url|ツイートに付与されたメディアのURL|

他はあまり今の所使ってないかな..

例えば、リプライが来たときに返信するbotを作成したい場合

```py3
.
.
for msg in twitter.userstream.user():
 #TLにリプライでTWITTE_IDが含まれてたら分岐
 if msg['in_reply_to_screen_name']=="TWITTER_ID":
  tweet = "@"+msg['user']['screen_name']+" "+"Reply Thanks you"
  t.statuses.update(status=tweet)
  
```
このように作成することができる(一例)

流れてくる情報(msg)からどういう情報が手に入るか詳しく知りたい人は
[Twitter APIで取得した際のデータ構造](http://biokids.org/?%A4%C9%A4%D6%A4%AA%2FTwitter%A4%C7%CD%B7%A4%DC%A4%A6%A1%AA%2F%A5%C7%A1%BC%A5%BF%B9%BD%C2%A4)をみてください。

tweepyに関しては後日執筆予定.

実はもっと効率的な運用方法あるかもしれませんが今の所こんな感じです.
- - -  
### update_name
CUI上でtwitterのプロフィール設定いじってみましょって感じ

```py3
import tweepy

auth = OAuthHandler(consumer_key="",consumer_secret="")
auth.set_access_token(token="",token=secret="")
api = API(auth)
api.update_profile(name='新しくする名前')

```
他のupdate_profileについては,[POST account/update_profile | Twitter Developers](https://dev.twitter.com/rest/reference/post/account/update_profile)をみてください.

私個人としてはpython-twitterよりtweepyの方がreferenceが見やすくて使いやすいかな
[API Reference — tweepy 3.5.0 documentation](http://docs.tweepy.org/en/v3.5.0/api.html) 
なのでこれできないかなと思ったらtwitter公式と各ライブラリのリファレンス見に行くべし!!

## 参考にさせてもらったサイト
- [kivantium活動日記 PythonでTwitterを使う 〜Tweepyの紹介〜](http://kivantium.hateblo.jp/entry/2015/01/03/000225)