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("&quot ;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("&quot ;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]:
'\n\n# From 2.6 NX  \n# 这一段代码的作用是打开刚才创建的json文件,然后返回每一个retweeter的朋友列表,并且写进新的文件\n# 在这里,用的是friends_ids方法,返回的是每一个用户follow的其他人。而不是所有follow这个用户的人!!!!\nwith open(\'Promoted_Tweets_ID_Retweets.json\', \'r\') as u:\n    for user in u:\n        while True:\n            try:\n                with open(\'Relation.txt\', \'a\') as f:\n                    friend_list = [r for r in api.friends_ids({\'user_id\': user[:-1]})]\n                    #friend_list = api.friends_ids(user)\n\n                    for each in friend_list:\n                        print(each)\n                        f.write(str(each))\n                        #f.write(\'\n\')\n                    break\n\n            except tweepy.error.RateLimitError as e:\n\n                print("&quot ;Error on_data: %s"" % str(e))\n                time.sleep(120)\n                continue\n            except tweepy.error.TweepError as te:\n                r = e.reason.replace(\'\'\', \'"\')\n                #print(r)\n                r = json.loads(r)\n                if r[0][\'code\'] == 34:\n                    print(\'got error 34, break\')\n                    break\n                else:\n                    print("unexpected error: ", str(te))\n\n\n'

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("&quot ;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]:
'\n\nretweeter = []\nfriends = []\n\nwith open(\'Relation.txt\') as r:\n    for each_list in r:\n        extract = json.loads(each_list)\n        #print(extract)\n        #print(type(extract))\n        #print(extract[1])\n\n        retweeter.append(extract[0])\n        friends.append(extract[1])\n\n\ngraph = nx.Graph()\nn = 0\nend = len(retweeter)\nfor each in friends:\n        if retweeter[1] == each:\n            print("It\'s here!!!")\n            graph.add_edges_from([(retweeter[n],each)])\n\nfor each in retweeter:\n    if each in friends:\n        print("ffffffff")\n\n'

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