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

Problème Encodage #13

Closed marsu1983 closed 8 years ago

marsu1983 commented 11 years ago

Bonjour,

Lorsque je lance le script, je récupère bien TID etc et au moment de récupérer les topics, j'ai ce message:

Traceback (most recent call last): File "./forumactif-phpbb.py", line 430, in etapes[i]() File "./forumactif-phpbb.py", line 195, in get_topics result = re.search('function do_pagination_start()[^}]_start = (start > \d+) \? (\d+) : start;[^}]_start = (start - 1) (\d+);[^}]}', d.text()) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 821, in text add_text(tag, no_tail=True) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 816, in add_text add_text(child) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 816, in add_text add_text(child) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 816, in add_text add_text(child) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 816, in add_text add_text(child) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 816, in add_text add_text(child) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 816, in add_text add_text(child) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 816, in add_text add_text(child) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 816, in add_text add_text(child) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 816, in add_text add_text(child) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 816, in add_text add_text(child) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 816, in add_text add_text(child) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 816, in add_text add_text(child) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 816, in add_text add_text(child) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 816, in add_text add_text(child) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 816, in add_text add_text(child) File "/root/Roromis-Lalf-Forumactif-dbf1a8a/pyquery/pyquery.py", line 813, in add_text if tag.text: File "lxml.etree.pyx", line 815, in lxml.etree._Element.text.get (src/lxml/lxml.etree.c:33236) File "apihelpers.pxi", line 616, in lxml.etree._collectText (src/lxml/lxml.etree.c:15062) File "apihelpers.pxi", line 1280, in lxml.etree.funicode (src/lxml/lxml.etree.c:20049) UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 525: invalid continuation byte

Avez vous une idée ? (je pense pour un problème d'encodage au niveau de python mais je suis bien en utf-8, j'ai bien vérifié)

Bonne journée

Roromis commented 11 years ago

J'ai mis à jour pyquery, est-ce-que ça corrige ton erreur?

marsu1983 commented 11 years ago

Merci pour ton retour, j'ai récupéré le zip avec tes modifs sur le query.py et toujours la même erreur:

Traceback (most recent call last): File "./forumactif-phpbb.py", line 433, in etapes[i]() File "./forumactif-phpbb.py", line 198, in get_topics result = re.search('function do_pagination_start()[^}]_start = (start > \d+) \? (\d+) : start;[^}]_start = (start - 1) (\d+);[^}]}', d.text()) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1021, in text add_text(tag, no_tail=True) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1016, in add_text add_text(child) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1016, in add_text add_text(child) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1016, in add_text add_text(child) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1016, in add_text add_text(child) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1016, in add_text add_text(child) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1016, in add_text add_text(child) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1016, in add_text add_text(child) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1016, in add_text add_text(child) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1016, in add_text add_text(child) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1016, in add_text add_text(child) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1016, in add_text add_text(child) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1016, in add_text add_text(child) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1016, in add_text add_text(child) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1016, in add_text add_text(child) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1016, in add_text add_text(child) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 1013, in add_text if tag.text and not isinstance(tag, lxml.etree._Comment): File "lxml.etree.pyx", line 815, in lxml.etree._Element.text.get (src/lxml/lxml.etree.c:33236) File "apihelpers.pxi", line 616, in lxml.etree._collectText (src/lxml/lxml.etree.c:15062) File "apihelpers.pxi", line 1280, in lxml.etree.funicode (src/lxml/lxml.etree.c:20049) UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 525: invalid continuation byte

