Utilisation html_to_text

Document Actions
Réponses: 2   Visites: 0
Up one level
Vous devez être un membre enregistré pour contribuer sur ce forum. Inscrivez-vous maintenant

Utilisation html_to_text

Posté par jinpol le 24/02/2010 14:36
Salut tout le monde,

j'ai un problème quand je veux utiliser html_to_text de portal_transforms.
En fait, je récupère un texte html, et je voudrais enlever toutes les balises de celui-ci afin d'en récupérer le texte brut.
J'ai vu que dans la partie portal_transforms de ma ZMI, il y a une fonction qui s'appelle html_to_text.

J'ai donc fait un petit script python dans lequel je fais :

from Products.CMFCore.utils import getToolByName
pt = getToolByName(context, 'portal_transforms')
data = pt.html_to_text(val)

return data

Et quand j'appelle cette fonction via une page de mon site, j'ai le message d'erreur suivant :

* Expression: <PythonExpr context.html2text('<html><p>coucou</p></html>')>
Names:

{'container': <PloneSite at /ascofi>,
'context': <ATFolder at /ascofi/actualites-et-agenda/news>,
'default': <object object at 0x007BA528>,
'here': <ATFolder at /ascofi/actualites-et-agenda/news>,
'loop': {u'item': <Products.PageTemplates.Expressions.PathIterator object at 0x11BEBFF0>},
'nothing': None,
'options': {'args': ()},
'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0x11BA6490>,
'request': <HTTPRequest, URL=http://10.27.0.130:13080/ascofi/actualites-et-agenda/news/folder_summary_news>,
'root': <Application at >,
'template': <ZopePageTemplate at /ascofi/folder_summary_news used for /ascofi/actualites-et-agenda/news>,
'traverse_subpath':,
'user': <PropertiedUser 'admin'>}

* Module Products.PageTemplates.ZRPythonExpr, line 49, in __call__
__traceback_info__: context.html2text('<html><p>coucou</p></html>')
* Module PythonExpr, line 1, in <expression>
* Module Shared.DC.Scripts.Bindings, line 313, in __call__
* Module Shared.DC.Scripts.Bindings, line 350, in _bindAndExec
* Module Products.PythonScripts.PythonScript, line 328, in _exec
* Module None, line 4, in html2text
<PythonScript at /xxxxx/html2text used for /xxxxx/actualites-et-agenda/news>
Line 4

AttributeError: __call__

Et je ne sais pas d'où vient l'erreur.

Quelqu'un peut-il m'aider ???

Merci d'avance pour vos réponses.
Tchuss, @+, jinpol...
  • Re: Utilisation html_to_text

    Posté par jinpol le 24/02/2010 15:10
    Bon, au final, j'avais tout faux, c'est comme cela qu'il faut faire apparemment :

    from Products.CMFCore.utils import getToolByName

    data = "<html>"+val+"</html>"

    pt = getToolByName(context, 'portal_transforms')
    res = pt.convertTo('text/plain',val,mimetype='text/html')

    return res

    Sauf que maintenant,j'ai le message d'erreur suivant :

    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 18: ordinal not in range(128)

    Il y a quelque chose qui ne lui plait pas dans mon code html, mais je ne sais pas quoi, il a été généré par l'éditeur de texte Kupu...
  • Re: Utilisation html_to_text

    Posté par jinpol le 24/02/2010 23:13
    Re tout le monde,

    je reviens avec quelques précisions...

    En fait, dans un script python, je récupère les x premiers caractères d'une News pour ensuite les afficher dans une collection de News. Cela permet ainsi de voir le début des News.

    Le problème qu'il y a, c'est que ces News sont en HTML, et donc, si je coupe le code au milieu, mon code HTML n'est plus correct, car il peut manquer des balises...

    J'aimerai donc convertir mon code html en texte brut, et pour cela, j'utilise :

    pt = getToolByName(context, 'portal_transforms')
    res = pt.convertTo('text/plain',val,mimetype='text/html')

    Le problème, c'est que dès qu'il y a un caractère accentué ou spécial, j'ai une erreur du type :

    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 18: ordinal not in range(128)

    Alors j'imagine que c'est un problème d'encodage de ma chaine de caractère que je récupère au début, mais comment faire pour contourner ce problème.
    Y'aurai bien la solution de remplacer tous les caractères spéciaux, en faisant par exemple :

    val = val.replace('é','e')

    mais c'est lourd.

    Est-ce que quelqu'un a une solution à mon problème ???

    Merci d'avance pour vos réponses.

    Tchuss, jinpol...

Python.org : Le site officiel du langage Python.
Zope.org : Le site web officiel de Zope.
Daily Python-URL : Actus de l'univers Python.
Tribute to Zyons : Zyons notre ami et membre fondateur de l'Afpy, nous quittait en 2005.