【Python+Tweepy】ふぁぼしてくれた人と該当Tweetの取得

Twitterでふぁぼしてくれた人と該当Tweetを取得するWebサイトをPython+Tweepyで作ってみました。

使い方

具体的には下記のTwitterIDの箇所にふぉぼをしたTwiterIDとふぁぼされたTwitterIDを入力してボタンを押すと

20180503_python_0-1 【Python+Tweepy】ふぁぼしてくれた人と該当Tweetの取得

下記の様な感じで、アカウントベースでふぁぼされたTweetをリストアップします。(下記の例だと1つしかないのでわかりづらいですが)

20180503_python_0-1 【Python+Tweepy】ふぁぼしてくれた人と該当Tweetの取得

また、ふぉぼをしたTwiterIDを省略して、ふぁぼされたTwitterIDのみを入力してボタンを押すと、全てではないのですが、幾つかふぁぼしたIDをピックアップしてふぁぼされたTweetをリストアップします。

20180503_python_0-1 【Python+Tweepy】ふぁぼしてくれた人と該当Tweetの取得

ソースコード

Mainのソースとなるapp.pyも公開します。

#!/virtual/kumanabe/.pyenv/versions/anaconda3-4.4.0/bin/python

import os
import logging
import tweepy
import random,string
from flask import Flask, session, redirect, render_template, request
from requests_oauthlib import OAuth1Session

# matplotlib.use('Agg')はpltの前に実施する必要あり
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

# KEY Information
#Twitter認証
CONSUMER_KEY = 'xxxxxxx'
CONSUMER_SECRET = 'xxxxxxxxxxxxx'
ACCESS_TOKEN = 'xxxxxxxxxxxxxxxx'
ACCESS_SECRET = 'xxxxxxxxxxxxxxxxx'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth,wait_on_rate_limit=True)

# Flask の起動
app = Flask(__name__)

@app.route('/')
def index():
    """ root ページの表示 """
    # Formを表示するかどうか
    twitterID = request.args.get('twitterID')
    srcTwitterID = request.args.get('srctwitterID')
    formOn = 0
    if twitterID and srcTwitterID:
        # twitterIDを取得できていればFormは表示せずに認証に移る(template/index.html)
        # twitterIDは後で使うので保存
        formOn = 1
        userInfo = user_info(api,twitterID)
        tweetListRT = fav_list(api,twitterID,srcTwitterID,1)
    elif twitterID:
        # twitterIDを取得できていればFormは表示せずに認証に移る(template/index.html)
        # twitterIDは後で使うので保存
        formOn = 1
        userInfo = user_info(api,twitterID)
        tweetListRT = fav_list(api,twitterID,"",0)
    else:
        # StatusIDを取得できていればFormを表示する(template/index.html)
        formOn = 0
        tweetListRT=[]
        userInfo = []

    # templates/index.html を使ってレンダリング.
    return render_template('index.html', twitterID=twitterID, userInfo=userInfo, tweetListRT=tweetListRT,formOn=formOn)

def fav_list(api,twitterID,srcTwitterID,mode):
    output = []
    followers = []

    if mode == 0:
        for follower in tweepy.Cursor(api.followers, id = twitterID, cursor = -1,count=200).items():
            if(follower.protected == False):
                followers.append(follower.screen_name)
    else:
        followers.append(srcTwitterID)

    prev_user = ""
    for follower in followers:
        if random.randint(0,int(len(followers)/40)) == 0 or mode:
            count = 0
            for tweet in tweepy.Cursor(api.favorites, screen_name = follower, cursor = -1,count=200).items():
                if(tweet.user.screen_name == twitterID):
                    follower_info = user_info(api,follower)
                    if prev_user != follower:
                        output.append([follower_info,tweet,"o"])
                    else:
                        output.append([follower_info,tweet,"x"])
                    prev_user = follower

                if(count == 199):
                    count = 0
                    break
                else:
                    count = count + 1

    return output

def user_info(api,twitterID):
    output =[]
    """ user の timeline のリストを取得 """
    # tweepy で Twitter API にアクセス
    api = tweepy.API(auth)

    userInfo = api.get_user(twitterID)
    return userInfo

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL