In [ ]:
import tweepy
import json
from tweepy.streaming import StreamListener
from tweepy import Stream
from tweepy import OAuthHandler
import time
import argparse
import string
consumer_key="4ybgcIfZUWlcPWZmXqXC0vcrF"
consumer_secret="AgCCnpOiktrvmGjL9rFv7QvOGQ7nf70EMWzA9OZcCRs13S5k7i"
access_token="1898807028-wDFiGnKM6bOCzARxfMUSQkZl9ksEwo1YYdNVnb6"
access_token_secret="wMRQ3j6XUlWHmA6wSXOlrhWpYB7tmVGrAV5HQof7f5adn"
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
'''
# 把朋友列表写入list, 每个list第一项是查询的ID,剩下的是他的朋友
# 这个打开的文件全是 tweet id,都是自己手动弄下来的
# 这是从1.91 Finding Retweets弄来的
with open('Promoted_Tweets_ID.txt','r') as u:
for user in u:
while True:
try:
with open('Promoted_Tweets_ID_Retweets.json', 'a') as f:
a = [r._json for r in api.retweets(user[:-1])]
Retweet_List = [r._json['user']['id'] for r in api.retweets(user[:-1])]
f.write(json.dumps([user[:-1], Retweet_List])+'\n')
break
except tweepy.error.RateLimitError as e:
print("" ;Error on_data: %s"" % str(e))
time.sleep(120)
continue
except tweepy.error.TweepError as te:
r = te.reason.replace('\'', '"')
r = json.loads(r)
if r[0]['code'] == 34:
print('got error 34 @ tweet = %s, break' % user[:-1])
break
else:
print("unexpected error @ tweet = %s: %s" % (user[:-1], str(te)))
'''
In [1]:
'''
# From 2.6 NX
# 这一段代码的作用是打开刚才创建的json文件,然后返回每一个retweeter的朋友列表,并且写进新的文件
# 在这里,用的是friends_ids方法,返回的是每一个用户follow的其他人。而不是所有follow这个用户的人!!!!
Retweeters = []
with open('Promoted_Tweets_ID_Retweets.json', 'r') as f:
for each in f:
content = json.loads(each)
#print(content[1])
for e in content[1]:
Retweeters.append(e)
print(Retweeters)
# 从这里开始是从2.6 NX copy过来的
# 但是已经修改过了!!!
for user in Retweeters:
while True:
try:
with open('Relation.txt', 'a') as f:
friend_list = api.friends_ids(user)
print(friend_list)
l = json.dumps([user, friend_list])
f.write(l)
f.write('\n')
break
except tweepy.error.RateLimitError as e:
print("" ;Error on_data: %s"" % str(e))
time.sleep(120)
continue
except tweepy.error.TweepError as te:
r = te.reason.replace('\'', '"')
r = json.loads(r)
if r[0]['code'] == 34:
print('got error 34 @ tweet = %s, break' % user[:-1])
break
else:
print("unexpected error @ tweet = %s: %s" % (user[:-1], str(te)))
'''
Out[1]:
In [ ]:
'''
# 从这里开始,是第二个方法.返回的是所有follow我们的retweeter的人的列表.
# 换句话说,刚才是查"我"follow了谁,现在是谁follow了"我"
Retweeters = []
with open('Promoted_Tweets_ID_Retweets.json', 'r') as f:
for each in f:
content = json.loads(each)
#print(content[1])
for e in content[1]:
Retweeters.append(e)
print(Retweeters)
for user in Retweeters:
while True:
try:
with open('Relation_Followers_ids.txt', 'a') as f:
friend_list = api.friends_ids(user)
print(friend_list)
l = json.dumps([user, friend_list])
f.write(l)
f.write('\n')
break
except tweepy.error.RateLimitError as e:
print("" ;Error on_data: %s"" % str(e))
time.sleep(120)
continue
except tweepy.error.TweepError as te:
r = te.reason.replace('\'', '"')
r = json.loads(r)
if r[0]['code'] == 34:
print('got error 34 @ tweet = %s, break' % user[:-1])
break
else:
print("unexpected error @ tweet = %s: %s" % (user[:-1], str(te)))
'''
In [2]:
'''
# 这一段的目的是把所有的retweeter和它们的follower都放在大list里面,然后查找有没有联系。
# 应该再增加一个list用来装每个retweeter正在follow的人
retweeter = []
friends = []
with open('Relation.txt') as r:
for each_list in r:
extract = json.loads(each_list)
#print(extract)
#print(type(extract))
#print(extract[1])
retweeter.append(extract[0])
friends.append(extract[1])
graph = nx.Graph()
n = 0
end = len(retweeter)
for each in friends:
if retweeter[1] == each:
print("It's here!!!")
graph.add_edges_from([(retweeter[n],each)])
for each in retweeter:
if each in friends:
print("ffffffff")
'''
Out[2]:
In [ ]:
import tweepy
import networkx as nx
import matplotlib
import json
import numpy as np
import re
from collections import defaultdict
retweeter = []
friends = []
the_person_being_followed=[]
with open('Relation.txt') as r:
for each_list in r:
extract = json.loads(each_list)
#print(extract)
#print(type(extract))
#print(extract[1])
retweeter.append(str(extract[0]))
friends.append([str(r) for r in extract[1]])
# 这里开始是打开第二个文件,导入另一组列表
with open('Relation_Followers_ids.txt') as r:
for each_list in r:
extract = json.loads(each_list)
#print(extract)
#print(type(extract))
#print(extract[1])
#retweeter.append(extract[0])
the_person_being_followed.append([str(r) for r in extract[1]])
graph = nx.Graph()
n = 0
end = len(retweeter)
'''for each in the_person_being_followed:
if retweeter[1] == each:
print("It's here!!!")
graph.add_edges_from([(retweeter[n],each)])
for each in retweeter:
if each in the_person_being_followed:
print("ffffffff")'''
#print(set([r for r in retweeter if r in np.concatenate(friends)]))
#print(set([r for r in retweeter if r in np.concatenate(the_person_being_followed)]))
set_friends = list(set([r for r in retweeter if r in np.concatenate(friends)]))
set_the_person_being_followed = list(set([r for r in retweeter if r in np.concatenate(the_person_being_followed)]))
graph = nx.Graph()
i = 0
while i<len(retweeter):
for id in friends[i]:
graph.add_edges_from([(retweeter[i], id)])
for id in the_person_being_followed[i]:
graph.add_edges_from([(retweeter[i], id)])
i+=1
#graph1 = nx.complete_graph(5)
print(nx.average_clustering(graph))
nx.draw(graph, with_labels=False)
#print(nx.average_clustering(graph))
#for tweet in documents:
#print(type(tweet))
#for each in tweet:
#print(tweet[each])
#print(type(tweet))
# This figure is for #Blizzcon.
#Clustering coefficient