Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 KB | None | 0 0
  1. import time
  2. import json
  3. import datetime
  4.  
  5. from tweepy import OAuthHandler, Cursor, API
  6.  
  7. """
  8. ideia geral:
  9. regras para extração de usuários:
  10. considerar apenas usuários que criaram a conta antes de 1-1-2019
  11. considerar apenas os 1000 seguidores que o Cursor retornar (aceita-se a ordem dada pela API)
  12. TODO: verificar se tem uma forma aleatória de consultar isso
  13. 3 camadas de seguidores de seguidores
  14.  
  15. redes:
  16. seguidores: a segue b
  17. retweets: a retweeta b (com peso)
  18. """
  19.  
  20. presidents = ['jairbolsonaro','MichelTemer','dilmabr','LulaOficial','FHC']
  21.  
  22. consumer_key = "CTIleg13lG27dTLTrUBSzfyJN"
  23. consumer_secret = "XPxrapcwuJ12NrKEQR8xjClMzqYHEpukPR6TOlQWUG5yz8RPFG"
  24. auth = OAuthHandler(consumer_key, consumer_secret)
  25. api = API(auth)
  26. users_to_json = {}
  27.  
  28. """
  29. recebe uma lista de usuários e retorna apenas aqueles que
  30. respeitam o critério definido em op
  31. """
  32. def filter(users,op,n_max):
  33. filtered_users = []
  34. for user in users:
  35. if op(user):
  36. filtered_users.append(user)
  37. # print(user)
  38.  
  39. if len(filtered_users) >= n_max:
  40. return filtered_users
  41. return filtered_users
  42.  
  43. """
  44. retorna True se a conta é aberta e criada antes de 1/1/2019
  45. """
  46. def min_created_at(user_info,mindate=datetime.datetime(2018,1,1)):
  47. date = user_info.created_at
  48. return date < mindate and not user_info.protected
  49.  
  50. """
  51. retorna os n_followers (ou o número total caso seja menor) seguidores do usuário user_id
  52. """
  53. def get_followers(user,n_followers):
  54. ids = []
  55. username = user.screen_name
  56. print(username)
  57.  
  58. # try:
  59. time.sleep(60)
  60. for followers_ids in Cursor(api.followers_ids, screen_name=username).pages(3):
  61. time.sleep(60)
  62. for i in range(0,len(followers_ids),100):
  63. temp = followers_ids[i:i+100]
  64.  
  65. followers = api.lookup_users(user_ids=temp)
  66. time.sleep(1.2)
  67.  
  68. followers = filter(followers,min_created_at,n_followers)
  69. ids += followers
  70.  
  71. if len(ids) >= n_followers:
  72. while len(ids) > n_followers:
  73. ids.pop()
  74. return ids
  75. # except:
  76. # print('Unable to find',username,'followers')
  77. # time.sleep(5*60)
  78. # return get_followers(user_id,n_followers)
  79. return ids
  80.  
  81. def save(filename,subset_users):
  82. for user in subset_users:
  83. users_to_json[user.id] = user._json
  84.  
  85. with open(filename, 'w') as json_file:
  86. json.dump(users_to_json, json_file)
  87.  
  88. """
  89. amigos dos amigos (dado um usuário inicial root)
  90. considera apenas até step < 3
  91. """
  92. def get_followers_step(root,step=0):
  93. if step >= 3:
  94. return set()
  95.  
  96. users = get_followers(root,10)
  97. save('users.json',users)
  98.  
  99. all_users = users
  100. for user in users:
  101. all_users += get_followers_step(user,step+1)
  102.  
  103. all_users += [root]
  104.  
  105. return all_users
  106.  
  107.  
  108. if __name__ == '__main__':
  109. users = []
  110. for president in presidents:
  111. print('current:',president)
  112. president_user = api.get_user(president)
  113. users += get_followers_step(president_user)
  114. save('users.txt',users)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement