def analyse_and_add_instance(inst): global instance chem_inst = chem_dossier + inst a = open(chem_inst, "r") tab_acct = [] for i in loadnathmasto.json_parse(a): try: g = i['id'] gg = i['account']['acct'] #print("id = ",g) #print("acct = ",gg) tab_acct.append(gg) except: error = True #print("error") #print("tab =",tab_acct) for t in tab_acct: tt = t.split("@") #print(tt) if len(tt) == 2: instance.append(tt[1]) else: error = True #print(t,": Ne contient pas le nom de l'instance") #les toots qui sont téléchargés et qui sont sur la meme instance qui est en train de se télécharger ne contiennent pas le nom de l'instance dans leur ['account]['acct'] print()
def verifie_toot0(inst): print("Vérifie le téléchargement de l'instance " + inst) hinst = "https://" + inst chem_inst = chem_dossier + inst a = open(chem_inst, "r") tab_acct = [] for i in loadnathmasto.json_parse(a): try: o = i["id"] o = int(o) except: break print("o =", o) if o != 0: print("il n'y a pas de toot 0 dans l'instance", inst)
def maj(inst): #verif_fichier(inst) print("regarde si des toots ont étés ajoutés a l'instance " + inst) hinst = "https://" + inst chem_inst = chem_dossier + inst a = open(chem_inst, "r") n = loadnathmasto.queryInstance(hinst) for i in loadnathmasto.json_parse(a): try: oo = int(i["id"]) except: print("error") break try: print(oo) except: print("le nombre de toots ne peut pas etre trouvé") oo = int(n) if int(oo) != int(n): print("le fichier " + inst + " a des toots qui ont étés ajoutés") print("mise à jour du fichier") id0 = int(n) fich = chem_dossier + inst with open(fich, "r") as jkl: old_content = jkl.read() new_content = "" print("nombre total de toots ", id0, "\nnombre de toots du fichier", oo) while id0 > oo: time.sleep(0.1) cmd = hinst + '/api/v1/statuses/' + str(id0) response = requests.get(cmd) if response.status_code != 404: o = response.text new_content += o else: o = '{"id":"' + str(id0) + '"}' new_content += o id0 -= 1 h, m, s = calc_temps_restant(int(id0 - oo)) print("toots restants sur l'instance", inst, " =" + str(int(id0) - int(oo)), " temps restant estimé =", h, "heures", m, "minutes", s, "secondes") with codecs.open(fich, "w", "utf-8") as f: f.write(new_content + old_content) else: print("l'instance", inst, "est à jour")
def verif_doubles_toots(inst): ids=[] chem_inst=chem_dossier+inst a=open(chem_inst,"r") tab_acct=[] for i in loadnathmasto.json_parse(a): try: g=i['id'] ids.append(g) except: print("error") print("len(ids) =",len(ids)) print("len(set(ids)) =",len(set(ids))) if len(ids) == len(set(ids)): print("Il n'y a pas de doublons") else: print("il y a peut-etre des doublons")
def verifie_telechargement(inst): verif_fichier(inst) print("Vérifie le téléchargement de l'instance " + inst) hinst = "https://" + inst chem_inst = chem_dossier + inst a = open(chem_inst, "r") tab_acct = [] o = 0 for i in loadnathmasto.json_parse(a): try: o = i["id"] o = int(o) except: break if o > 0: print("le fichier " + inst + " a mal été téléchargé") print("reprise du téléchargement du fichier") id0 = o - 1 fich = chem_dossier + inst with codecs.open(fich, "a", "utf-8") as f: while id0 > -1: time.sleep(0.1) cmd = hinst + '/api/v1/statuses/' + str(id0) response = requests.get(cmd) if response.status_code != 404: o = response.text f.write(o) else: o = '{"id":"' + str(id0) + '"}' f.write(o) id0 -= 1 h, m, s = calc_temps_restant(int(id0)) print("INSTANCE", inst, "toots restants =" + str(id0), " temps restant estimé =", h, "heures", m, "minutes", s, "secondes") analyse_and_add_instance(inst)
def calc_stats(inst): toot_id = [] toot_language = [] toot_account = [] toot_date = [] chem_inst = chem_dossier + inst a = open(chem_inst, "r") tab_acct = [] for i in loadnathmasto.json_parse(a): try: ac = i['account']['acct'] # si ac contient un @, alors le user n'appartient pas a cette instance: il ne faut donc pas le compter dans les stats de l'instance # il ne faut comptabiliser QUE les toots des users sans @ if "@" not in ac: #print(ac) accc = ac toot_account.append(accc) toot_language.append(i['language']) dat = i['created_at'] dat = dateutil.parser.parse(dat) toot_date.append(dat.year * 100 + dat.month) toot_id.append(i['id']) except: #print("error : le programme n'arrive pas récuperer la date et le language du toot, il est peut-etre abimé") error = True assert len(toot_language) == len(toot_date) assert len(toot_language) == len(toot_account) assert len(toot_language) == len(toot_id) # Afficher le pourcentage des 5 langues les plus utilisees dans l'instance coLang = Counter(toot_language) tot_lang = 0 for t in coLang.values(): tot_lang += t langs = coLang.most_common(5) langg = [] for n in langs: langg.append([n[0], n[1]]) for l in langg: pc = int(l[1]) / tot_lang * 100 l.append(pc) lpu = 0 # TODO: afficher nb de toots dans l'instance pour les 6 derniers mois (en texte) coDate = Counter(toot_date) dates = OrderedDict(sorted(coDate.items())) ddates = [] for a in dates.keys(): ddates.append([a, dates[a]]) if len(ddates) < 6: ddates = ddates else: dddates = [] for x in range(6): dddates.append(ddates[x]) ddates = dddates i = "\nINSTANCE : " + inst + " / " m = "\nles 6 mois (ou moin) les plus récents = " for mm in ddates: m += "le " + str(mm[0]) + " il y a eu " + str(mm[1]) + " toots ," m = m[0:len(m) - 1] + " / " l = "\nles 5 langues les plus parlées = " for ll in langg: if ll[0] == None: ll[0] = "?" lll = Decimal(ll[2]) l += "le " + ll[0] + " avec " + str( ll[1]) + " utilisations soit " + str( lll.quantize(Decimal('.01'), rounding=ROUND_HALF_UP)) + "% ," l = l[0:len(l) - 1] #print(i) #print(m) #print(l) try: ra = i + m + l #print(ra) if len(ddates) > 0 and ra != None: return ra except: error = True