#1 Le 28/10/2012, à 11:28
- lukophron
[python]Monsieur Cinéscript
Salut,
Suite à une demande, j'ai pondu un script python pour mettre à jour la liste des films trouvés sur le topic-jeu Quel film c'est ?
Ça tourne, ça remplit son objectif (et son deuxième objectif qui était de me remettre à apprendre Python ^^)
Maintenant, il y aurait mieux.
Je poste ici pour avoir quelques retours de codeurs, et fixer certains des objectifs d'amélioration.
dépendances :
mechanize
imdbpy
Vos idées, conseils, pistes, remarques, sont les bienvenus !
120311 : modif unicode
130123 : modif trialpha (clarification), balise [imdb] insensible à la casse
130401 : modif balise *]
130610 : v0.9.6 unicode mon amour, le GMT c'est le pied
130713 : v0.9.7 python2.7, correction parse imdb, addons log + envoi topic dédié + détails
140201 : v0.9.9 bordel
140614 : v1.0.0 message dans le topic pour signalement
140622 : v1.1.1 tests
140911 : v1.1.2 (?)
141005 : v1.2 imdbpy
141113 : v1.3.0 connection M. Ciné systématique + améliorations (?) changement de topic
Dernière modification par lukophron (Le 13/11/2014, à 01:53)
Le danger avec les glands est qu'ils prennent racines.
Corneille
Hors ligne
#2 Le 28/10/2012, à 11:28
- lukophron
Re : [python]Monsieur Cinéscript
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
### mise à jour de la liste des films du jeu Monsieur Cinéma sur forum.ubuntu-fr ###
#
# misajourv1.py
#
# python2.7
# dep : mechanize
# imdbpy
# (merci à leurs développeurs)
# un fichier joint pour accéder au compte
# un fichier créé si besoin pour sauvegarder la liste
#
# licence internationale DTFWYW
# licence fr SCVSVPTPUB
import urllib2
import locale
import re
import time
import mechanize
import htmlentitydefs
import unicodedata
from random import choice
from imdb import IMDb
version = 'v1.3.0'
locale.setlocale(locale.LC_ALL,'fr_FR.utf8')
def cleanString(s):
if isinstance(s,str):
s = unicode(s,"utf-8","replace")
s=unicodedata.normalize('NFD',s)
return s
def compare (a, b):
# pour épurer et trier les titres
a = a.lstrip()
b = b.lstrip()
if a[0] == '(':
a = a.split(')')[1]
if b[0] == '(':
b = b.split(')')[1]
a = a.lstrip()
b = b.lstrip()
return locale.strcoll(a, b)
def unescape(text):
# code html -> unicode fonction trouvée sur le net
def fixup(m):
text = m.group(0)
if text[:2] == "&#":
# character reference
try:
if text[:3] == "&#x":
return unichr(int(text[3:-1], 16))
else:
return unichr(int(text[2:-1]))
except ValueError:
pass
else:
# named entity
try:
text = unichr(htmlentitydefs.name2codepoint[text[1:-1]])
except KeyError:
pass
return text # leave as is
return re.sub("&#?\w+;", fixup, text)
def trialpha(liste) :
# tri par ordre alphabétique la liste brute
dicfilm = {}
trukipasspa = {ord(u'\u0152'):u'oe' , ord(u'\u0153'):u'oe'}
for i in liste:
i = i.lstrip().rstrip()
if i[0] == '(':
a = i.split(')')[1]
a = cleanString(a.lstrip())
else :
a = cleanString(i)
a = a.translate(trukipasspa)
dicfilm[i]= a[0].lower()
liste_alpha = []
for i in range(28) :
liste_alpha.append([])
alfab = 'abcdefghijklmnopqrstuvwxyz'
for i in dicfilm.items():
if i[1] in alfab :
liste_alpha[alfab.index(i[1])+1].append(i[0])
elif i[1].isdigit() :
liste_alpha[0].append(i[0])
else :
liste_alpha[27].append(i[0])
#liste_globale = [j for i in liste_alpha for j in i]
for i in range(28):
liste_alpha[i].sort(cmp=compare)
liste_imprim = u'[center][b]N°[/b][/center]\n[code]'+(u' | ').join(liste_alpha[0])+u'''[/code]\n\n'''
nbr = 1
for i in 'abcdefghijklmnopqrstuvwxyz?'.upper():
liste_imprim += u'[center][b]'+i+u'[/b][/center]\n[code]'+(u' | ').join(liste_alpha[nbr])+u'''[/code]\n\n'''
nbr+=1
return liste_imprim.encode('utf8')
def recupost(urltopic) :
# récupère le deuxième message du topique et en extrait
# la liste actuelle, les codes imdb déjà utilisés, l'id du post, la dernière page parcourue
print 'récupération du message-liste'
print urltopic
for i in range(5):
try:
pageraw = mechanize.urlopen(urltopic)
print 'première page récupérée '+urltopic
break
except:
print 'récupération échouée, nouvelle tentative dans 3 secondes'
if i==4:
print 'échec de la récupération - sortie'
raise
time.sleep(3)
page = pageraw.read()
pageraw.close()
#print page
imdrex = re.compile('\<code>\[imdb\sliste\](.*?)\[/imdb\]</code>')
listrex = re.compile('<p style="text-align: center"><strong>.*?</strong></p><div class="codebox"><pre><code>(.*?)</code></pre></div>')
numprex = re.compile('la page #([\d]+)')
postex = re.compile('<div id="p(\d+)"\sclass=')
if imdrex.search(page):
liste_imdb = imdrex.search(page).group(1)
liste_imdb = liste_imdb.split()
else :
print 'liste imdb absente ?'
liste_imdb = []
liste_titres = []
if listrex.search(page) :
for i in listrex.findall(page) :
liste_titres += unescape(i.decode('utf8')).split(' | ')
else :
print 'liste de titres absente ?'
if postex.search(page) :
postid = postex.findall(page)[1]
else :
print 'ID du post introuvable'
postid = 0
#raise
if numprex.search(page) :
numpage = numprex.search(page).group(1)
else :
print 'n° de dernière page mise à jour non trouvée, placé à 1 par défaut'
numpage = 1
print '\n message récupéré pour mise à jour\n'
return liste_imdb, liste_titres, postid, numpage
def recupbalise(numpage, url, old_imdb) :
# retourne les balises des films trouvés à rajouter
# la dernière page farfouillée
# le nouvel url, si le topic est fermé
# le dernier film trouvé
listall = []
dernier = ['','',0]
newurl = url
numpage = int(numpage)
suivex = re.compile('>Suiv.</a>')
titrex = re.compile('[\[imdb\]|\[*\]](tt\d+)[\[/imdb\]|\[/*\]]', re.I)
closerex = re.compile('<p class="postlink conr">Discussion fermée</p>')
postmsrex = re.compile('<div class="postmsg">(.*?)</div>', re.DOTALL)
linkrex = re.compile('<a href="(.*?)">')
while numpage < 300 : # limite non-nécessaire si le code n'est pas beugué, mieux vaut prévenir...
print 'recherche des codes imdb sur la page '+str(numpage)
print url+'&p='+str(numpage)
for i in range(5):
try :
pageraw = mechanize.urlopen(url+'&p='+str(numpage))
break
except :
if i==4:
print 'échec de connection avec le forum - sortie'
raise
print 'page du forum inaccessible - nouvelle tentative dans 3 secondes'
time.sleep(3)
page = pageraw.read()
pageraw.close()
titre = []
[titre.append(x) for x in titrex.findall(page)\
if (x not in old_imdb and x not in titre)]
if titre :
dernier[1] = titre[-1]
dernier[2] = numpage
print titre
[listall.append(x) for x in titre if x not in listall]
if suivex.search(page) :
numpage +=1
else:
if closerex.search(page) :
print '\ntopic fermé, recherche du nouveau topic'
posts = postmsrex.findall(page)
lastpost = posts[-1]
print lastpost
if linkrex.search(lastpost) :
numpage = 1
newurl = linkrex.search(lastpost).group(1)
print 'Nouveau topic détecté: '+newurl
else :
print "Topique détecté fermé, mais pas de nouveau url ?"
break
break
return numpage, listall, newurl, dernier
def titrimdb(films, dernier):
# cherche les titres des films en fonction de leur numéro imdb
# grâce à imdbpy
print '\nrecherche des titres des nouveaux films sur imdb\nvia imdbpy'
print films
nouvfilm = []
for i in films:
print 'Balise '+i+' : ',
if i[:2] == 'tt' :
i = i[2:]
ia = IMDb()
movie = ia.get_movie(i)
titre = movie['title']+' ('+str(movie['year'])+')'
print titre
nouvfilm.append((i, titre))
if i == dernier[1] :
dernier[0] = titre
print 'recherche imdb terminée'
if nouvfilm == []:
print 'pas de nouveau film, donc'
else :
print '\ntitres ajoutés :'
print [t for (i, t) in nouvfilm]
return nouvfilm, dernier
def message(liste_imdb, liste_titres, nbr_titres, numpage, dernier, picfilm):
# façonne le nouveau message-liste
texte = """[b]LISTE DES FILMS DÉJÀ CITÉS :[/b]
~+~+~+~+~+~+~+~+~
Dernière mise à jour de la Liste : """
texte += time.strftime('le %d/%m/%Y, à %H:%M:%S (GMT)',time.gmtime())
texte += """, jusqu'à la page #"""
texte += str(numpage)
texte += """
Dernier film ajouté : """
texte += dernier[0].encode('utf8')
texte += """ [i]balise """
texte += dernier[1] + ", page "
texte += str(dernier[2])+"""[/i]
Nombre de films trouvés : """
texte += str(nbr_titres)
texte += """
~+~+~+~+~+~+~+~+~
"""
texte += trialpha(liste_titres)
texte += """
Liste des balises utilisées[code][imdb liste]"""
texte += liste_imdb.encode('utf8')
texte += """[/imdb][/code]"""
texte += picfilm.encode('utf8')
#texte.decode('utf8')
return texte
def notification(numpage, new_numpage, new_film):
#façonne le message de notification de mise à jour
texte = """Bonjour,
mise à jour effectuée depuis la page """
texte += str(numpage)
texte += """ jusqu'à la page """
texte += str(new_numpage)
texte += """
"""
texte += choice(["j'balise !", "Merci de signaler les erreurs",\
"ça va sinon ?", "Winter is coming.", "Merci d'errer les signalements"])
texte += """[code]"""
for i in new_film :
texte += """
Balise """
texte += i[0].encode('utf8')
texte += """ : """
texte += i[1].encode('utf8')
texte += """[/code]"""
return texte
def modifpost(msg, msg2, login, password, postid, tid):
# envoie les messages - liste + notification
print 'envoi des post en cours...'
cookieJar = mechanize.CookieJar()
opener = mechanize.build_opener(mechanize.HTTPCookieProcessor(cookieJar))
opener.addheaders = [("User-agent","Mozilla/5.0")]
mechanize.install_opener(opener)
fp = mechanize.urlopen("http://forum.ubuntu-fr.org/login.php")
forms = mechanize.ParseResponse(fp)
fp.close()
#print forms[1]
form = forms[1]
form["req_username"] = login
form["req_password"] = password
fp = mechanize.urlopen(form.click())
fp.close()
# modifie le post liste
for i in range(5) :
try :
print 'modification du post-liste'
print 'opening http://forum.ubuntu-fr.org/edit.php?id='+str(postid)
fp = mechanize.urlopen('http://forum.ubuntu-fr.org/edit.php?id='+str(postid))
forms = mechanize.ParseResponse(fp)
fp.close()
form = forms[1]
form["req_message"] = msg
fp = mechanize.urlopen(form.click())
fp.close()
print 'modification faite'
break
except:
print 'post échoué, nouvelle tentative dans 3 secondes'
if i==4:
print 'échec - sortie'
raise
time.sleep(3)
#notifie la mise à jour
for i in range(5) :
try :
print "envoi du post signalant les ajouts"
print 'opening http://forum.ubuntu-fr.org/post.php?tid='+tid
fp2 = mechanize.urlopen('http://forum.ubuntu-fr.org/post.php?tid='+tid)
forms2 = mechanize.ParseResponse(fp2)
fp2.close()
form2 = forms2[1]
form2["req_message"] = msg2
fp2 = mechanize.urlopen(form2.click())
fp2.close()
print 'envoi réalisé'
break
except:
print 'post échoué, nouvelle tentative dans 3 secondes'
if i==4:
print 'échec - sortie'
raise
time.sleep(3)
def modiflocal(msg):
# pour un test en local et la sauvegarde
try :
with open('liste.bak', 'w') as f :
f.write(msg)
print 'ok, liste.bak mis à jour'
except :
print 'sauvegarde locale impossible'
def recupostID(urltopic) :
postex = re.compile('<div id="p(\d+)"\sclass=')
for i in range(5):
try:
pageraw = mechanize.urlopen(urltopic)
print 'page récupérée '+urltopic
break
except:
print 'récupération échouée, nouvelle tentative dans 3 secondes'
if i==4:
print 'échec de la récupération - sortie'
raise
time.sleep(3)
page = pageraw.read().decode('utf-8')
pageraw.close()
if postex.search(page) :
postid = postex.findall(page)[1]
else :
print 'ID du post introuvable'
raise
return postid
def sendimage(url_server, url_image):
# envoie l'image sur un serveur
imrex = re.compile('\[img\](.*?)\[/img\]', re.I)
print 'envoi de l\'image pour modif\' en ligne'
cookieJar = mechanize.CookieJar()
opener = mechanize.build_opener(mechanize.HTTPCookieProcessor(cookieJar))
opener.addheaders = [("User-agent","Mozilla/5.0")]
mechanize.install_opener(opener)
fp = mechanize.urlopen(url_server)
forms = mechanize.ParseResponse(fp)
fp.close()
form = forms[0]
print 'envoi du formulaire'
form["url_list"] = url_image
form["optsize"] = ['3']
form["adult"] = ["no"]
fp = mechanize.urlopen(form.click())
response = fp.read()
fp.close()
url_thumb = imrex.search(response).group(1)
print 'image réduite accessible : ' +url_thumb
return url_thumb
def getpic(titre):
# va chercher une pic !
print "recherche d'une image..."
imrex = re.compile('imgurl:"(.*?)"', re.I)
jeveurex = re.compile('gif|nopicture|youtube')
cookieJar = mechanize.CookieJar()
opener = mechanize.build_opener(mechanize.HTTPCookieProcessor(cookieJar))
opener.addheaders = [("User-agent","Mozilla/5.0")]
mechanize.install_opener(opener)
cherche = "http://www.bing.com/images/search?q=movie+"+'+'.join(titre.split())+"&adlt=off"
print cherche
fp = mechanize.urlopen(cherche)
response = fp.read()
fp.close()
listall = imrex.findall(response)
for i in range(len(listall)):
if jeveurex.search(listall[i]):
continue
else :
print listall[i]
ima = listall[i]
break
if ima :
return ima
else :
ima = 'http://clzimages.com/movie/large/43/43_d_46984_0_Python.jpg'
return ima
def main():
# on y arrive... ###scinder en fonctions ? (cf picfilm) ++options
print "mise à jour en cours... "+version
with open('tchernia','r') as f :
url_qfc = f.readline().rstrip('\n\r')
login = f.readline().rstrip('\n\r')
password = f.readline().rstrip('\n\r')
try :
tid = url_qfc.split('=')[1].rstrip('&p')
except :
tid = 'ERROR : url invalide ?'
try :
urltopic = url_qfc.split('&')[0]
except :
urltopic = url_qfc
print 'id du topic en cours = '+tid
print 'connection au compte M. Cinéma'
cookieJar = mechanize.CookieJar()
opener = mechanize.build_opener(mechanize.HTTPCookieProcessor(cookieJar))
opener.addheaders = [("User-agent","Mozilla/5.0")]
mechanize.install_opener(opener)
fp = mechanize.urlopen("http://forum.ubuntu-fr.org/login.php")
forms = mechanize.ParseResponse(fp)
fp.close()
print forms[1]
form = forms[1]
form["req_username"] = login
form["req_password"] = password
fp = mechanize.urlopen(form.click())
fp.close()
old_imdb, old_titres, postid, numpage = recupost(urltopic)
print 'page en cours = '+str(numpage)
new_numpage, new_imdb, newurl, dernier = recupbalise(numpage, url_qfc, old_imdb)
print 'page atteinte : '+str(new_numpage)+'\n'
if urltopic != newurl :
try :
tid = newurl.split('=')[1].rstrip('&p')
except :
print 'ERROR : nouvel url invalide ? '+newurl
print '\nTopic changé, recherche du nouveau post sur le topic '+tid
postid = recupost('http://forum.ubuntu-fr.org/viewtopic.php?id='+tid)[2]
print 'recherche des balises sur le nouveau topic'
new_numpage, new_imdb2, newurl, dernier = recupbalise(new_numpage, newurl, old_imdb)
new_imdb = new_imdb + new_imdb2
if new_imdb != []:
new_film, dernier = titrimdb(new_imdb, dernier)
else :
print 'pas de nouveau film, sortie sans modification de la liste'
quit()
new_imdb = old_imdb + new_imdb # ! modification après avoir récupéré les titres
new_liste = [t for (i, t) in new_film] + old_titres
new_liste = list(set(new_liste))
new_liste.sort(cmp=compare)
new_imdb.sort()
if new_imdb :
imdb_str = ' '.join(new_imdb)
else :
imdb_str = ''
nbr_titres = len(new_liste)
try :
cherchpic = choice(new_liste)
except :
print "bug python, choix annulé"
cherchpic = "python"
print "\nle choix du jour : "+cherchpic
try :
ima = urllib2.unquote(getpic(cleanString(cherchpic).encode("utf-8")))
thumb = sendimage('http://postimage.org/index.php?um=web', ima)
picfilm ="""
[center]un (quel)film(c) au hasard
[url="""+ima+"][img="+cherchpic+"]"+thumb+"[/img][/url][/center]"
except :
print "bug envoi image"
picfilm = " "
msg = message(imdb_str, new_liste, nbr_titres, new_numpage, dernier, picfilm)
msg2 = notification(numpage, new_numpage, new_film)
print '\nnouvelle liste créée \n'
print 'modification de la liste locale'
modiflocal(msg)
print '\nmessage à envoyer sur le fil'
try :
if raw_input(msg2):
print "go go go"
modifpost(msg, msg2, login, password, postid, tid)
except :
print '\néchec des posts'
print 'sortie de la mise à jour'
quit()
if urltopic != newurl :
print 'modification du fichier local avec la nouvelle url'
print newurl
with open('tchernia', 'r') as file :
tchernia = file.readlines()
tchernia[0] = 'http://forum.ubuntu-fr.org/viewtopic.php?id='+tid+'\n'
with open('tchernia', 'w') as file :
file.writelines(tchernia)
print '\n ... mise à jour terminée '
if __name__ == "__main__":
main()
Dernière modification par lukophron (Le 13/11/2014, à 01:52)
Le danger avec les glands est qu'ils prennent racines.
Corneille
Hors ligne
#3 Le 04/11/2012, à 11:08
- GR 34
Re : [python]Monsieur Cinéscript
Je copie toujours le code que tu donnes en page 1 comme tu me l'avais dit !
Sinon j'ai copié celui-là et :
./misajour.py
File "./misajour.py", line 457
print 'opening [url=http://forum.ubuntu-fr.org/edit.php?id=+str(postid)]http://forum.ubuntu-fr.org/edit.php?id='+str(postid)[/url]
^
SyntaxError: invalid syntax
Karantez-vro... Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/
Hors ligne
#4 Le 04/11/2012, à 11:42
- lukophron
Re : [python]Monsieur Cinéscript
ok, on va rester ici histoire de ne pas s'embrouiller plus avant
j'ai mal posté et le forum a rajouté des balises automatiquement, je modifie ça, tu peux y aller, ça va passer...
Le danger avec les glands est qu'ils prennent racines.
Corneille
Hors ligne
#5 Le 04/11/2012, à 12:15
- GR 34
Re : [python]Monsieur Cinéscript
Voila :
./misajour.py
import: unable to grab mouse `': Ressource temporairement non disponible @ error/xwindow.c/XSelectWindow/9012.
import: unable to grab mouse `': Ressource temporairement non disponible @ error/xwindow.c/XSelectWindow/9012.
import: unable to grab mouse `': Ressource temporairement non disponible @ error/xwindow.c/XSelectWindow/9012.
import: unable to grab mouse `': Ressource temporairement non disponible @ error/xwindow.c/XSelectWindow/9012.
import: unable to grab mouse `': Ressource temporairement non disponible @ error/xwindow.c/XSelectWindow/9012.
import: unable to grab mouse `': Ressource temporairement non disponible @ error/xwindow.c/XSelectWindow/9012.
import: unable to grab mouse `': Ressource temporairement non disponible @ error/xwindow.c/XSelectWindow/9012.
from: can't read /var/mail/BeautifulSoup
./misajour.py: ligne 26: version : commande introuvable
./misajour.py: ligne 28: Erreur de syntaxe près du symbole inattendu « locale.LC_ALL,'fr_FR.utf8' »
./misajour.py: ligne 28: `locale.setlocale(locale.LC_ALL,'fr_FR.utf8')'
Karantez-vro... Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/
Hors ligne
#6 Le 04/11/2012, à 12:28
- lukophron
Re : [python]Monsieur Cinéscript
je te confirme que ça tourne chez moi, avec le code posté en #2
il manque peut-être les premières lignes chez toi (#!/usr/bin/env python, etc)
vérifie/refais ton copier-coller
Le danger avec les glands est qu'ils prennent racines.
Corneille
Hors ligne
#7 Le 04/11/2012, à 13:08
- grim7reaper
Re : [python]Monsieur Cinéscript
Je confirme, ça c’est la sortie d’un script python lu par un shell…
Hors ligne
#8 Le 04/11/2012, à 15:37
- GR 34
Re : [python]Monsieur Cinéscript
Je lance ton script dans une console et j'obtiens ça :
./misajour.py
import: unable to grab mouse `': Ressource temporairement non disponible @ error/xwindow.c/XSelectWindow/9012.
import: unable to grab mouse `': Ressource temporairement non disponible @ error/xwindow.c/XSelectWindow/9012.
import: unable to grab mouse `': Ressource temporairement non disponible @ error/xwindow.c/XSelectWindow/9012.
import: unable to grab mouse `': Ressource temporairement non disponible @ error/xwindow.c/XSelectWindow/9012.
import: unable to grab mouse `': Ressource temporairement non disponible @ error/xwindow.c/XSelectWindow/9012.
import: unable to grab mouse `': Ressource temporairement non disponible @ error/xwindow.c/XSelectWindow/9012.
import: unable to grab mouse `': Ressource temporairement non disponible @ error/xwindow.c/XSelectWindow/9012.
from: can't read /var/mail/BeautifulSoup
./misajour.py: ligne 26: version : commande introuvable
./misajour.py: ligne 28: Erreur de syntaxe près du symbole inattendu « locale.LC_ALL,'fr_FR.utf8' »
./misajour.py: ligne 28: `locale.setlocale(locale.LC_ALL,'fr_FR.utf8')'
Vous dites que ça marche mais alors pourquoi les deux derniers films : Friday et Trois Enfants Dans Le Désordre ne sont pas ajoutés à la liste ?
Karantez-vro... Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/
Hors ligne
#9 Le 04/11/2012, à 15:58
- grim7reaper
Re : [python]Monsieur Cinéscript
Le script a peut-être des bugs, mais le fait de lancer du Python avec un interpréteur Shell ça va pas aider hein
Essaye :
python misajour.py
Au moins tu seras sûr de lance le bon truc (et là, lukophron pourra commencer à débugger si nécessaire…).
Hors ligne
#10 Le 04/11/2012, à 16:28
- lukophron
Re : [python]Monsieur Cinéscript
refais ton copier-coller à partir de là!
si je le lance chez moi, je n'ai pas de soucis. Peut-être qu'il y a un soucis dans le script, mais pour l'instant c'est dans ta façon de l'utiliser, le problème. Et s'il y a un bug dans le script, il n'enverra pas le nouveau post, donc ne t'embête pas à chercher
Les nouveaux films ne sont pas ajoutés, parce j'ai fait exprès de ne pas envoyer le post, pour qu'on puisse être sûrs que tout va bien chez toi.
Comme tu peux voir, tout va bien, mais il n'envoie pas le post
mise à jour en cours... v0.9.1a
url du topic = http://forum.ubuntu-fr.org/viewtopic.php?id=831321
id du topic = 831321
récupération du message-liste
première page récupérée http://forum.ubuntu-fr.org/viewtopic.php?id=831321
message récupéré pour mise à jour
page en cours = 94
recherche des codes imdb sur la page 94
http://forum.ubuntu-fr.org/viewtopic.php?id=831321&p=94
['tt1302555', 'tt0188321']
recherche des codes imdb sur la page 95
http://forum.ubuntu-fr.org/viewtopic.php?id=831321&p=95
['tt0113118']
recherche des codes imdb sur la page 96
http://forum.ubuntu-fr.org/viewtopic.php?id=831321&p=96
['tt0187557', 'tt0084855']
page atteinte : 96
recherche des titres des nouveaux films sur imdb
appuyer sur 'o' ou 'n' pour accepter ou refuser un film
['tt0113118', 'tt0187557', 'tt0188321', 'tt0084855']
Balise : tt0113118
--- Accepter le titre : Friday (1995) ?o
titre ajouté
Balise : tt0187557
--- Accepter le titre : Trois enfants... dans le désordre (1966) ?o
titre ajouté
Balise : tt0188321
--- Accepter le titre : (Les) brûlés (1959) ?o
titre ajouté
Balise : tt0084855
--- Accepter le titre : (The) Verdict (1982) ?o
titre ajouté
recherche imdb terminée
nouveaux films :
['Friday (1995)', u'Trois enfants... dans le d\xe9sordre (1966)', u'(Les) br\xfbl\xe9s (1959)', '(The) Verdict (1982)']
message modifié, à envoyer
sauvegarde locale
ok, liste.bak mis à jour
... mise à jour terminée
Le danger avec les glands est qu'ils prennent racines.
Corneille
Hors ligne
#11 Le 04/11/2012, à 17:15
- GR 34
Re : [python]Monsieur Cinéscript
Là, ça a l'air de gazer impec !
~/Bureau/monsieur cinema$ python misajour.py
mise à jour en cours... v0.9.1a
url du topic = http://forum.ubuntu-fr.org/viewtopic.php?id=831321
id du topic = 831321
récupération du message-liste
première page récupérée http://forum.ubuntu-fr.org/viewtopic.php?id=831321
message récupéré pour mise à jour
page en cours = 94
recherche des codes imdb sur la page 94
http://forum.ubuntu-fr.org/viewtopic.php?id=831321&p=94
['tt1302555', 'tt0188321']
recherche des codes imdb sur la page 95
http://forum.ubuntu-fr.org/viewtopic.php?id=831321&p=95
['tt0113118']
recherche des codes imdb sur la page 96
http://forum.ubuntu-fr.org/viewtopic.php?id=831321&p=96
['tt0187557', 'tt0084855']
page atteinte : 96
recherche des titres des nouveaux films sur imdb
appuyer sur 'o' ou 'n' pour accepter ou refuser un film
['tt0113118', 'tt0187557', 'tt0188321', 'tt0084855']
Balise : tt0113118
--- Accepter le titre : Friday (1995) ?o
titre ajouté
Balise : tt0187557
--- Accepter le titre : Trois enfants... dans le désordre (1966) ?o
titre ajouté
Balise : tt0188321
--- Accepter le titre : (Les) brûlés (1959) ?o
titre ajouté
Balise : tt0084855
--- Accepter le titre : (The) Verdict (1982) ?o
titre ajouté
recherche imdb terminée
nouveaux films :
['Friday (1995)', u'Trois enfants... dans le d\xe9sordre (1966)', u'(Les) br\xfbl\xe9s (1959)', '(The) Verdict (1982)']
message modifié, à envoyer
sauvegarde locale
ok, liste.bak mis à jour
modification du post en cours...
misajour.py:447: DeprecationWarning: operating in backwards-compatibility mode
forms = ClientForm.ParseResponse(fp)
<POST http://forum.ubuntu-fr.org/login.php?action=in application/x-www-form-urlencoded
<HiddenControl(form_sent=1) (readonly)>
<HiddenControl(redirect_url=/login.php) (readonly)>
<TextControl(req_username=)>
<PasswordControl(req_password=)>
<SubmitControl(<None>=connexion) (readonly)>>
opening http://forum.ubuntu-fr.org/edit.php?id=8252041
misajour.py:459: DeprecationWarning: operating in backwards-compatibility mode
forms = ClientForm.ParseResponse(fp)
<GET http://forum.ubuntu-fr.org/search_ubuntufr.php application/x-www-form-urlencoded
<TextControl(q=Recherche rapide....)>
<SelectControl(tsearch=[wiki, *forum, planet])>
<SubmitControl(<None>=ok) (readonly)>>
modification faite
... mise à jour terminée
Karantez-vro... Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/
Hors ligne
#12 Le 04/11/2012, à 17:26
- lukophron
Re : [python]Monsieur Cinéscript
Dernière modification par monsieur cinéma (Aujourd'hui à 18:11)
ok cool
Je réfléchis à l'interface graphique, qui comportera aussi des améliorations au sujet de la recherche. Mais je ne sais pas si j'aurais le temps avant de repartir en vadrouilles (je peux en avoir plein comme pas du tout).
Du coup ça te va pour l'instant ? c'est fonctionnel comme script (intérêt/utilisation/rendu) ?
Le danger avec les glands est qu'ils prennent racines.
Corneille
Hors ligne
#13 Le 04/11/2012, à 17:29
- GR 34
Re : [python]Monsieur Cinéscript
Ça me semble bien, il reste à le préserver des malfaisants....
Karantez-vro... Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/
Hors ligne
#14 Le 04/11/2012, à 17:31
- GR 34
Re : [python]Monsieur Cinéscript
La mise à jour avec ton bébé est hyper agréable comparé à ce qu'il fallait faire avant tout à la mano....
Karantez-vro... Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/
Hors ligne
#15 Le 04/11/2012, à 17:42
- lukophron
Re : [python]Monsieur Cinéscript
Ok, tant mieux, on en reste là pour l'instant du coup.
Je garde un oeil pour le changement après 100 pages de topic.
Ça me semble bien, il reste à le préserver des malfaisants....
c'est-à-dire ?
Si tu parles de gars qui postent des fausses balises, oui faut être vigilants. Du coup, c'était bien vu de demander de passer par une validation pendant la mise à jour. Après si c'est fait exprès, ça ne devrait pas durer longtemps après signalement...
Le danger avec les glands est qu'ils prennent racines.
Corneille
Hors ligne
#16 Le 04/11/2012, à 17:44
- GR 34
Re : [python]Monsieur Cinéscript
Ok, tant mieux, on en reste là pour l'instant du coup.
Je garde un oeil pour le changement après 100 pages de topic.6steme1 a écrit :Ça me semble bien, il reste à le préserver des malfaisants....
c'est-à-dire ?
Si tu parles de gars qui postent des fausses balises, oui faut être vigilants. Du coup, c'était bien vu de demander de passer par une validation pendant la mise à jour. Après si c'est fait exprès, ça ne devrait pas durer longtemps après signalement...
Je pense que tu devrais effacer toutes les traces du script sur les topics et ne le poster que dans le mail de Monsieur cinéma comme ça seuls les détenteurs du code pourront mettre à jour comme cela se faisait à la main.
Dernière modification par 6steme1 (Le 04/11/2012, à 17:44)
Karantez-vro... Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/
Hors ligne
#17 Le 04/11/2012, à 18:07
- lukophron
Re : [python]Monsieur Cinéscript
Je pense que tu devrais effacer toutes les traces du script sur les topics et ne le poster que dans le mail de Monsieur cinéma comme ça seuls les détenteurs du code pourront mettre à jour comme cela se faisait à la main.
On en a déjà parlé :
Tu ne peux pas faire la mise à jour sans les codes de connexion de Monsieur Cinéma. Ils ne sont pas dans le script, mais dans un des deux fichiers joints. Ces fichiers joints (tchernia et liste.bak) sont effectivement envoyés sur le mail, donc et uniquement aux Messieurs Ciné.
Pas de soucis, on peut laisser le script.
Pour aller plus loin et t'expliquer avec le code (pas de panique ! on va faire simple ! euh, enfin essayer... ) :
Une fonction en prog c'est comme une fonction en math, elle prend une ou plusieurs valeurs et te renvoie une ou plusieurs valeurs.
Ca, c'est la fonction qui modifie la liste sur le forum :
def = fonction
modifpost = nom de la fonction
entre parenthèse, les variables
def modifpost(msg, login, password, postid):
[...]
tu vois 'login' et 'password' ?
bon, ce sont des variables, j'aurais pu les appeler x et y mais c'est moins clair ^^.
Elles ont une valeur. Cette valeur est définie là :
def main():
[...]
f = open('tchernia','r')
url = f.readline().rstrip('\n\r')
login = f.readline().rstrip('\n\r')
password = f.readline().rstrip('\n\r')
f.close()
[...]
la fonction principale ouvre le ficher 'tchernia' (open('tchernia')), lit les lignes (readline), et y trouve l'adresse web du topic cinéma, le login et mot de passe de Monsieur Cinéma. Donc ces codes d'accès ne sont pas directement dans le script.
Le danger avec les glands est qu'ils prennent racines.
Corneille
Hors ligne
#18 Le 04/11/2012, à 18:14
- GR 34
Re : [python]Monsieur Cinéscript
Ok, vu ! J'avais zappé les deux fichiers.
Sinon, les fonctions dans le Pascal, c'est pareil et je connais !
Karantez-vro... Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/
Hors ligne
#19 Le 04/11/2012, à 19:11
- lukophron
Re : [python]Monsieur Cinéscript
ok, ok !
Le danger avec les glands est qu'ils prennent racines.
Corneille
Hors ligne
#20 Le 23/11/2012, à 15:11
- lukophron
Re : [python]Monsieur Cinéscript
6steme1 tu peux faire la mise à jour stp ? (tant que je suis dispo)
normalement en deux fois : une pour l'ancien topique et passer au nouveau, la deuxième pour le nouveau topique.
avec les retours ici stp !
Le danger avec les glands est qu'ils prennent racines.
Corneille
Hors ligne
#21 Le 23/11/2012, à 16:26
- GR 34
Re : [python]Monsieur Cinéscript
Aïe ! (3eme essai)
~/Bureau/monsieur cinema$ ./misajour.py
mise à jour en cours... v0.9.1a
url du topic = http://forum.ubuntu-fr.org/viewtopic.php?id=831321
id du topic = 831321
récupération du message-liste
première page récupérée http://forum.ubuntu-fr.org/viewtopic.php?id=831321
message récupéré pour mise à jour
page en cours = 104
recherche des codes imdb sur la page 104
http://forum.ubuntu-fr.org/viewtopic.php?id=831321&p=104
['tt0330229', 'tt0084516', 'tt0217869']
topic fermé, recherche du nouveau topic
<p>Messieurs dames, <a href="http://forum.ubuntu-fr.org/viewtopic.php?pid=11591061#p11591061">on ferme</a>.</p>
Nouveau topic détecté: http://forum.ubuntu-fr.org/viewtopic.php?pid=11591061#p11591061
page atteinte : 1
recherche des titres des nouveaux films sur imdb
appuyer sur 'o' ou 'n' pour accepter ou refuser un film
[]
recherche imdb terminée
pas de nouveau film, donc
message modifié, à envoyer
sauvegarde locale
ok, liste.bak mis à jour
Topic changé, recherche du nouveau post
récupération du message-liste
première page récupérée http://forum.ubuntu-fr.org/viewtopic.php?id=11591061#p11591061
liste imdb absente ?
liste de titres absente ?
ID du post introuvable
Traceback (most recent call last):
File "./misajour.py", line 572, in <module>
main()
File "./misajour.py", line 547, in main
postid = recupost('http://forum.ubuntu-fr.org/viewtopic.php?id='+tid)[2]
File "./misajour.py", line 226, in recupost
raise
TypeError: exceptions must be old-style classes or derived from BaseException, not NoneType
Karantez-vro... Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/
Hors ligne
#22 Le 23/11/2012, à 17:35
- lukophron
Re : [python]Monsieur Cinéscript
ha, bah j'm'a trompé d'un caractère !
change ça, et roule ! (je crois...)
sed -i '/newurl/ s/&p/#p/' /CHEMIN/VERS/FICHIER/misajour.py
misajour.py
edit explicative :
première ligne "sed..." pour changer '&p' en '#p'
Dernière modification par lukophron (Le 23/11/2012, à 17:36)
Le danger avec les glands est qu'ils prennent racines.
Corneille
Hors ligne
#23 Le 23/11/2012, à 17:49
- GR 34
Re : [python]Monsieur Cinéscript
Retour :
~/Bureau/monsieur cinema$ ./misajour.py
mise à jour en cours... v0.9.1a
url du topic = http://forum.ubuntu-fr.org/viewtopic.php?id=831321
id du topic = 831321
récupération du message-liste
première page récupérée http://forum.ubuntu-fr.org/viewtopic.php?id=831321
message récupéré pour mise à jour
page en cours = 104
recherche des codes imdb sur la page 104
http://forum.ubuntu-fr.org/viewtopic.php?id=831321&p=104
['tt0330229', 'tt0084516', 'tt0217869']
topic fermé, recherche du nouveau topic
<p>Messieurs dames, <a href="http://forum.ubuntu-fr.org/viewtopic.php?pid=11591061#p11591061">on ferme</a>.</p>
Nouveau topic détecté: http://forum.ubuntu-fr.org/viewtopic.php?pid=11591061#p11591061
page atteinte : 1
recherche des titres des nouveaux films sur imdb
appuyer sur 'o' ou 'n' pour accepter ou refuser un film
[]
recherche imdb terminée
pas de nouveau film, donc
message modifié, à envoyer
sauvegarde locale
ok, liste.bak mis à jour
Topic changé, recherche du nouveau post
récupération du message-liste
première page récupérée http://forum.ubuntu-fr.org/viewtopic.php?id=11591061#p11591061
liste imdb absente ?
liste de titres absente ?
ID du post introuvable
Traceback (most recent call last):
File "./misajour.py", line 572, in <module>
main()
File "./misajour.py", line 547, in main
postid = recupost('http://forum.ubuntu-fr.org/viewtopic.php?id='+tid)[2]
File "./misajour.py", line 226, in recupost
raise
TypeError: exceptions must be old-style classes or derived from BaseException, not NoneType
Karantez-vro... Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/
Hors ligne
#24 Le 23/11/2012, à 18:27
- lukophron
Re : [python]Monsieur Cinéscript
bon, pas sûr que tu ais fait le 'sed'... mais c'est ma faute, j'aurais dû tester avant d'inclure ces modif' la dernière fois.
J'ai pas le temps là, je verrai ça ce we
tu peux faire la mise à jour en changeant la première ligne du fichier tchernia
remplace
http://forum.ubuntu-fr.org/viewtopic.php?id=831321
par
http://forum.ubuntu-fr.org/viewtopic.php?id=1112581
en ne modifiant rien d'autre (pas de nouvelle ligne, espace, etc)
Le danger avec les glands est qu'ils prennent racines.
Corneille
Hors ligne
#25 Le 23/11/2012, à 19:10
- GR 34
Re : [python]Monsieur Cinéscript
J'avais bien fait le 'sed' !
Bon, je remplace...
Now, everything is allright
Karantez-vro... Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/
Hors ligne