Contenu | Rechercher | Menus

Annonce

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 24/10/2023, à 16:36

Compte supprimé

(Résolu) Obtenir une copie de ses messages.

Bonjour,
À partir de mon profil, je peux voir la liste de mes messages sur Ubuntu-fr.
Quelle procédure utiliser pour obtenir une copie de ces messages là ? Quel outil ?

Dernière modification par Compte supprimé (Le 24/10/2023, à 18:59)

#2 Le 24/10/2023, à 17:09

nany

Re : (Résolu) Obtenir une copie de ses messages.

Bonjour,



J’avais fait un script python pour Coeur Noir il y a deux ans.

Attention, ce script ne récupère que les messages contenant la balise code !
Pour récupérer TOUS les messages, voici le script corrigé :

#!/usr/bin/env python3
# coding: utf8
# ident: 4 spaces
# version: 0.3
#
# 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.
                  '''
    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_' + 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'):
            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()

En ligne

#3 Le 24/10/2023, à 17:40

Compte supprimé

Re : (Résolu) Obtenir une copie de ses messages.

Merci nany, c'est fait.