Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time
- import json
- import datetime
- from tweepy import OAuthHandler, Cursor, API
- """
- ideia geral:
- regras para extração de usuários:
- considerar apenas usuários que criaram a conta antes de 1-1-2019
- considerar apenas os 1000 seguidores que o Cursor retornar (aceita-se a ordem dada pela API)
- TODO: verificar se tem uma forma aleatória de consultar isso
- 3 camadas de seguidores de seguidores
- redes:
- seguidores: a segue b
- retweets: a retweeta b (com peso)
- """
- presidents = ['jairbolsonaro','MichelTemer','dilmabr','LulaOficial','FHC']
- consumer_key = "CTIleg13lG27dTLTrUBSzfyJN"
- consumer_secret = "XPxrapcwuJ12NrKEQR8xjClMzqYHEpukPR6TOlQWUG5yz8RPFG"
- auth = OAuthHandler(consumer_key, consumer_secret)
- api = API(auth)
- users_to_json = {}
- """
- recebe uma lista de usuários e retorna apenas aqueles que
- respeitam o critério definido em op
- """
- def filter(users,op,n_max):
- filtered_users = []
- for user in users:
- if op(user):
- filtered_users.append(user)
- # print(user)
- if len(filtered_users) >= n_max:
- return filtered_users
- return filtered_users
- """
- retorna True se a conta é aberta e criada antes de 1/1/2019
- """
- def min_created_at(user_info,mindate=datetime.datetime(2018,1,1)):
- date = user_info.created_at
- return date < mindate and not user_info.protected
- """
- retorna os n_followers (ou o número total caso seja menor) seguidores do usuário user_id
- """
- def get_followers(user,n_followers):
- ids = []
- username = user.screen_name
- print(username)
- # try:
- time.sleep(60)
- for followers_ids in Cursor(api.followers_ids, screen_name=username).pages(3):
- time.sleep(60)
- for i in range(0,len(followers_ids),100):
- temp = followers_ids[i:i+100]
- followers = api.lookup_users(user_ids=temp)
- time.sleep(1.2)
- followers = filter(followers,min_created_at,n_followers)
- ids += followers
- if len(ids) >= n_followers:
- while len(ids) > n_followers:
- ids.pop()
- return ids
- # except:
- # print('Unable to find',username,'followers')
- # time.sleep(5*60)
- # return get_followers(user_id,n_followers)
- return ids
- def save(filename,subset_users):
- for user in subset_users:
- users_to_json[user.id] = user._json
- with open(filename, 'w') as json_file:
- json.dump(users_to_json, json_file)
- """
- amigos dos amigos (dado um usuário inicial root)
- considera apenas até step < 3
- """
- def get_followers_step(root,step=0):
- if step >= 3:
- return set()
- users = get_followers(root,10)
- save('users.json',users)
- all_users = users
- for user in users:
- all_users += get_followers_step(user,step+1)
- all_users += [root]
- return all_users
- if __name__ == '__main__':
- users = []
- for president in presidents:
- print('current:',president)
- president_user = api.get_user(president)
- users += get_followers_step(president_user)
- save('users.txt',users)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement