Created
September 16, 2020 03:30
-
-
Save pr0nstar/e698c878e253dd64d9f7f8b6dda76d3f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import sys | |
| import io | |
| import os | |
| import glob | |
| import time | |
| import json | |
| import networkx as nx | |
| from datetime import datetime as dt | |
| def parse_date(date): | |
| return time.mktime( | |
| dt.strptime(date, '%Y-%m-%d %H:%M:%S').timetuple() | |
| ) | |
| if __name__ == '__main__': | |
| if len(sys.argv) < 2: | |
| exit('faltan parametros') | |
| file_names = glob.glob(sys.argv[1], recursive=True) | |
| users = [] | |
| timeline = {} | |
| for file_name in file_names: | |
| with io.open(file_name, encoding='utf-8') as f: | |
| users.append(os.path.basename(file_name).rsplit('.', 1)[0].lower()) | |
| for tweet in f: | |
| tweet = json.loads(tweet) | |
| timeline[tweet['retweet_id']] = { | |
| 'created_at': parse_date(tweet['retweet_date']), | |
| 'username': tweet['username'].lower(), | |
| 'user_rt': tweet['user_rt'].lower() | |
| } | |
| g = nx.DiGraph() | |
| _ = [g.add_node(_, base=True) for _ in users] | |
| timeline = sorted(timeline.values(), key=lambda _: _['created_at']) | |
| for tweet in timeline: | |
| username = tweet['username'] | |
| retwitter = tweet['user_rt'] | |
| if len(retwitter) < 4: | |
| continue | |
| edge = g.edges.get((retwitter, username), { | |
| 'weight': 0, 'first_contact': 2000000000, 'last_contact': 0 | |
| }) | |
| edge['weight'] = edge['weight'] + 1 | |
| created_at = int(tweet['created_at']) | |
| if edge['first_contact'] > created_at: | |
| edge['first_contact'] = created_at | |
| if edge['last_contact'] < created_at: | |
| edge['last_contact'] = created_at | |
| g.add_edge(retwitter, username, **edge) | |
| del(timeline) | |
| nx.write_gexf(g, '/tmp/retweet.gexf') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment