Website Logo. Upload to /source/logo.png ; disable in /source/_includes/logo.html

Zuzur’s wobleg

technology, Internet, and a bit of this and that (with some dyslexia inside)

Calibre + Mediapart FTW

| Comments

Depuis quelques temps, la recette de calibre pour récupérer et convertir mediapart est cassée. On recevait une jolie trace python:

trace.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    Traceback (most recent call last):
      File "/Applications/calibre.app/Contents/Resources/Python/lib/python2.7/site.py", line 147, in main
        return run_entry_point()
      File "/Applications/calibre.app/Contents/Resources/Python/lib/python2.7/site.py", line 116, in run_entry_point
        return getattr(pmod, func)()
      File "site-packages/calibre/utils/ipc/worker.py", line 119, in main
      File "site-packages/calibre/gui2/convert/gui_conversion.py", line 25, in gui_convert
      File "site-packages/calibre/ebooks/conversion/plumber.py", line 920, in run
      File "site-packages/calibre/customize/conversion.py", line 204, in __call__
      File "site-packages/calibre/web/feeds/input.py", line 101, in convert
      File "site-packages/calibre/web/feeds/news.py", line 632, in __init__
      File "/var/folders/0z/0zkMgRtCGm8ofh4LX0jh0U+++TM/-Tmp-/calibre_0.8.0_tmp_IwF6Co/calibre_0.8.0_aTb7l5_recipes/recipe0.py", line 78, in get_browser
        br['name'] = self.username
      File "site-packages/mechanize/_form.py", line 2780, in __setitem__
      File "site-packages/mechanize/_form.py", line 3101, in find_control
      File "site-packages/mechanize/_form.py", line 3185, in _find_control
    mechanize._form.ControlNotFoundError: no control matching name 'name'

Pour la corriger, il suffit de changer cette méthode de la recette qui récupère les news:

mediapart.py
1
2
3
4
5
6
7
8
9
        def get_browser(self):
            br = BasicNewsRecipe.get_browser()
            if self.username is not None and self.password is not None:
                br.open('http://www.mediapart.fr/')
                br.select_form(nr=1)
                br['name'] = self.username
                br['pass'] = self.password
                br.submit()
            return br

et de remplacer br.select_form(nr=1) par br.select_form(nr=0)

Je cherche comment adresser un élément form par son id avec mechanize (il a id=‘user-input-form’ comme attribut), parce que c’est quand même royalement pénible de se baser sur le fait que la home page de mediapart présente son formulaire de login en premier (ou en deuxième dans ce cas particulier)

nb: ça fait 15 ans que j’ai écrit ma dernière ligne de python. Si si :-)

Comments