summaryrefslogtreecommitdiff
path: root/diagram.py
blob: ecef7a6513f9fb567da1df68302117049bf6d6cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/usr/bin/env python3
#-*- coding:utf-8 -*-

import networkx as nx
from html.parser import HTMLParser
import re, os

G = nx.Graph()
node_colors = [] 

# gescrapte Daten laden
f = open("data/users.txt", encoding = "utf-8")
addresses = eval(f.read())
f.close()

class User(object):
    def __init__(self, name, firstname, lastname, mail, nick, provider):
        self.name = name
        self.firstname = firstname
        self.lastname = lastname
        self.mail = mail
        self.nick = nick
        self.provider = provider

users = []

# Adressen durchgehen und Edges / Nodes erstellen
for user in addresses:
    if len(addresses[user]) < 1:
        continue

    firstname, lastname = re.match("(.+) ([^ ]+)", user).groups()
    nick, provider = re.match("(.*?)@([^@]+)", addresses[user]).groups()

    users.append(User(user, firstname, lastname, addresses[user], nick, provider))

for user in users:
    G.add_node(user.name)

    # nicht weiter verarbeiten
    users.remove(user)

    userswithprovider = len([i for i in users if i.provider == user.provider])
    if userswithprovider > 0:
        G.add_node(user.provider)
        G.add_edge(user.name, user.provider)

    brothersisters = [i for i in users if i.lastname == user.lastname]
    if len(brothersisters) > 0:
        for brothersister in brothersisters:
            G.add_edge(user.name, brothersister.name)

    samenicks = [i for i in users if i.nick == user.nick]
    if len(samenicks) > 0:
        for samenick in samenicks:
            G.add_edge(user.name, samenick.name)

nx.write_gml(G, 'data/graph.gml')

# Encoding fixen
p = HTMLParser()
f = open('data/graph.gml', 'r')
s = p.unescape(f.read())
f.close()
os.remove('data/graph.gml')
f = open('data/graph.gml', 'w')
f.write(s)
f.close()