Python Twitter APIを初心者向けに徹底解説してみた – フォロワー取得からハッシュタグ検索まで-

Python データ分析 Python

〇この記事の読者の対象

・PythonでTwitterのAPIを利用したい人
・Pythonでフォロワーの全データを取得したい人
・Pythonで指定したハッシュタグを検索し、そのツイートを投稿している人のIDを全部取得したい人

Python Twitter APIでフォロワーの全データを取得する

今回は、Pythonでツイッターのフォロワーをすべて取得します。

Tweepyを利用して、以下のことをためしてみました。

  • PythonのTwitter APIのライブラリTweepyで、ある特定のユーザーのフォロワーをすべて取得する
  • そのフォロワーのFollow数とFollowing数を取得する
  • Pandasを利用して、データをCSVに保存する

まず、以下のコードを書き、特定のユーザーIDから、そのフォロワーのリストを取得し、一人ひとりのフォロワー数とフォロウィング数を取得し、CSVに落とし込むスクリプトを書いてみました。

環境

  • Windows 10
  • Windows Subsystem for LinuxでUbuntuを利用
  • Python3

スクリプト

Tweepyを使っていて、ツイッターのAPIを利用できるTweepyというライブラリを使って、データを取ってきます。

$ pip install tweepy

処理内容としては、以下のようになります

  • Twitter APIの認証キーの設定
  • Tweepyでインスタンスを作成
  • 以下をmainの中で実行
    • 全フォロワーのIDをリスト形式で取得し、以下for文で取得して、pandasで列に追加する
      • フォロワーID
      • フォロワー数
      • フォロー数
    • 最後にCSVでエクスポートする

中身のコードはこちらです。


import tweepy
import os
import pandas
import time

search_id = "never_be_a_pm" #ツイッターのID
df = pandas.read_csv('default.csv', index_col=0)
count = 0
skip = 0

CONSUMER_KEY = "" #各種キーは、api.twitter.comから取得してください
CONSUMER_SECRET = ""
ACCESS_TOKEN = ""
ACCESS_TOKEN_SECRET = ""

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth ,wait_on_rate_limit = True)

def getFollowerIdsList(search_id): #引数にツイッターID、リスト形式でフォロワーのツイッターIDを返します  

    followers_ids = tweepy.Cursor(api.followers_ids, id = search_id, cursor = -1).items()
    followers_ids_list = []

    try:
        for followers_id in followers_ids:
            followers_ids_list.append(followers_id)

    except tweepy.error.TweepError as e:
        print (e.reason)

    return followers_ids_list

def getFollowers(userID) #ユーザーIDを指定して、フォロワー数を返します:
    user = api.get_user(userID)
    followersCount = user.followers_count
    return followersCount

def getFollowings(userID): #ユーザーIDを指定して、フォロー数を返します
    user = api.get_user(userID)
    followingCount = user.friends_count
    return followingCount

if __name__ == "__main__":

    followerIdsList = getFollowerIdsList(search_id)
    followersCount = len(followerIdsList)
    for followerId in followerIdsList:
        try:
            userid = api.get_user(followerId).screen_name
            followers = getFollowers(followerId)
            followings = getFollowings(followerId)
            se = pandas.Series([userid, followers, followings],['userid','followers','followings'])
            print(se)
            count += 1
            print("{}%".format(round((count + skip) / followersCount)))
            df = df.append(se, ignore_index=True)
        except:
            print("Failed to retrieve user...retry")
            skip += 1
            print("{}%".format(round((count + skip) / followersCount)))
            time.sleep(10)
    df.to_csv("{}.csv".format(search_id)) # pandasでcsvに保存する

 

APIからデータを取ってきているときは、こんな感じになります。

取得したCSVはこんな感じになりました。

Pythonで指定したハッシュタグを検索し、そのツイートを投稿している人のIDを全部取得

指定したキーワードで検索し、そのキーワードについて言及しているユーザーのツイートから、ユーザーIDを特定することができます。


import tweepy
from pylab import *
from networkx import *
import time

# 各種キーをセット
CONSUMER_KEY = ''
CONSUMER_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_SECRET = ''

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)

#APIインスタンスを作成
api = tweepy.API(auth)

tweets = api.search(q='"#駆け出しエンジニアと繋がりたい"', lang='ja', result_type='recent',count=12)
ids = []

for tweet in tweets:
id = tweet.user.id
screen_name = tweet.user.screen_name

 

それぞれのユーザー名を取得し、そのユーザーのコメントにいいねとフォロー

過去にQiitaに書いたものです。あんまりやりすぎると普通に嫌われるので注意してください!


# Tweepyライブラリをインポート
import tweepy
# 各種キーをセット
CONSUMER_KEY = 'xxxxxxxx'
CONSUMER_SECRET = 'xxxxxxxx'
ACCESS_TOKEN = 'xxxxxxxx'
ACCESS_SECRET = 'xxxxxxxx'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
#APIインスタンスを作成
api = tweepy.API(auth)

q = "PythonとかScrapyとか使ってクローリングやスクレイピングするノウハウを公開してみる" #ここに検索キーワードを設定
count = 100
search_results = api.search(q=q, count=count)

for result in search_results:
username = result.user._json['screen_name']
user_id = result.id #ツイートのstatusオブジェクトから、ツイートidを取得
print(user_id)
user = result.user.name #ツイートのstatusオブジェクトから、userオブジェクトを取り出し、名前を取得する
print(user)
tweet = result.text
print(tweet)
time = result.created_at
print(time)
try:
api.create_favorite(user_id) #ファヴォる
print(user)
print("をライクしました")
api.create_friendship(user_id)
print("をフォローしました")
except:
print("もうすでにふぁぼかフォローしてますわ")
print("##################")

Pythonであるユーザーのフォロワーをすべてリストに追加

tweepyでtwitterのリスト周りを触る」を参考に作成しました。
「[python][twitter] リストへユーザを追加」


# リストの作成, nameはリスト名、modeはpublicかprivateか選べる、descriptionはリストの詳細
api.create_list(name=name, mode=is_public, description = description) #modeは、"public"か"private"で公開、非公開を選べる
# リストの削除, owner_screen_nameは所有者のユーザー名、、slugはリストの名前
api.destroy_list(owner_screen_name=screen_name,slug=listname)  #slug...リスト名が日本語のときは注意*1
# ユーザーのリストを取得
for twilist in api.lists_all(screen_name=screen_name):
    print("slug="+twilist.slug)
    print("name="+twilist.name)

# ユーザー名からそのユーザーのリストを取得
screen_name="" #リスト作成者の@~~の~~
listname="" #リストの名前
for member in tweepy.Cursor(api.list_members,slug=listname,owner_screen_name=screen_name).items():
    print(member.screen_name)

# フォロワーのユーザーをリストに追加
api.add_list_member(list_name, id=user)