Edited at

Twythonを使ったTwitterのメンションの判定


作るもの

Twitterで特定のアカウントの最新のツイートを取得し、そのツイートがメンションだった場合にアクションをする

今回のアクションはツイート


準備

ターミナルで

$ sudo pip install twython



でtwythonをインストールしてください


コード

#!/usr/bin/env python 

# coding: utf-8
from twython import Twython,TwythonError
import datetime
import time
#twitterの認証情報を入力
CONSUMER_KEY = "XXXXXXXXXXXXXXXXXXXXXXX"
CONSUMER_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXX'
ACCESS_KEY = 'XXXXXXXXXXXXXXXXXXXXXXX'
ACCESS_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXX'
api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)
print('Auth Done!')

#日時取得
now = datetime.datetime.now()
print(now)
tw_text = ('First value')
print(tw_text)

try:
user_timeline = api.get_user_timeline(screen_name='ここに取得したいアカウントID',count=1)
except TwythonError as e:
print('error')
print (e)

while True:
#重複処理
print(tw_text)
for tweet in user_timeline:
print(tweet['text'])
print("From now on, checking duplication")
#TL取得更新
try:
user_timeline = api.get_user_timeline(screen_name='ここに取得したいアカウントID',count=1)
print("GET TL")
except TwythonError as error:
print('error')
print (error)
if tw_text != tweet['text'] :
print(tw_text)
print(tweet['text'])
print('This is new tweet')
#TL取得更新
try:
user_timeline = api.get_user_timeline(screen_name='ここに取得したいアカウントID',count=1)
print("GET TL")
except TwythonError as error:
print('error')
print (error)
for tweet in user_timeline:
print("tw_textに代入")
target = '誰か特定の相手に対するメンションが判定したい場合はここにその相手のID'
fb = 0
fd = tweet['text'].find("@" + target)
print('find' + str(fd))
if fd == -1:
print('This tweet is not order')
if fd != -1:
print('This tweet is order')
try:
now = datetime.datetime.now()
api.update_status(status='ここにツイートさせたい内容' + str(now))
print('Have tweeted')
except TwythonError as e:
print('ERROR')
print (e)
tw_text = tweet['text']
else :
print("I have seen")
print('4')
print(tw_text)
print(tweet['text'])
print("==========================================================")
time.sleep(10)


解説

TwitterAPIの入力のところはXXXXXXXXXXXXXXXXXXXXXXXってしてるのでご自分の入力してください

fd = tweet['text'].find("@" + target)のfind以降のカッコの中身が取得したツイートの中に含まれているか検索する

ここに特定の人へのメンションを判定したかったらIDを入れればOK!

RTを除外したかったらそのカッコ内にRTを入れてRTか判定するif文組めばOK!

あと重複処理ってところでは新しいツイートかをチェックします

同じツイートだった場合はアクションを起こしません

同じツイートはできないのでnowで今の時間を取得して、ツイートに含ませています

time.sleeo()のなかの数字は秒数でこの場合10秒ごとにTLこのプログラムをループします


今後の展望的なやつ

絶起警視庁bot(@Step_Z_to_B)ってのがあってこういう風に絶起に反応するだけだったらfindのところに絶起ってするだけでいいのでそのうち自動化した絶起警察のコードを書いてみたいと思います

あと僕はよく絶起するので待ち合わせとかでよく遅刻します

申し訳ないので何時までにツイートしなかったら起床してないと判断して先に謝罪ツイートする機能を作っていきたいと思います