Roromis / Lalf-Forumactif

Script permettant de convertir un forum hébergé par Forumactif en forum phpbb.
https://roromis.github.io/Lalf-Forumactif/
GNU General Public License v3.0
21 stars 13 forks source link

Récupération des membres échoue au 21ème membre #7

Closed sebthevenon closed 13 years ago

sebthevenon commented 13 years ago

Bonjour, J'essaye de faire un Backup de mon forum forumactif:

Ca se passe très bien jusqu'au moment de sauvegarder les membres. Je sauvegarde les 20 premiers membres, puis au moment de tenter la sauvegarde du 21ème membre j'ai une erreur. J'ai relancé plusieurs fois, idem à chaque fois au même endroit.

J'ai aussi remarqué que le 21ème membre se trouve à la seconde page dans la gestion des utilisateurs dans le panneau d'administration, y a t-il un lien ? Il y a une différence de "&start=20" entre les liens de ces 2 pages, ça joue ou pas ?

Voici l'erreur que j'obtiens:

31/08/2011 22:05:02 - INFO : Migration Forumactif -> PhpBB : Lalf 0.2.1 31/08/2011 22:05:02 - DEBUG : Importation des bibliothèques 31/08/2011 22:05:02 - DEBUG : Importation de la sauvegarde 31/08/2011 22:05:02 - DEBUG : Création de l'urlopener 31/08/2011 22:05:02 - INFO : Connection au forum 31/08/2011 22:05:04 - DEBUG : Récupération du sid 31/08/2011 22:05:04 - DEBUG : Récupération du tid 31/08/2011 22:05:07 - INFO : Récupération des membres 31/08/2011 22:05:08 - DEBUG : Récupération : membre 1 31/08/2011 22:05:08 - DEBUG : Récupération : membre 2 31/08/2011 22:05:08 - DEBUG : Récupération : membre 3 31/08/2011 22:05:08 - DEBUG : Récupération : membre 4 31/08/2011 22:05:08 - DEBUG : Récupération : membre 5 31/08/2011 22:05:08 - DEBUG : Récupération : membre 6 31/08/2011 22:05:08 - DEBUG : Récupération : membre 7 31/08/2011 22:05:08 - DEBUG : Récupération : membre 8 31/08/2011 22:05:08 - DEBUG : Récupération : membre 9 31/08/2011 22:05:08 - DEBUG : Récupération : membre 10 31/08/2011 22:05:08 - DEBUG : Récupération : membre 11 31/08/2011 22:05:08 - DEBUG : Récupération : membre 12 31/08/2011 22:05:08 - DEBUG : Récupération : membre 13 31/08/2011 22:05:08 - DEBUG : Récupération : membre 14 31/08/2011 22:05:08 - DEBUG : Récupération : membre 15 31/08/2011 22:05:08 - DEBUG : Récupération : membre 16 31/08/2011 22:05:08 - DEBUG : Récupération : membre 17 31/08/2011 22:05:08 - DEBUG : Récupération : membre 18 31/08/2011 22:05:08 - DEBUG : Récupération : membre 19 31/08/2011 22:05:08 - DEBUG : Récupération : membre 20 31/08/2011 22:05:10 - ERROR : Une erreur s'est produite. Essayez de relancer le script. Pour plus d'informations, consultez le fichier debug.log. Traceback (most recent call last): File "C:\FA\forumactif-phpbb.py", line 427, in etapes[i]() File "C:\FA\forumactif-phpbb.py", line 254, in get_users id = int(re.search("&u=(\d+)&", e("td a").eq(0).attr("href")).group(1)) AttributeError: 'NoneType' object has no attribute 'group' 31/08/2011 22:05:10 - INFO : Sauvegarde de la progression

Qui saurait m'aider ?

Merci d'avance, Sébastien

Roromis commented 13 years ago

Dans le fichier forumactif-phpbb.py, à la ligne 254, remplace

            id = int(re.search("&u=(\d+)&", e("td a").eq(0).attr("href")).group(1))
            try:
                id = int(re.search("&u=(\d+)&", e("td a").eq(0).attr("href")).group(1))
            except:
                logging.warning("Impossible de récupérer l'id du membre :\n" + e.html())
                raise Exception

Et envoie moi le contenu du fichier debug.log après avoir vérifié qu'il ne contient pas de données confidentielles.

