Esempio n. 1
0
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)
Esempio n. 3
0
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")
Esempio n. 5
0
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)
Esempio n. 6
0
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