:(

GauthierPLM commented 11 years ago

Je rencontre également ce problème malheureusement, voici mon log : http://pastebin.com/KZSdJJkQ (déjà donné sur un autre topic, mais je préfère le redonner ici.)

Ah et petite question (pas en rapport avec le sujet), le script permet-il une récupération des MP ?

Roromis commented 11 years ago

Visiblement l'encodage n'est pas le même pour toutes les pages, et il n'est pas toujours précisé dans les headers http... J'ai modifié le code pour le récupérer à chaque requête, en prenant par défaut un encodage latin1. Ça fonctionne chez vous?

GauthierPLM commented 11 years ago

Ce n'est plus la même erreur cette fois-ci, mais il y en a toujours une :(

02/05/2013 00:55:59 - DEBUG : Récupération : sujets du forum 167 02/05/2013 00:55: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:\Users\Gauthier\Desktop\Lalf-Forumactif-master\Lalf-Forumactif-master\forumactif-phpbb.py", line 430, in etapes[i]() File "C:\Users\Gauthier\Desktop\Lalf-Forumactif-master\Lalf-Forumactif-master\forumactif-phpbb.py", line 195, in get_topics d = PyQuery(url=config.rooturl + '/' + forum['type'] + str(forum['id']) + '-a', opener=fa_opener) File "C:\Users\Gauthier\Desktop\Lalf-Forumactif-master\Lalf-Forumactif-master\pyquery\pyquery.py", line 170, in init html = opener(url, _kwargs) File "C:\Users\Gauthier\Desktop\Lalf-Forumactif-master\Lalf-Forumactif-master\forumactif-phpbb.py", line 116, in fa_opener resp = urlopener.open(request) File "C:\Python27\lib\urllib2.py", line 410, in open response = meth(req, response) File "C:\Python27\lib\urllib2.py", line 523, in http_response 'http', request, response, code, msg, hdrs) File "C:\Python27\lib\urllib2.py", line 448, in error return self._call_chain(_args) File "C:\Python27\lib\urllib2.py", line 382, in _call_chain result = func(args) File "C:\Python27\lib\urllib2.py", line 531, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) HTTPError: HTTP Error 503: Service Temporarily Unavailable 02/05/2013 00:55:59 - INFO : Sauvegarde de la progression 02/05/2013 00:56:09 - INFO : Migration Forumactif -> PhpBB : Lalf 0.2.1 02/05/2013 00:56:09 - DEBUG : Importation des bibliothèques 02/05/2013 00:56:10 - DEBUG : Importation de la sauvegarde 02/05/2013 00:56:10 - DEBUG : Création de l'urlopener 02/05/2013 00:56:10 - INFO : Connection au forum 02/05/2013 00:56:11 - DEBUG : Récupération du sid 02/05/2013 00:56:11 - DEBUG : Récupération du tid 02/05/2013 00:56:16 - INFO : Récupération des sujets 02/05/2013 00:56:16 - DEBUG : Récupération : sujets du forum 167 02/05/2013 00:56:17 - 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:\Users\Gauthier\Desktop\Lalf-Forumactif-master\Lalf-Forumactif-master\forumactif-phpbb.py", line 430, in etapes[i]() File "C:\Users\Gauthier\Desktop\Lalf-Forumactif-master\Lalf-Forumactif-master\forumactif-phpbb.py", line 195, in get_topics d = PyQuery(url=config.rooturl + '/' + forum['type'] + str(forum['id']) + '-a', opener=fa_opener) File "C:\Users\Gauthier\Desktop\Lalf-Forumactif-master\Lalf-Forumactif-master\pyquery\pyquery.py", line 170, in init html = opener(url, _kwargs) File "C:\Users\Gauthier\Desktop\Lalf-Forumactif-master\Lalf-Forumactif-master\forumactif-phpbb.py", line 116, in fa_opener resp = urlopener.open(request) File "C:\Python27\lib\urllib2.py", line 410, in open response = meth(req, response) File "C:\Python27\lib\urllib2.py", line 523, in http_response 'http', request, response, code, msg, hdrs) File "C:\Python27\lib\urllib2.py", line 448, in error return self._call_chain(_args) File "C:\Python27\lib\urllib2.py", line 382, in _call_chain result = func(args) File "C:\Python27\lib\urllib2.py", line 531, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) HTTPError: HTTP Error 503: Service Temporarily Unavailable 02/05/2013 00:56:17 - INFO : Sauvegarde de la progression

