226
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

執筆日時:2015.08.09

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

1.準備

1.Twitter Appにアクセス
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を扱うライブラリは多々ある. 私が使ったことあるのは下の三つである.

大抵どれも

$ pip install twitter

みたいな感じで大抵インストールできると思います.

Twitterのbotって

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

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

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

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

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の書き方

2.リアルタイムに応対するタイプ

Streaming APIを用います.

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を作成したい場合

.
.
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で取得した際のデータ構造をみてください。

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

実はもっと効率的な運用方法あるかもしれませんが今の所こんな感じです.


update_name

CUI上でtwitterのプロフィール設定いじってみましょって感じ

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をみてください.

私個人としてはpython-twitterよりtweepyの方がreferenceが見やすくて使いやすいかな
API Reference — tweepy 3.5.0 documentation
なのでこれできないかなと思ったらtwitter公式と各ライブラリのリファレンス見に行くべし!!

参考にさせてもらったサイト

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
226
Help us understand the problem. What are the problem?