Skip to content

Instantly share code, notes, and snippets.

@pr0nstar
Created September 16, 2020 03:30
Show Gist options
  • Select an option

  • Save pr0nstar/e698c878e253dd64d9f7f8b6dda76d3f to your computer and use it in GitHub Desktop.

Select an option

Save pr0nstar/e698c878e253dd64d9f7f8b6dda76d3f to your computer and use it in GitHub Desktop.
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