#1 Le 24/10/2023, à 15: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, à 17:59)
#2 Le 24/10/2023, à 16: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 = (['<', '<'], ['>', '>'], [''', '\''], [' ', ' '],
['"', '\"'], ['&', '&'])
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()
Hors ligne
#3 Le 24/10/2023, à 16:40
- Compte supprimé
Re : (Résolu) Obtenir une copie de ses messages.
Merci nany, c'est fait.