sebthevenon commented 13 years ago

Le script ne démarre plus et j'obtiens une erreur ligne 255 id = int(re.search("&u=(\d+)&", e("td a").eq(0).attr("href")).group(1)) ^ IndentationError: Expected an indented block

Avant que vous me répondiez, le script avais pu redémarrer sans rien changer, en insistant sur la relance du script jusqu'a:

31/08/2011 22:59:58 - DEBUG : Récupération : membre 6057 31/08/2011 22:59:58 - DEBUG : Récupération : membre 6058 31/08/2011 22:59:58 - DEBUG : Récupération : membre 6059 31/08/2011 22:59:59 - ERROR : Une erreur s'est produite. Essayez de relancer le script. Pour plus d'informations, consultez le fichier debug.log. Traceback (most recent call last): File "C:\FA2\forumactif-phpbb.py", line 427, in etapes[i]() File "C:\FA2\forumactif-phpbb.py", line 254, in get_users id = int(re.search("&u=(\d+)&", e("td a").eq(0).attr("href")).group(1)) File "C:\Python27\lib\re.py", line 142, in search return _compile(pattern, flags).search(string) TypeError: expected string or buffer 31/08/2011 22:59:59 - INFO : Sauvegarde de la progression

Maintenant lorsque je relance il s'arrête toujours au 20ème membre:

31/08/2011 23:46:56 - DEBUG : Récupération : membre 19 31/08/2011 23:46:56 - DEBUG : Récupération : membre 20 31/08/2011 23:46:57 - ERROR : Une erreur s'est produite. Essayez de relancer le script. Pour plus d'informations, consultez le fichier debug.log. Traceback (most recent call last): File "C:\FA2\forumactif-phpbb.py", line 427, in etapes[i]() File "C:\FA2\forumactif-phpbb.py", line 254, in get_users id = int(re.search("&u=(\d+)&", e("td a").eq(0).attr("href")).group(1)) File "C:\Python27\lib\re.py", line 142, in search return _compile(pattern, flags).search(string) TypeError: expected string or buffer 31/08/2011 23:46:57 - INFO : Sauvegarde de la progression

Roromis commented 13 years ago

Il doit y avoir deux tabulations devant les lignes try: et except: et trois devant les autres.

sebthevenon commented 13 years ago

OK désolé je ne savais pas que les tabulations comptaient.

J'obtiens donc le code suivant:

for page in range(0,pages):
    if page >= 1:
        d = PyQuery(url=config.rooturl + '/admin/index.forum?part=users_groups&sub=users&extended_admin=1&start=' + str(page*usersperpages) + '&' + tid, opener=fa_opener)

    for i in d('tbody tr'):
        e = PyQuery(i)
    try:
        id = int(re.search("&u=(\d+)&", e("td a").eq(0).attr("href")).group(1))
    except:
        logging.warning("Impossible de récupérer l'id du membre :\n" + e.html())
        raise Exception
        logging.debug('Récupération : membre %d', id)

        date = e("td").eq(3).text().split(" ")
        date = time.mktime(time.struct_time((int(date[2]),month[date[1]],int(date[0]),0,0,0,0,0,0)))

        lastvisit = e("td").eq(4).text()

        if lastvisit != "":
            lastvisit = lastvisit.split(" ")
            lastvisit = time.mktime(time.struct_time((int(lastvisit[2]),month[lastvisit[1]],int(lastvisit[0]),0,0,0,0,0,0)))
        else:
            lastvisit = 0

        save.users.append({'id': id, 'newid': n, 'name': e("td a").eq(0).text(), 'mail': e("td a").eq(1).text(), 'posts': int(e("td").eq(2).text()), 'date': int(date), 'lastvisit': int(lastvisit)})

        n += 1
        progress.update(n-2)

progress.end()

Au lancement du script j'obtiens l'erreur ligne 255 id = int(re.search("&u=(\d+)&", e("td a").eq(0).attr("href")).group(1)) ^ IndentationError: Unindent does not match any outer indentation level

sebthevenon commented 13 years ago

Je viens de jouer avec les tabulations, en fait c'est 3 et 4 tabulations. Le script à redémarré, je tiens au courant de la suite.

    for i in d('tbody tr'):
        e = PyQuery(i)
        try:
            id = int(re.search("&u=(\d+)&", e("td a").eq(0).attr("href")).group(1))
        except:
            logging.warning("Impossible de récupérer l'id du membre :\n" + e.html())
            raise Exception
        logging.debug('Récupération : membre %d', id)
