Guest User

Untitled

a guest
Mar 1st, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.77 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # encoding: utf-8
  3. """
  4. TwitterEgoBuilder.py
  5.  
  6. Created by Drew Conway on 2009-02-23.
  7. Copyright (c) 2009. All rights reserved.
  8.  
  9. The purpose of this script is to generate a
  10. NetworkX DiGraph object based on the snowball
  11. search results of a single starting node to
  12. K snowball rounds.
  13. """
  14.  
  15. import sys
  16. import os
  17. import time
  18. import twitter
  19. import networkx as NX
  20.  
  21.  
  22. def snowball_build(twitter_api,seed_user,rounds):
  23. # Main network building loop
  24. for r in range(0,rounds):
  25. if r<1:
  26. # Create initial egonet
  27. net=create_egonet(twitter_api,seed_user)
  28. if net.size()>99:
  29. print 'Running this script will exceed your Twitter API rate limit. You already have enough friends!'
  30. break
  31. else:
  32. # Now perform snowball
  33. net=snowball_search(net,twitter_api,seed_user,r)
  34. return net
  35.  
  36. def snowball_search(network,twitter_api,seed_user,cur_round):
  37. # Snowball uses create_egonet to generate new structure
  38. users=nodes_at_degree(network,cur_round) # Get all the users at the current round degree
  39. for u in users:
  40. time.sleep(5) # Wait five seconds in between to not hammer Twitter servers (H/T: @amyiris)
  41. search_results=create_egonet(twitter_api,u)
  42. network=NX.compose(network,search_results)
  43. return network
  44.  
  45. def create_egonet(twitter_api,seed_user):
  46. # Function for created a directed ego-net object from inital seed Twitter user
  47. egonet=NX.DiGraph()
  48.  
  49. # Get friend data. NOTE: we are restricted to only adding out-degree
  50. ego_friends=twitter_api.GetFriends(seed_user)
  51.  
  52. # Create ego's edge list
  53. friend_ebunch=[(seed_user,str(u.screen_name)) for u in ego_friends]
  54.  
  55. # Add edges
  56. egonet.add_edges_from(friend_ebunch)
  57.  
  58. return egonet
  59.  
  60. def nodes_at_degree(network,degree):
  61. # Get nodes to perform round k search on
  62. d=network.degree(with_labels=True)
  63. d=d.items()
  64. return [(a) for (a,b) in d if b==degree]
  65.  
  66. def main():
  67. # Create an authenticated Api object in order to download user data
  68. api_user='your_twitter_id'
  69. api_pswd='your_twitter_password'
  70. api=twitter.Api(username=api_user,password=api_pswd)
  71.  
  72. # The seed user to be analyzed
  73. seed='your_twitter_id'
  74.  
  75. # Now create network
  76. k=2 # Number of snowball rounds (WARNING: k>2 will most certainly exceed the Twitter API rate limit)
  77. twitter_net=snowball_build(api,seed,k)
  78.  
  79. #Store network data as plain text file to be analyzed later
  80. twitter_net._name=seed+'_k'+str(k) # Name the network after the seed and the number of snowball rounds
  81. NX.write_edgelist(twitter_net,path='your_net.edgelist',delimiter='\t')
  82.  
  83.  
  84. if __name__ == '__main__':
  85. main()
Add Comment
Please, Sign In to add comment