Я использую следующий код, чтобы получить список друзей из идентификаторов пользователей Twitter.Я использую Oauth в Python для этого:
import oauth2 as oauth
import json
import twitter
import time
CONSUMER_KEY = 'xxxxx'
CONSUMER_SECRET = 'xxxxxxx'
ACCESS_KEY = 'xxxxxxx'
ACCESS_SECRET = 'xxxxxxxxx'
consumer = oauth.Consumer(key=CONSUMER_KEY, secret=CONSUMER_SECRET)
access_token = oauth.Token(key=ACCESS_KEY, secret=ACCESS_SECRET)
client = oauth.Client(consumer, access_token)
api_path = "https://api.twitter.com/1.1/friends/ids.json?user_id="
def friendsids(user_id):
cursor='-1'
all_ids=[]
errors=[]
while (cursor!='0'):
url_with_cursor = api_path+str(user_id) +"&cursor="+cursor
response,data = client.request( url_with_cursor )
data=data.decode('utf8')
data = json.loads(data)
if 'ids' in data.keys():
for each in data['ids']:
all_ids.append(each)
cursor=data['next_cursor_str']
elif 'errors' in data.keys():
time.sleep(60*15)
continue
else:
errors.append(str('error')+str(user_id))
cursor='0'
if len(all_ids)>0:
return all_ids
else:
return errors
with open('a.txt') as f:
for line in f:
line=line.rstrip()
twitter_id=line[2]
frnds=friendsids(twitter_id)
print(twitter_id+'\t'+str(frnds))
файл a.txt содержит данные.Программа иногда завершается со следующей ошибкой:
File "import2.py", line 54, in <module>
frnds=friendsids(twitter_id)
File "import2.py", line 23, in friendsids
response,data = client.request( url_with_cursor )
File "/usr/local/lib/python3.5/dist-packages/oauth2/__init__.py", line 687, in request
connection_type=connection_type)
File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1312, in request
(response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1062, in _request
(response, content) = self._conn_request(conn, request_uri, method, body, headers)
File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1015, in _conn_request
response = conn.getresponse()
File "/usr/lib/python3.5/http/client.py", line 1197, in getresponse
response.begin()
File "/usr/lib/python3.5/http/client.py", line 297, in begin
version, status, reason = self._read_status()
File "/usr/lib/python3.5/http/client.py", line 258, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "/usr/lib/python3.5/socket.py", line 575, in readinto
return self._sock.recv_into(b)
File "/usr/lib/python3.5/ssl.py", line 929, in recv_into
return self.read(nbytes, buffer)
File "/usr/lib/python3.5/ssl.py", line 791, in read
return self._sslobj.read(len, buffer)
File "/usr/lib/python3.5/ssl.py", line 575, in read
v = self._sslobj.read(len, buffer)
ConnectionResetError: [Errno 104] Connection reset by peer
Есть ли способ предотвратить это?Метод, который я использую, очень медленный.Вряд ли можно собрать данные 100 пользователей за 2 часа.Существует ли более быстрый способ сбора списка друзей в Твиттере (всех друзей) в python для 1000 пользователей?