今日のPythonスクリプト - Twitterフォロワー数の一括取得 -

アクセストークンはTwitter Developerに申請し、APPを作成した後に取得できる。

また、読み込み用のCSVファイルには、"ID"項目(Twitterのスクリーン名に該当)を設けること。

import requests
import csv
import sys
import traceback
from datetime import datetime

ACCESS_TOKEN = 'XXXXXXXXXXXXXXXXX'

if __name__ == "__main__":
    try:
        print('[Start] {}'.format(datetime.now().strftime('%Y/%m/%d %H:%M:%S')))
        data = []
        headers = {'Authorization': 'Bearer {}'.format(ACCESS_TOKEN)}
        # Read CSV file
        with open(sys.argv[1], newline='', encoding='utf-8') as file:
            for idx, record in enumerate(csv.DictReader(file)):
                params = {'screen_name': record['ID']}
                resp = requests.get('https://api.twitter.com/1.1/users/show.json', headers=headers, params=params)
                if resp.status_code != 200:
                    print('[Error] screen_name: {}, status_code: {}, code: {}, message: {}'.format(
                        record['ID'],
                        resp.status_code,
                        resp.json()['errors'][0]['code'],
                        resp.json()['errors'][0]['message']
                        ))
                else:
                    data.append({
                        'screen_name': resp.json()['screen_name'],
                        'name': resp.json()['name'],
                        'followers_count': resp.json()['followers_count']
                    })
        # Output CSV file
        if len(data) > 0:
            with open(sys.argv[2], 'w', newline='', encoding='utf-8') as file:
                writer = csv.DictWriter(file, data[0].keys())
                writer.writeheader()
                writer.writerows(data)
        print('[End] {}'.format(datetime.now().strftime('%Y/%m/%d %H:%M:%S')))
        exit(0)
    except Exception as e:
        print(traceback.format_exc())
        print('[End] {}'.format(datetime.now().strftime('%Y/%m/%d %H:%M:%S')))
        exit(1)