Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/10/2021, à 14:57

Coeur Noir

Outil pour télécharger tout ce qu'on a écrit sur le forum ? [ résolu ]

Hello,

ça existe sur certains gros sites, la possibilité de récupérer en une grosse archive tout ce qu'on y a « posté ».

Et ma foi j'aimerais savoir s'il existe un outil ou une méthode qui permettrait de récupérer tous mes messages sur ce forum,
histoire de pouvoir y faire des recherches / tris localement, à coup de grep et autres - plutôt qu'en passant par l'outil de recherche du forum…

Ça peut aussi dévier sur « comment mieux utiliser » l'outil de recherche du forum, tout est bon à prendre : l'idée c'est je cherche souvent parmi mes propres message / discussions une astuce ou un sujet déjà abordé ou résolu et qu'au final je finis par ré-écrire / paraphraser faute de trouver rapidement ce que je cherchais…

Voir le script python proposé par nanyhttps://forum.ubuntu-fr.org/viewtopic.p … #p22498768

Dernière modification par Coeur Noir (Le 24/10/2021, à 15:23)


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#2 Le 24/10/2021, à 01:08

Coeur Noir

Re : Outil pour télécharger tout ce qu'on a écrit sur le forum ? [ résolu ]

J'aurais p'têt du poster ça ailleurs, genre dans Trucs, astuces et scripts utiles ? ? ?


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#3 Le 24/10/2021, à 01:35

nany

Re : Outil pour télécharger tout ce qu'on a écrit sur le forum ? [ résolu ]

Bonjour,


Ou peut-être qu’il n’y a pas vraiment de solution à ce que tu cherches ?


Personnellement, je ferais une lecture des 473 pages de cette recherche.

Bon courage. wink

Hors ligne

#4 Le 24/10/2021, à 02:29

Coeur Noir

Re : Outil pour télécharger tout ce qu'on a écrit sur le forum ? [ résolu ]

Bah oui mais c'est bien là le « problème »… chercher là-dedans plus spécifiquement…

En recherche je tape généralement [ "coeur noir" mot1 mot2 ] mais même là ça me renvoie rarement direct sur le passage que je cherche.

Faudrait pouvoir dire : cherche dans les posts de tel membre, tels mots.

Actuellement la recherche sortira toutes les pages contenant "coeur noir" et les mots 1 2 donc trop large…