Roromis commented 13 years ago

Remplace le fichier forumactif-phpbb.py par celui-là: https://raw.github.com/gist/1186238/fe006388bd9fcda9f96d0bd78a05cdbad4767375/forumactif-phpbb.py

sebthevenon commented 13 years ago

Avec ce nouveau fichier, j'ai bien effectué la sauvegarde des forums et des sujets, puis au moment de sauvegarder les membres:

01/09/2011 16:39:29 - INFO : Migration Forumactif -> PhpBB : Lalf 0.2.1 01/09/2011 16:39:29 - DEBUG : Importation des bibliothèques 01/09/2011 16:39:29 - DEBUG : Importation de la sauvegarde 01/09/2011 16:39:30 - DEBUG : Création de l'urlopener 01/09/2011 16:39:30 - INFO : Connection au forum 01/09/2011 16:39:31 - DEBUG : Récupération du sid 01/09/2011 16:39:31 - DEBUG : Récupération du tid 01/09/2011 16:39:35 - INFO : Récupération des membres 01/09/2011 16:39:36 - DEBUG : Récupération : membre 1 01/09/2011 16:39:36 - DEBUG : Récupération : membre 2 01/09/2011 16:39:36 - DEBUG : Récupération : membre 3 01/09/2011 16:39:36 - DEBUG : Récupération : membre 4 01/09/2011 16:39:36 - DEBUG : Récupération : membre 5 01/09/2011 16:39:36 - DEBUG : Récupération : membre 6 01/09/2011 16:39:36 - DEBUG : Récupération : membre 7 01/09/2011 16:39:36 - DEBUG : Récupération : membre 8 01/09/2011 16:39:36 - DEBUG : Récupération : membre 9 01/09/2011 16:39:36 - DEBUG : Récupération : membre 10 01/09/2011 16:39:36 - DEBUG : Récupération : membre 11 01/09/2011 16:39:36 - DEBUG : Récupération : membre 12 01/09/2011 16:39:36 - DEBUG : Récupération : membre 13 01/09/2011 16:39:36 - DEBUG : Récupération : membre 14 01/09/2011 16:39:36 - DEBUG : Récupération : membre 15 01/09/2011 16:39:36 - DEBUG : Récupération : membre 16 01/09/2011 16:39:36 - DEBUG : Récupération : membre 17 01/09/2011 16:39:36 - DEBUG : Récupération : membre 18 01/09/2011 16:39:36 - DEBUG : Récupération : membre 19 01/09/2011 16:39:36 - DEBUG : Récupération : membre 20 01/09/2011 16:39:38 - ERROR : Une erreur s'est produite. Essayez de relancer le script. Pour plus d'informations, consultez le fichier debug.log. Traceback (most recent call last): File "C:\FA2\forumactif-phpbb.py", line 430, in etapes[i]() File "C:\FA2\forumactif-phpbb.py", line 257, in get_users logging.warning("Impossible de récupérer l'id du membre :\n" + e.html()) UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 15: ordinal not in range(128) 01/09/2011 16:39:38 - INFO : Sauvegarde de la progression

sebthevenon commented 13 years ago

Ben mince, je viens de remarquer quelque chose: Si je vais dans Gestion des utilisateurs, je vois les 20 premiers membres, mais lorsque je clique sur page 2, je me retrouve à l'accueil de mon panneau d'administration, idem pour les autres pages de la liste des membres. Ca fonctionnait très bien avant.

Forumactif aurait pu détecter le script ?

sebthevenon commented 13 years ago

Je dispose d'un autre forum Forumactif, dans le PA j'ai accès à toutes les pages de la liste des utilisateurs. Je viens de lancer le script, il a réussi très rapidement à exporter la totalité des forums, sujets, membres et smileys.

Le problème viendrais donc de mon PA et non du script ?

Est-ce un problème connu cette impossibilité d'accéder aux pages de la liste des utilisateurs ? Que pourrais-je tenter ou vous communiquer pour trouver la provenance de ce blocage ?

sebthevenon commented 13 years ago

Ce matin j'ai à nouveau accès a ma liste des utilisateurs, c'est donc bien une protection par FA.

