Da die Follower-Liste von Twitter nur screen_name enthält, habe ich beschlossen, die Benutzer-ID-Informationen zur Follower-Liste von Twitter hinzuzufügen.
Twitter API GET users/show https://dev.twitter.com/rest/reference/get/users/show
name | account | followdate |
---|---|---|
Kuwa | kazhu | 2015/12/26 |
Giri | noko123 | 2015/12/26 |
Taro | taro123 | 2017/09/21 |
API-Einschränkungen sind für Twitter problematisch, aber die Möglichkeit, dies zu vermeiden, besteht in der Methode des Administrators von Code 7 Ward. Ich bin immer dankbar für Ihre Hilfe. Holen Sie sich viele Tweets mit TwitterAPI. Berücksichtigen Sie serverseitige Fehler (in Python)
twitter_user_get.py
# coding=utf-8
import sys
import tweetkey
import os
from requests_oauthlib import OAuth1Session
import csv
import time
import json
import datetime
def init():
#Stellen Sie verschiedene Schlüssel aus der üblichen externen Datei ein
CONSUMER_KEY = tweetkey.twkey['CONSUMER_KEY']
CONSUMER_SECRET = tweetkey.twkey['CONSUMER_SECRET']
ACCESS_TOKEN = tweetkey.twkey['ACCESS_TOKEN']
ACCESS_SECRET = tweetkey.twkey['ACCESS_SECRET']
twitter = OAuth1Session(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_SECRET)
return(twitter)
def twittergetter(input_name,output_name,api):
TweetIDList = []
with open(input_name, 'r') as f:
reader = csv.reader(f)
header = next(reader) #Wenn Sie die Kopfzeile überspringen möchten
#ID-Spalte zur Ausgabe für HEAD hinzugefügt
header.append("id")
fout = open(output_name, 'wt')
writer = csv.writer(fout)
writer.writerow(header)
for row in reader:
#Holen Sie sich Konto von Array 2 von CSV und werfen
screen_name = row[2]
print(screen_name)
url = "https://api.twitter.com/1.1/users/show.json?screen_name=" + screen_name
# params = {'count': 100}
# get_Benutzer hat keine Parameter
req = api.get(url)
if req.status_code == 200:
users = json.loads(req.text)
print(users)
#Benutzer-ID ist in ID
id = users["id"]
print(id)
#Fügen Sie die zurückgegebene ID zum Array hinzu und schreiben Sie
row.append(id)
writer.writerow(row)
else:
#Bei 404 Bildschirm_Da sich der Name bereits geändert oder zurückgezogen hat, schreiben Sie so wie er ist
if req.status_code == 404:
writer.writerow(row)
else:
print ("Error: %d" % req.status_code)
time.sleep(240)
#Header-Bestätigung (Anzahl der Male)
# X-Rate-Limit-Überprüfen Sie, da es selten vorkommt, dass der Rest nicht enthalten ist
if ('X-Rate-Limit-Remaining' in req.headers and 'X-Rate-Limit-Reset' in req.headers):
if (int(req.headers['X-Rate-Limit-Remaining']) == 0):
waitUntilReset(int(req.headers['X-Rate-Limit-Reset']))
checkLimit()
else:
print('not found - X-Rate-Limit-Remaining or X-Rate-Limit-Reset')
checkLimit()
fout.close()
return()
def checkLimit():
'''
Fragen Sie das Limit ab und warten Sie, bis es verfügbar ist
'''
unavailableCnt = 0
while True:
url = "https://api.twitter.com/1.1/application/rate_limit_status.json"
res = api.get(url)
print(res.text)
if res.status_code == 503:
# 503 : Service Unavailable
if unavailableCnt > 10:
raise Exception('Twitter API error %d' % res.status_code)
unavailableCnt += 1
print('Service Unavailable 503')
waitUntilReset(time.mktime(datetime.datetime.now().timetuple()) + 30)
continue
unavailableCnt = 0
if res.status_code != 200:
raise Exception('Twitter API error %d' % res.status_code)
remaining, reset = getLimitContext(json.loads(res.text))
if (remaining == 0):
waitUntilReset(reset)
else:
break
def getLimitContext(res_text):
'''
Informieren Sie sich über die Anzahl der Zeitlimits (beim Start).
'''
remaining = res_text['resources']['users']['/users/show/:id']['remaining']
reset = res_text['resources']['users']['/users/show/:id']['reset']
print(reset)
return int(remaining), int(reset)
def waitUntilReset(reset):
'''
Schlaf bis zum Zurücksetzen der Zeit
'''
seconds = reset - time.mktime(datetime.datetime.now().timetuple())
seconds = max(seconds, 0)
print('\n =====================')
print(' == waiting %d sec ==' % seconds)
print(' =====================')
sys.stdout.flush()
time.sleep(seconds + 10) #Nur für den Fall+10 Sekunden
if __name__ == '__main__':
api = init()
input_name = os.getcwd() + "/twitterList.csv"
output_name = os.getcwd() + "/twitterList_add_id.csv"
twittergetter(input_name,output_name, api)
Wenn ich jedoch versuche, screen_name für 120.000 Personen zu konvertieren, endet er auch nach 2 Tagen nicht. .. ..
Recommended Posts