…enfin bon j'ai qu'à avoir une meilleure mémoire aussi ( ou : j'aurais du me faire un pense-bête, au fur et à mesure ).


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#5 Le 24/10/2021, à 08:13

FrancisFDZ

Re : Outil pour télécharger tout ce qu'on a écrit sur le forum ? [ résolu ]

Bonjour,

Coeur noir a écrit :

j'aurais du me faire un pense-bête, au fur et à mesure

Ça me semble en effet la meilleure solution, mais

  • Il faut le faire dès la toute première intervention

  • Il faut s'y tenir à chaque intervention

Créer un tel pense-bête après quelques années de présence devient un travail de bénédictin !

[Edit] Dans mon cas, je vois dans "Mes messages" (que wink ) 43 pages de posts auxquels j'ai participé plus ou moins activement, et ces posts peuvent avoir chacun plusieurs pages de réponses dont la plupart sont des interventions autres que les miennes, le tri est loin d'être facile. [/Edit]

Dernière modification par FrancisFDZ (Le 24/10/2021, à 08:27)


-- On peut avoir des raisons de se plaindre et n'avoir pas raison de se plaindre --
[Victor Hugo]

Hors ligne

#6 Le 24/10/2021, à 13:55

nany

Re : Outil pour télécharger tout ce qu'on a écrit sur le forum ? [ résolu ]

Bien, j’ai fait un script python (en pompant le code du compteur-couche-tard_V2.0, cf ma signature) pour récupérer tous les messages d’un membre du forum avec un filtre sur les balises code.


search_code_member.py a écrit :
#!/usr/bin/env python3
# coding: utf8
# ident: 4 spaces
# version: 0.2
#
# auteur: nany
#
# license:
# ----------------------------------------------------------------------------
#  "THE BEER-WARE LICENSE" (Revision 42):
#  <nany@forum.ubuntu-fr.org> wrote this file. As long as you retain this
#  notice you can do whatever you want with this stuff. If we meet some day,
#  and you think this stuff is worth it, you can buy me a beer in return. nany
# ----------------------------------------------------------------------------
#
# licence :
# ----------------------------------------------------------------------------
#  "LICENCE BEERWARE" (Révision 42):
#  <nany@forum.ubuntu-fr.org> a créé ce fichier. Tant que vous conservez cet
#  avertissement, vous pouvez faire ce que vous voulez de ce truc. Si on se
#  rencontre un jour et que vous pensez que ce truc vaut le coup, vous pouvez
#  me payer une bière en retour. nany
# ----------------------------------------------------------------------------
#
# ####################################
# # nécessite python3-mechanicalsoup #
# ####################################


from time import sleep
from mechanicalsoup import *
import os
import sys


def usage():
    print('\nusage : "' + sys.argv[0] + '" "login" "password" "user_id"\n')
    print('login :\t\t"votre pseudo"')
    print('password :\t"votre mot de passe du forum"')
    print('user_id :\t"l’id du membre dont on recherche les messages"')
    print('\nN’oubliez pas les guillemets sous peine d’erreur possible')


MYPATH = sys.path[0] + os.sep
FORUM_URL = 'https://forum.ubuntu-fr.org/'
SEARCH_URL = 'search.php?action=show_user_posts&user_id='
if len(sys.argv) == 4:
    LOGIN = sys.argv[1]
    PASSWORD = sys.argv[2]
    ID = sys.argv[3]
else:
    print('mauvais nombre d’arguments')
    usage()
    sys.exit()


def getBrowser():

    return StatefulBrowser(user_agent='Mozilla/5.0 (compatible)')


def log_in(browser, forum_url):

    url_log = forum_url + 'login.php'
    url_index = forum_url + 'index.php'
    url_log = FORUM_URL + 'login.php'
    url_index = FORUM_URL + 'index.php'
    
    browser.open(url_log)
    browser.select_form('form[id="login"]')
    browser['req_username'] = LOGIN
    browser['req_password'] = PASSWORD
    browser.submit_selected()

    page = getPage(browser, url_index)
    welcome = page.find('div', id='brdwelcome')
    wlink = welcome.findAll('a')[-1].renderContents().decode('utf8')
    if wlink == 'Déconnexion':
        print('connexion effectuée')
        return True
    else:
        print('erreur de connexion')
        print('vérifiez votre pseudo et votre mot de passe')
        return False


def log_out(browser, forum_url):

    pindex = forum_url + 'index.php'
    browser.open(pindex)
    disconnect = browser.find_link(title="Déconnexion")
    try:
        browser.follow_link(disconnect)
        browser.open(pindex)
        welcome = browser.get_current_page().findAll('fieldset')[-1]
        wlink = welcome.findAll('a')[-1].renderContents().decode('utf8')
        if wlink == 'inscription':
            print('déconnexion effectuée')
            return True
        else:
            print('erreur lors de la déconnexion')
            return False
    except:
        print('la connexion ne semble pas être effective')
    browser.close()


def getPage(browser, url):

    # essaye de récupérer la page tant qu’il y a des erreurs
    while True:
        try:
            browser.open(url)
            page = browser.get_current_page()
            if b'Error / FluxBB' in page.title.renderContents():
                sleep(10)
                continue
            elif b'Info / Forum Ubuntu-fr.org' in page.title.renderContents():
                print('mauvaise id')
                print('pour obtenir l’id, cliquez sur le pseudo du membre')
                log_out(browser, FORUM_URL)
                sys.exit()
            break
        except AttributeError:
            sleep(10)
    return page


def numpage(page):

    return page.find('p', 'pagelink').strong.renderContents().decode('utf8')


def pagelinks(page):

    return page.find('p', 'pagelink').findAll('a')


def isfirstpage(page):

    num = int(numpage(page))
    return (num == 1)


def islastpage(page):

    num = int(numpage(page))
    links = pagelinks(page)
    if len(links) > 0 and len(links) != 2:
        if int(links[-1]['href'].split('p=')[-1]) > num:
            return False
        else:
            return True
    elif len(links) == 2 and num == 1:
        return False
    else:
        return True


def Next(browser, page, url):

    # si la page n’est pas la dernière,
    # le dernier lien pointe vers la page suivante
    t_url=url
    if not islastpage(page):
        t_url = pagelinks(page)[-1]['href']
        url = FORUM_URL + t_url
    else:   # sinon, on est à la dernière page:
        print('dernière page')

    return url


def HtmlToText(txt):
    data = (['&lt;', '<'], ['&gt;', '>'], ['&#039;', '\''], ['&#160;', ' '],
            ['&quot;', '\"'], ['&amp;', '&'])
    for rep in data:
        txt = txt.replace(rep[0], rep[1])

    return txt


def main():

    description = '''
                     Script python pour rechercher et importer 
                     les messages d’un membre du forum ubuntu-fr.org
                     contenant les balises code.
                  '''
    print(description)

    browser = getBrowser()
    
    if not log_in(browser, FORUM_URL):
        sys.exit()

    purl = FORUM_URL + 'profile.php?id=' + ID
    page = getPage(browser, purl)
    try:
        username = str(page.find('dd').renderContents().decode('utf8'))
    except AttributeError:
        username = page.find('div' , 'infldset').find('p')
        username = username.renderContents().decode('utf8')
        username = str(username).replace('Nom d\'utilisateur: ' , '')
    username = HtmlToText(username)
    username = username.split('\'')[-1]
    html_file = MYPATH + 'search_code_' + username.replace(' ' , '_') +'.html'
    fs = open(html_file, 'w')
    fs.write('<html>\n')
    fs.write('<head>\n')
    fs.write('<meta http-equiv="Content-Type" \
content="text/html; charset=utf-8" />\n')
    fs.write('<title>Recherche code ' + username.replace(' ' , '_') + \
'/ Forum Ubuntu-fr.org</title>\n')
    fs.write('    <link rel="shortcut icon" \
href=\
"https://www-static.ubuntu-fr.org/theme2010/images/commun/ubuntu/icone.png"/>\
\n')
    fs.write('    <link rel="stylesheet" media="screen" type="text/css" \
title="Design Ubuntu" \
href="https://www-static.ubuntu-fr.org/theme2010/css/forum.css" />\n')
    fs.write('   <link rel="stylesheet" media="screen" type="text/css" \
title="Design Ubuntu" \
href="https://www-static.ubuntu-fr.org/theme2010/css/forum-ubuntu.css" />\n')
    fs.write('</head>\n')
    fs.write('<body>\n')
    fs.write('<div id="main">')
    print('parcours des pages')
    url = FORUM_URL + SEARCH_URL + ID
    while True:
        print(url)
        page = getPage(browser, url)
        for p in page.findAll('div', 'blockpost'):
            if p.find('div', 'codebox'):
                post = p.renderContents().decode('utf8')
                post = \
                post.replace('"viewtopic' , '"' + FORUM_URL + 'viewtopic')
                post = post.replace('"profile' , '"' + FORUM_URL + 'profile')
                fs.write(post)

        new_url = Next(browser, page, url)
        if new_url == url:
            break
        else:
            url = new_url

    fs.write('</div>')
    fs.write('</body>\n')
    fs.write('</html>')
    fs.close()

    log_out(browser, FORUM_URL)
    print('Le fichier ' + html_file + ' a été créé.')
    print('Ouvrez le avec votre navigateur web puis exécutez des recherches \
par mot clé dans celui-ci.')

main()

 

Procédure d’utilisation pour celles et ceux que ça intéresse :

  1. copier tout le bloc de code ci-dessus et le coller dans un fichier appelé par exemple search_code_member.py ;

  2. enregistrer et fermer le fichier puis le rendre exécutable ;

  3. installer si nécessaire python3-mechanicalsoup par apt (en sudo : installation système) ou bien mechanicalsoup par pip3 (installation utilisateur) ;

  4. exécuter (en mettant bien les guillemets pour les éventuelles espaces)

    "/chemin/vers/le/fichier.py" "login" "password" "user_id"

    ou /chemin/vers/le/fichier.py est le nom complet (chemin compris) du script python, login est votre pseudo, password est votre mot de passe et user_id est l’id du membre dont on recherche les messages ;

  5. à la fin de son exécution, le script indique la création d’un fichier html qui peut être consulté pour y effectuer des recherches.

Enjoy. wink


[edit]
Modification du code (version 0.2) pour la gestion des erreurs.
[/edit]

Dernière modification par nany (Le 24/10/2021, à 18:10)

Hors ligne

#7 Le 24/10/2021, à 14:21

Coeur Noir

Re : Outil pour télécharger tout ce qu'on a écrit sur le forum ? [ résolu ]

Alors pourquoi cette idée m'est-elle venue, pourriez-vous demander ?

C'est d'une part pour répondre ± toujours aux mêmes types de demande :
⋅ ajouter une partition dans fstab
⋅ expliquer le fonctionnement du montage des « médias amovibles »
⋅ cadrer un peu l'usage de sudo
⋅ les « nouvelles » considérations à prendre en compte à cause des appli's en snap

et parfois d'autre part, reprendre des messages qui ressemblaient à des tutos, concernant souvent :
⋅ le (non) intérêt d'une partition /home séparée en comparaison à l'intérêt d'une partition séparée où on ne stocke que les documents visibles des utilisateurs,
⋅ les droits et permissions
⋅ samba, cifs et un peu NAS

Ce sont des sujets assez « fondamentaux » et particulièrement « distinctifs » des différences qu'un utilisateur rencontrera en débarquant sous Ubuntu depuis Windows.
Et bien qu'il y ait de la doc' à ces sujets, elle est parfois confuse ou alambiquée voire obsolète.
J'essaie aussi de mettre mon grain de sel ou de sucre dans la doc' mais là c'est encore plus délicat :
⋅ ce sont parfois de longues pages, structurées, difficiles à « retoucher » sans perturber la logique existante,
⋅ des pages qui renvoient à d'autres pages, où il faut donc aussi vérifier la cohérence de la modif' qu'on s'apprêtait à faire,
⋅ elles nécessitent de mettre à jour les illustrations, souvent datées ( ex. Nautilus, ou les environnements de bureau ), or je n'ai pas toujours le temps d'avoir sous la main toutes les variantes…

Et clairement les quelques pépins que je peux repérer aujourd'hui, je ne les aurais pas vus ou compris 10 ans en arrière ( ça fait mal de lire ses propres + anciens messages, lol ! )
Ce que je veux dire par là : quand on débarque, on prend un peu pour argent comptant ( content ? ) ce qu'on lit dans la doc' ou le forum.
Or ça manque parfois de clarté, de précision ou de contexte d'un côté comme de l'autre.
En aucun cas ces manques ne relèvent de mauvaise volonté ou d'intention nuisible : ça manque de « relecture » et de formulation un peu plus « pédagogique ».
Mais ça demande du temps et des esprits carrés et bien informés… le serpent qui se mord la queue, l'œuf ou la poule, tout ça.

Je ne prétends absolument pas pouvoir résoudre tout ça, loin s'en faut ! J'essaie à ma petite échelle. Et parfois en essayant, ça décourage… faute d'outils « modernes et pratiques » ( ou ma non-connaissance des outils à disposition concernant la doc' : peut-on faire des brouillons sans publier ? Peut-on rédiger / regrouper des ressources via un logiciel localement puis envoyer vers la doc' quand c'est fini ? )

Il y a parfois le découragement face à des interventions maladroites ou franchement biaisées ou techniquement discutables - mais bon ça c'est humain, inévitable et quelque part souhaitable.
Et je sens bien que je tombe moi-même dans certains « pièges » et « travers ». Bref.

Finalement quel dommage que ce site n'intègre pas un système de tags sur les discussions ( voire les messages ) qui permettrait des recherches thématiques et croisée.
Et quel dommage que ce forum ait techniquement un siècle de retard - je sais, l'équipe en est consciente et attend flarum mais je ne comprends pas pourquoi elle n'a pas basculé comme d'autre forums ± officiels ×buntu vers discourse.


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#8 Le 24/10/2021, à 14:34

Coeur Noir

Re : Outil pour télécharger tout ce qu'on a écrit sur le forum ? [ résolu ]

@nany tu peux compter sur des bières ;-) même si…

django@ASGARD:/media/DATA/coeurnoir/Logiciels$ ./search_code_member.py "coeur noir" "×××××××××" "1405611441"

                     Script python pour rechercher et importer 
                     les messages d’un membre du forum ubuntu-fr.org
                     contenant les balises code.
                  
connexion effectuée
Traceback (most recent call last):
  File "./search_code_member.py", line 254, in <module>
    main()
  File "./search_code_member.py", line 192, in main
    page = getPage(browser, purl)
  File "./search_code_member.py", line 68, in getPage
    browser.open(url)
  File "/usr/lib/python3/dist-packages/mechanicalsoup/stateful_browser.py", line 133, in open
    resp = self.get(url, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/mechanicalsoup/browser.py", line 116, in get
    raise LinkNotFoundError()
mechanicalsoup.utils.LinkNotFoundError
django@ASGARD:/media/DATA/coeurnoir/Logiciels$ 

Je suis sous 20.04 ( Budgie ) et ai installé python3-mechanicalsoup via synaptic ( qui ne m'a rien installé d'autre ).


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#9 Le 24/10/2021, à 14:55

nany

Re : Outil pour télécharger tout ce qu'on a écrit sur le forum ? [ résolu ]

Coeur Noir a écrit :
django@ASGARD:/media/DATA/coeurnoir/Logiciels$ ./search_code_member.py "coeur noir" "×××××××××" "1405611441"

Ton pseudo, c’est « Coeur Noir » et non « coeur noir » (mais visiblement ça passe en minuscules vu que le script affiche « connexion effectuée »).
Et,

nany a écrit :

exécuter (en mettant bien les guillemets pour les éventuelles espaces)

"/chemin/vers/le/fichier.py" "login" "password" "user_id"

ou /chemin/vers/le/fichier.py est le nom complet (chemin compris) du script python, login est votre pseudo, password est votre mot de passe et user_id est l’id du membre dont on recherche les messages ;

tu peux voir l’id du membre en cliquant sur son pseudo. Par exemple, ton id est 82955.

Donc :

./search_code_member.py "Coeur Noir" "×××××××××" "82955"

Hors ligne

#10 Le 24/10/2021, à 15:08

Coeur Noir

Re : Outil pour télécharger tout ce qu'on a écrit sur le forum ? [ résolu ]

(…)
dernière page
déconnexion effectuée
Le fichier /media/DATA/coeurnoir/Logiciels/search_code_Coeur_Noir.html a été créé.
Ouvrez le avec votre navigateur web puis exécutez des recherches par mot clé dans celui-ci.

Ok, c'était bien l'id du membre qui péchait : j'avais pris la fin de l'url de « mes messages ».

Donc… bravo. Merci. Double tournée ;-)

Admiration, voilà à quoi ça ressemble :
resultat-script-nany.jpg
…avec reprise des liens, super pratique !

Dernière modification par Coeur Noir (Le 24/10/2021, à 15:20)


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#11 Le 24/10/2021, à 17:25

Tamarou

Re : Outil pour télécharger tout ce qu'on a écrit sur le forum ? [ résolu ]

Merci nany, ça fonctionne très bien.
Par contre quand on parcours le résultat ... pfou quel retour en arrière ! Plein de choses oubliées.

Hors ligne

#12 Le 24/10/2021, à 18:13

nany

Re : Outil pour télécharger tout ce qu'on a écrit sur le forum ? [ résolu ]

J’ai modifié le code pour gérer les erreurs (message #6 édité).

Donc recopiez tout le bloc de code pour remplacer la totalité du script.

wink cool

Hors ligne