N'y a t'il pas moyen de fixer cela directement dans le template par hasard ? Pour avoir un seul et même encodage sur le forum ... Car autant dire que c'est idiot le multi-encodage sur un seul site selon-moi ...

marsu1983 commented 11 years ago

Pour ma part, j'ai toujours le même problème:

02/05/2013 08:40:47 - 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 "./forumactif-phpbb.py", line 430, in etapes[i]() File "./forumactif-phpbb.py", line 195, in get_topics d = PyQuery(url=config.rooturl + '/' + forum['type'] + str(forum['id']) + '-a', opener=fa_opener) File "/usr/local/scripts/Lalf-Forumactif-master/pyquery/pyquery.py", line 170, in init html = opener(url, **kwargs) File "./forumactif-phpbb.py", line 121, in fa_opener return unicode(resp.read(), encoding) UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 38193: invalid continuation byte

Par contre je lance depuis une machine Linux, je vais tester depuis un Windows

marsu1983 commented 11 years ago

Je viens de tester sous windows avec une version python en 2.7, j'ai bien le message: HTTPError: HTTP Error 503: Service Temporarily Unavailable

Sous Linux avec une version python en 2.6, j'ai: UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 38193: invalid continuation byte

Sous quelle version travailles tu Roromis ?

Roromis commented 11 years ago

Je pense que les HTTPError: HTTP Error 503: Service Temporarily Unavailable sont dues au grand nombre de connections. Attend un peu avant de relancer le script.

N'y a t'il pas moyen de fixer cela directement dans le template par hasard ?

Je ne pense pas,

Pour ma part, j'ai toujours le même problème:

C'est bizarre... Ça veut dire que l'encodage renseigné dans les headers n'est pas le bon... J'ai encore modifié le code. En cas d'erreur, j'essaye de détecter l'encodage. Ça risque d'être un peu plus long, mais je ne vois pas d'autre méthode.

marsu1983 commented 11 years ago

Après plusieurs relances, effectivement j'ai pu récupérer tous les sujets, cependant l'étape suivante de récupération des users remonte l'erreur: 02/05/2013 13:23:23 - 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\Lalf-Forumactif-master\forumactif-phpbb.py", line 436, in etapes[i]() File "C:\Python27\Lalf-Forumactif-master\forumactif-phpbb.py", line 274, in get_users lastvisit = time.mktime(time.struct_time((int(lastvisit[2]),month[lastvisit[1]],int(lastvisit[0]),0,0,0,0,0,0))) KeyError: u'D\xc3\xa9c'

et une erreur similaire pour récupérer les messages:

2/05/2013 13:26:17 - 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\Lalf-Forumactif-master\forumactif-phpbb.py", line 436, in etapes[i]() File "C:\Python27\Lalf-Forumactif-master\forumactif-phpbb.py", line 371, in get_posts timestamp = time.mktime(datetime.datetime(int(date[3]),month[date[2]],int(date[1]),int(date[5].split(":")[0]),int(date[5].split(":")[1])).timetuple()) KeyError: u'Ao\u0102\u0165'

J'ai regardé j'ai bien les heures au format indiqué (ex: jeu 2 Mai 2013 - 13:29)

GauthierPLM commented 11 years ago

Pour les utilisateurs, j'ai signalé cela ici : https://github.com/Roromis/Lalf-Forumactif/issues/12#issuecomment-17330266 ;)

marsu1983 commented 11 years ago

