Aller à la page 1 2 3
Reprise du message précédent:
7163D -
posté le 05/05/2017 à 03:45:27 (946 messages postés)
| Votez Minimaliste | Donc le data : https://drive.google.com/open?id=0BzvHBM1DucIINnNsekh6X1NwUEk
Le code (python) pour extraire les données à partir du data: (id_ => id dans l'adresse de la page de profil)
(spoiler alert : le code est moche et sans commentaires, si tu as des questions je suis là)
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
| import json
stat = json.loads (open ("Stat Oniro.json").read())
nb_msg = "Nombre de messages"
nb_msg_member = nb_msg + " par membre"
nb_sub = "Nombre de sujets"
nb_sub_member = nb_sub + " par membre"
id_ = "1465"
l = []
sm,ss = 0,0
tsm, tss = 0, 0
for cat in stat["Liste des topics"]:
tsm += stat[cat][nb_msg]
tss += stat[cat][nb_sub]
for d in stat[cat][nb_msg_member]:
if d == id_:
l.append ((cat, stat[cat], stat[cat][nb_msg_member][d], 0 if not d in stat[cat][nb_sub_member] else stat[cat][nb_sub_member][d]))
sm += stat[cat][nb_msg_member][d]
if d in stat[cat][nb_sub_member]:
ss += stat[cat][nb_sub_member][d]
def form (n, f=True):
if n < 1000:
if f:
return str(n)
else:
return "0" * (3 - len(str(n))) + str(n)
else:
return form (n // 1000) + "." + form (n % 1000, False)
def lg (r, s):
r = str(r)
return " " * (s - len (r)) + r
print("Global:")
print (f"{form(ss)} des {form(tss)} sujets du forum ({int(10000*ss/tss)/1000}%)")
print (f"{form(sm)} des {form(tsm)} messages du forum ({int(10000*sm/tsm)/1000}%)")
print("Par rubrique:")
print("%du total | %du membre")
for name, cat, nm, ns in l:
print(name)
if ss > 0:
print ("_____sujets___", f"{lg(int(10000*ns/cat[nb_sub]/100),5)}% | {lg(int(10000*ns/ss)/100,5)}%")
print ("_____messages_", f"{lg(int(10000*nm/cat[nb_msg])/100,5)}% | {lg(int(10000*nm/sm)/100,5)}%") |
Et celui pour "fabriquer" les données:
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
| import requests, re, click, sys, json, os
def nicejson (txt):
ntxt = ""
deep = 0
in_ = False
for l in txt:
ntxt += l
if l == '"':
in_ = not in_
if l == "{":
deep += 1
ntxt += "\n" + "\t" * deep
elif l == "}":
deep -= 1
elif l == "," and not in_:
ntxt += "\n" + "\t" * deep
return ntxt
def l_subject (url, p=1):
if p > 1:
txt = requests.get (url + "&deb=" + str(p)).text
else:
txt = requests.get (url).text
lsubject = []
for t in re.finditer ("<a href=\"(index\.php\?page=forum&id=[0-9]*)\">([^<])*</a>", txt):
_url = t.group(0).split('"')[1]
name = t.group(0).split(">")[1].split("<")[0]
lsubject.append ((_url, name))
if len (lsubject) > 0:
return lsubject + l_subject (url, p+1)
else:
return lsubject
def l_messages (url):
ltxt = [""]
i = 1
while not "Aucun commentaire n'a été posté pour le moment." in ltxt[-1]:
ltxt.append (requests.get (url + "&deb=" + str(i)).text)
i += 1
lmessage = []
for txt in ltxt:
for t in re.finditer ("<A HREF=\"index\.php\?page=membre&id=([0-9]*)\">", txt):
name = t.group(1)
lmessage.append (name)
return (lmessage)
cat = {
"Présentations" : "http://www.rpg-maker.fr/index.php?page=forum&forum=1",
"Jeux Terminés" : "http://www.rpg-maker.fr/index.php?page=forum&forum=36",
"Projets Avancés" : "http://www.rpg-maker.fr/index.php?page=forum&forum=24",
"Nouveaux Projets" : "http://www.rpg-maker.fr/index.php?page=forum&forum=5",
"Généralités" : "http://www.rpg-maker.fr/index.php?page=forum&forum=4",
"Vos créations" : "http://www.rpg-maker.fr/index.php?page=forum&forum=8",
"Entraide" : "http://www.rpg-maker.fr/index.php?page=forum&forum=6",
"Script":"http://www.rpg-maker.fr/index.php?page=forum&forum=1004",
"Concours":"http://www.rpg-maker.fr/index.php?page=forum&forum=18",
"Culture Général":"http://www.rpg-maker.fr/index.php?page=forum&forum=7",
"Jeux commerciaux":"http://www.rpg-maker.fr/index.php?page=forum&forum=9",
"Jeux amateurs":"http://www.rpg-maker.fr/index.php?page=forum&forum=21",
"La taverne":"http://www.rpg-maker.fr/index.php?page=forum&forum=2",
"Débats":"http://www.rpg-maker.fr/index.php?page=forum&forum=19",
"Boîte à idées":"http://www.rpg-maker.fr/index.php?page=forum&forum=3",
"Archives":"http://www.rpg-maker.fr/index.php?page=forum&forum=32"
}
nb_msg = "Nombre de messages"
nb_msg_member = nb_msg + " par membre"
nb_sub = "Nombre de sujets"
nb_sub_member = nb_sub + " par membre"
data = {}
for Name in cat:
try:
open(Name)
continue
except:
pass
print(Name)
data[Name] = {}
print("On recherche tous les sujets...")
lsubject = l_subject(cat[Name])
l = len(lsubject)
data[Name][nb_sub] = l
lmessages = []
print("On compte le nombre de messages dans tous les sujets...")
with click.progressbar(lsubject, file=sys.stderr, show_percent=True, show_pos=True, width=70, bar_template='<%(bar)s> %(info)s', fill_char='—', empty_char=' ') as bar:
for url, _ in bar:
lmessages.append (l_messages ("http://www.rpg-maker.fr/" + url))
print("On compte le ratio de message par membre")
l = sum ([len (lmessage) for lmessage in lmessages])
data[Name][nb_msg] = l
data[Name][nb_msg_member] = {}
data[Name][nb_sub_member] = {}
with click.progressbar(lmessages, file=sys.stderr, show_percent=True, show_pos=True, width=70, bar_template='<%(bar)s> %(info)s', fill_char='—', empty_char=' ') as bar:
for lmessage in bar:
if lmessage == []:
continue
name = lmessage[0]
if not name in data[Name][nb_sub_member]:
data[Name][nb_sub_member][name] = 0
data[Name][nb_sub_member][name] += 1
for name in lmessage:
if not name in data[Name][nb_msg_member]:
data[Name][nb_msg_member][name] = 0
data[Name][nb_msg_member][name] += 1
open (Name, "w").write (nicejson(json.dumps (data[Name])))
data = {"Liste des topics":[k for k in cat.keys()]}
for name in cat:
data[name] = json.loads (open (name).read())
os.remove (name)
open ("Stat Oniro.json", "w").write (nicejson (json.dumps (data))) |
|
Minimaliste, le "." comme signe de ralliement. | Suite du sujet:
Konnie -
posté le 05/05/2017 à 11:19:25 (3982 messages postés)
| | Moi moi moi
|
7163D -
posté le 05/05/2017 à 11:29:25 (946 messages postés)
| Votez Minimaliste | Konnie a dit:
Global:
9 des 6.139 sujets du forum (0.014%)
1.386 des 284.199 messages du forum (0.048%)
Par rubrique:
%du total | %du membre
Présentations
_____sujets___ 0% | 11.11%
_____messages_ 0.44% | 3.75%
Jeux Terminés
_____sujets___ 0% | 0.0%
_____messages_ 0.4% | 4.4%
Projets Avancés
_____sujets___ 0% | 0.0%
_____messages_ 0.44% | 6.42%
Nouveaux Projets
_____sujets___ 0% | 0.0%
_____messages_ 0.37% | 1.8%
Généralités
_____sujets___ 0% | 11.11%
_____messages_ 0.37% | 4.9%
Vos créations
_____sujets___ 0% | 22.22%
_____messages_ 0.74% | 18.1%
Entraide
_____sujets___ 0% | 33.33%
_____messages_ 0.11% | 1.73%
Concours
_____sujets___ 0% | 0.0%
_____messages_ 0.14% | 0.72%
Culture Général
_____sujets___ 0% | 0.0%
_____messages_ 0.83% | 15.22%
Jeux commerciaux
_____sujets___ 1% | 22.22%
_____messages_ 1.08% | 18.47%
La taverne
_____sujets___ 0% | 0.0%
_____messages_ 0.32% | 14.14%
Débats
_____sujets___ 0% | 0.0%
_____messages_ 0.98% | 6.56%
Boîte à idées
_____sujets___ 0% | 0.0%
_____messages_ 0.07% | 0.21%
Archives
_____sujets___ 0% | 0.0%
_____messages_ 0.18% | 3.53% |
|
Minimaliste, le "." comme signe de ralliement. |
Konnie -
posté le 05/05/2017 à 11:52:07 (3982 messages postés)
| | Merci Je pensais être au moins à 98% partout, un peu déçu de ma performance
|
7163D -
posté le 05/05/2017 à 11:58:41 (946 messages postés)
| Votez Minimaliste | Konnie a dit:
Merci Je pensais être au moins à 98% partout, un peu déçu de ma performance
|
Si tu veux je peut truquer le logiciel
|
Minimaliste, le "." comme signe de ralliement. |
winterskill -
posté le 05/05/2017 à 18:59:08 (927 messages postés)
| Empereur des bons gros meuh | ok. merci.
en gros, j'execute le deuxième script depuis mon pc pour construire le fichier JSON?
d'ailleurs, si tu pouvais me donner la structure de ce JSON, ça me ferait gagner pas mal de temps (pou éviter d'avoir à lire entièrement le fichier...)
merci d'avance!
|
"pommes de rainette et pommes d'API, API API Rest-e" | "A combattre sans périls, on triomphe sans gloire" - le cid ; (oui mais on gagne quand même non?...) | à soutenir absolument : https://www.kickstarter.com/projects/1264023666/bushido-the-way-of-men |
7163D -
posté le 05/05/2017 à 19:15:19 (946 messages postés)
| Votez Minimaliste | C'est ça.
1
2
3
4
5
6
7
8
9
10
11
|
{
"Liste des topics":list of str, //nom des topics
list of {nom du topic :
"Nombre de sujets"span style="color:#7cc4f5;"> : int,
"Nombre de messages"span style="color:#7cc4f5;"> : int,
"Nombre de messages par membre":dict of {id : int},
"Nombre de sujets par membre":dict of {id : int}
}
}
|
Ah oui, mon script gère à moitié les erreurs réseaux. S'il plante, il faut le relancer mais il aura sauvegardé le travail déjà fait.
|
Minimaliste, le "." comme signe de ralliement. |
winterskill -
posté le 05/05/2017 à 19:21:01 (927 messages postés)
| Empereur des bons gros meuh | ok merci.
je pense que la page sera prête d'ici demain ou après-demain...
|
"pommes de rainette et pommes d'API, API API Rest-e" | "A combattre sans périls, on triomphe sans gloire" - le cid ; (oui mais on gagne quand même non?...) | à soutenir absolument : https://www.kickstarter.com/projects/1264023666/bushido-the-way-of-men | Aller à la page 1 2 3Index du forum > La Taverne > Statistiques oniromanciennes
|