Le script échoue toujours après le 20ème membre, on en reviens donc au problème d'origine.

sebthevenon commented 13 years ago

Une belle avancée, j'ai remis le fichier original sans modif, supprimé tous les .pyc, tout relancé, et là j'ai déjà été bien plus loin:

02/09/2011 14:57:37 - DEBUG : Récupération : membre 6056 02/09/2011 14:57:37 - DEBUG : Récupération : membre 6057 02/09/2011 14:57:37 - DEBUG : Récupération : membre 6058 02/09/2011 14:57:37 - DEBUG : Récupération : membre 6059 02/09/2011 14:57:39 - ERROR : Une erreur s'est produite. Essayez de relancer le script. Pour plus d'informations, consultez le fichier debug.log. Traceback (most recent call last): File "C:\Python27\FA2\forumactif-phpbb.py", line 427, in etapes[i]() File "C:\Python27\FA2\forumactif-phpbb.py", line 254, in get_users id = int(re.search("&u=(\d+)&", e("td a").eq(0).attr("href")).group(1)) File "C:\Python27\lib\re.py", line 142, in search return _compile(pattern, flags).search(string) TypeError: expected string or buffer 02/09/2011 14:57:39 - INFO : Sauvegarde de la progression

Maintenant chaque fois que je relance, je bloque à nouveau à chaque fois au 21ème membre...

Ci dessus, dans un de le 3ème message, en date du 31/08/2011 à 22:59:58, le script c'était déjà arrêté au même numéro de membre. Une limitation quelque part ? J'ai pas loin de 9000 membres.

Si je retourne dans mon PA, je suis à nouveau bloqué et n'ai plus accès à ma liste des utilisateurs. Je pense qu'au vu du nombre de membres, je suis victime d'un blocage par FA.

Roromis commented 13 years ago

Pourrais tu remplacer la ligne 254 par:

            try:
                id = int(re.search("&u=(\d+)&", e("td a").eq(0).attr("href")).group(1))
            except:
                logging.warning("Impossible de récupérer l'id du membre :\n" + e.html().encode("utf-8"))
                raise Exception

