Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

作るもの

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

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