Erf, à la rigueur les utilisateurs perso je les récupère en copiant/collant depuis la page d'admin puis en bidouillant via Excel puis sautait la fonction get_users dans le script pour qu'il finisse. Le problème était que FA bloquait le script auparavant suite à un nombre de tentative pendant 24heures (c'était ma solution de contournement du coup. Par contre pour la récupération des messages c'est gênant :(

GauthierPLM commented 11 years ago

Le truc, c'est qu'avec près de 200 utilisateurs, ça risque d'être long de faire ça avec Excel ... :(

marsu1983 commented 11 years ago

J'en ai plus de 1500 ... :) je copie colle les pages direct dans excel puis je vire et je modifie ce dont j'ai besoin. le problème des utilisateurs est que la limitation coté ForumActif empêche de tout récupérer ....

GauthierPLM commented 11 years ago

Un script à part pourrait être fait qui viendrait ajouter les utilisateurs à la base. A la place d'une erreur, celui-ci indiquerait à l'utilisateur de relancer dans X temps le script pour pouvoir importer la suite des utilisateurs. Ainsi le script principal serait indépendant de la récupération des utilisateurs et ne gênerait pas l'utilisateur ...

marsu1983 commented 11 years ago

Ouais le truc c'est que le compteur est reset toutes les 24 heures, et tu peux en prendre 21 (au 22eme ca plante, il faut attendre le lendemain pour reprendre) donc pour tes 200 utilisateurs, il te faudrait 10 jours environ :)

GauthierPLM commented 11 years ago

C'est 21 par comptes ou par IP ? Car si c'est ça, je crée plusieurs comptes ...

marsu1983 commented 11 years ago

C'est une bonne question, je n'ai pas fait le test pour voir si c'est par IP ou par User.

Roromis as tu eu du temps pour voir le problème de mktime ?

Traceback (most recent call last): File "C:\Python27\Lalf-Forumactif-master\forumactif-phpbb.py", line 436, in etapesi File "C:\Python27\Lalf-Forumactif-master\forumactif-phpbb.py", line 371, in get_posts timestamp = time.mktime(datetime.datetime(int(date[3]),month[date[2]],int(date[1]),int(date[5].split(":")[0]),int(date[5].split(":")[1])).timetuple()) KeyError: u'Ao\u0102\u0165'

J'ai essayé de modifier la fonction en me disant que le format de date avait été modifié par FA mais sans succès :(

vikbez commented 11 years ago

Fix tout pourri mais fonctionnel: rajouter dans le tableau month (ligne 89) les clefs correspondantes:

pour par exemple pour l'erreur (qui correspond au mois d'aout, vu que commence par Ao)

KeyError: u'Ao\u0102\u0165'

on rajoute une ligne

u'Ao\u0102\u0165' : 8,

j'ai honte

marsu1983 commented 11 years ago

La bidouille passe, peu importe la manière seul le résultat compte ^^, par contre nouvelle erreur:

Traceback (most recent call last): File "/usr/local/scripts/Forumactif/Lalf-OK/forumactif-phpbb.py", line 442, in etapes[i]() File "/usr/local/scripts/Forumactif/Lalf-OK/forumactif-phpbb.py", line 364, in get_posts post = htmltobbcode.htmltobbcode(e("td div.postbody div").eq(0).html(), save.smileys) File "/usr/local/scripts/Forumactif/Lalf-OK/htmltobbcode.py", line 229, in htmltobbcode p.feed(string) File "/usr/lib/python2.6/HTMLParser.py", line 108, in feed self.goahead(0) File "/usr/lib/python2.6/HTMLParser.py", line 148, in goahead k = self.parse_starttag(i) File "/usr/lib/python2.6/HTMLParser.py", line 229, in parse_starttag endpos = self.check_for_whole_start_tag(i) File "/usr/lib/python2.6/HTMLParser.py", line 304, in check_for_whole_start_tag self.error("malformed start tag") File "/usr/lib/python2.6/HTMLParser.py", line 115, in error raise HTMLParseError(message, self.getpos()) HTMLParseError: malformed start tag, at line 1, column 717

:(

ArnoHolo commented 10 years ago

Bonjour tout le monde,

J'ai aussi un problème d'encodage, mais pas exactement le même :

UnicodeDecodeError: 'charmap' codec can't decode byte 0xfb in position 52118: character maps to

(La "position" (ici 52118) n'est pas toujours la même) Comment résoudre ça simplement ?

Pour info, j'ai Python 2.7.3, et cela me le fait sur Linux (Ubuntu 12) ou sur Windows 7.

Roromis commented 8 years ago

Je ferme ce rapport qui traite d'une ancienne version du Lalf.