Et relancer le script. Envoie-moi le contenu du fichier debug.log (si ça bloque au 21ème membre et que le message d'erreur ressemble à: 01/09/2011 16:39:38 - WARNING : Impossible de récupérer l'id du membre :, ce n'est pas la peine de me l'envoyer, patiente un peu et relance le script jusqu'à ce que ça fonctionne).

sebthevenon commented 13 years ago

Bonjour, et merci pour la modification,

J'ai relancé le script et j'obtiens ceci:

03/09/2011 16:26:40 - INFO : Migration Forumactif -> PhpBB : Lalf 0.2.1 03/09/2011 16:26:40 - DEBUG : Importation des bibliothèques 03/09/2011 16:26:40 - DEBUG : Importation de la sauvegarde 03/09/2011 16:26:42 - DEBUG : Création de l'urlopener 03/09/2011 16:26:42 - INFO : Connection au forum 03/09/2011 16:26:43 - DEBUG : Récupération du sid 03/09/2011 16:26:43 - DEBUG : Récupération du tid 03/09/2011 16:26:46 - INFO : Récupération des membres 03/09/2011 16:26:48 - DEBUG : Recuperation membre 1 03/09/2011 16:26:48 - DEBUG : Recuperation membre 2 03/09/2011 16:26:48 - DEBUG : Recuperation membre 3 03/09/2011 16:26:48 - DEBUG : Recuperation membre 4 03/09/2011 16:26:48 - DEBUG : Recuperation membre 5 03/09/2011 16:26:48 - DEBUG : Recuperation membre 6 03/09/2011 16:26:48 - DEBUG : Recuperation membre 7 03/09/2011 16:26:48 - DEBUG : Recuperation membre 8 03/09/2011 16:26:48 - DEBUG : Recuperation membre 9 03/09/2011 16:26:48 - DEBUG : Recuperation membre 10 03/09/2011 16:26:48 - DEBUG : Recuperation membre 11 03/09/2011 16:26:48 - DEBUG : Recuperation membre 12 03/09/2011 16:26:48 - DEBUG : Recuperation membre 13 03/09/2011 16:26:48 - DEBUG : Recuperation membre 14 03/09/2011 16:26:48 - DEBUG : Recuperation membre 15 03/09/2011 16:26:48 - DEBUG : Recuperation membre 16 03/09/2011 16:26:48 - DEBUG : Recuperation membre 17 03/09/2011 16:26:48 - DEBUG : Recuperation membre 18 03/09/2011 16:26:48 - DEBUG : Recuperation membre 19 03/09/2011 16:26:48 - DEBUG : Recuperation membre 20 03/09/2011 16:26:49 - WARNING : Impossible de récupérer l'id du membre :

Messages :202826Messages par jour :143.36

03/09/2011 16:26:49 - ERROR : Une erreur s'est produite. Essayez de relancer le script. Pour plus d'informations, consultez le fichier debug.log. Traceback (most recent call last): File "C:\Python27\FA2\forumactif-phpbb.py", line 431, in etapes[i]() File "C:\Python27\FA2\forumactif-phpbb.py", line 258, in get_users raise Exception Exception 03/09/2011 16:26:49 - INFO : Sauvegarde de la progression

Roromis commented 13 years ago

Ok, c'est normal. Essaye de relancer le script pour avoir plus de détails sur l'erreur du membre 6059.

sebthevenon commented 13 years ago

Pour le moment je bloque toujours au 20ème membre à la même erreur que ci-dessus. J'ai comme l'impression qu'il y a un blocage de 24h entre 2 "attaques". Je retenterai demain.

Juste une question, si chaque fois que je bug au 6059ème membre et que FA me bloque suivant un nombre de tentatives, après lesquelles je n'ai plus accès à la liste de mes utilisateurs et reviens chaque fois en page d'accueil du PA, je n'arriverai donc jamais à aller plus loin avec le script si ?

sebthevenon commented 13 years ago

Depuis hier j'essaye de relancer en vain... visiblement chaque jour peu après 17h je peux relancer et j'arrive à dépasser le 20ème membre. Je viens donc de relancer, et toujours pareil, blocage au 6059ème. Une fois cette erreur obtenue je ne peux plus aller consulter la liste des utilisateurs dans mon PA.

04/09/2011 17:26:06 - DEBUG : Recuperation membre 6057 04/09/2011 17:26:06 - DEBUG : Recuperation membre 6058 04/09/2011 17:26:06 - DEBUG : Recuperation membre 6059 04/09/2011 17:26:08 - WARNING : Impossible de récupérer l'id du membre :

Messages :202996Messages par jour :143.38

04/09/2011 17:26:08 - ERROR : Une erreur s'est produite. Essayez de relancer le script. Pour plus d'informations, consultez le fichier debug.log. Traceback (most recent call last): File "C:\Python27\FA2\forumactif-phpbb.py", line 431, in etapes[i]() File "C:\Python27\FA2\forumactif-phpbb.py", line 258, in get_users raise Exception Exception 04/09/2011 17:26:08 - INFO : Sauvegarde de la progression

Il existe donc bel et bien un blocage par Forumactif, et ne pourrai jamais dépasser 6059 membres.

Est-ce qu'une modification de script pourrais me permettre d'aller reprendre au 6060ème le lendemain histoire de sauvegarder en 2 fois ?

J'imaginais un script qui sauvegarde les 5000 premiers et crée un fichier sql, puis le lendemain un second script commence à 5000 pour prendre les 5000 suivants etc... avec à chaque fois un fichier sql. En important ensuite ces fichiers sql dans PhpBB 3 on retrouverais la totalité des membres dans le bon ordre puisque le numéro d'ID est sauvegardé.

sebthevenon commented 13 years ago

Script relancé une fois les 24 heures de blocage passées, idem que ci-dessus, blocage à 6059 et impossible de relancer le script, blocage au 20ème membre.

sebthevenon commented 13 years ago

Pour me débloquer de la situation et pouvoir avancer dans la sauvegarde de mon forum, j'ai pris la dure décision de supprimer tous les membres qui ne s'étaient pas connectés depuis plus de 630 jours. J'ai ainsi pu supprimer 2400 et quelques membres et donc revenir sous la barre des 6059, cette fois à 6030. J'ai relancé le script et il m'a donc sauvegardé la totalité des membres. Je poursuit avec la sauvegarde des messages et sujets, lancé depuis ce matin 8h, toujours en cours mais ça se passe très bien.