LoginSignup
1
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-01-03

作るもの

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のところに絶起ってするだけでいいのでそのうち自動化した絶起警察のコードを書いてみたいと思います
あと僕はよく絶起するので待ち合わせとかでよく遅刻します
申し訳ないので何時までにツイートしなかったら起床してないと判断して先に謝罪ツイートする機能を作っていきたいと思います

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1