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.

#151 Le 08/03/2014, à 15:22

GR 34

Re : [python]Monsieur Cinéscript

xabilon a écrit :

Envois-moi plutôt le mdp de Mr Cinéma pour lancer un nouveau topic (je n'y ai pas accès, les mots de passe sont cryptés dans la base de données).
Si je le crée avec mon compte xabilon, il n'y aura que moi qui pourra mettre la liste à jour.

Fait. smile


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

#152 Le 08/03/2014, à 15:36

xabilon

Re : [python]Monsieur Cinéscript

Reçu, merci, mais je ferai ça plus tard, là j'ai pas le temps.


Pour passer un sujet en résolu : modifiez le premier message et ajoutez [Résolu] au titre.

Hors ligne

#153 Le 15/05/2014, à 13:21

lukophron

Re : [python]Monsieur Cinéscript

Salut,

Suis de retour, demandez si besoin.

++


Le danger avec les glands est qu'ils prennent racines.
Corneille

Hors ligne

#154 Le 15/05/2014, à 16:06

spinoziste

Re : [python]Monsieur Cinéscript

Lukphron est reviendu !


Nous mourrons tous .

Hors ligne

#155 Le 15/05/2014, à 16:22

GR 34

Re : [python]Monsieur Cinéscript

lukophron a écrit :

Salut,

Suis de retour, demandez si besoin.

++

salut !


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

#156 Le 16/05/2014, à 20:53

lukophron

Re : [python]Monsieur Cinéscript

ça gaze ?
p18 à 46

Balise tt0000001 :  Carmencita (1894)
Balise tt0082776 :  Ms. 45 (1981)
Balise tt2860720 :  (The) Auction (2013)
Balise tt0069235 :  (L') argent de la vieille (1972)
Balise tt0044186 :  Vengeance Valley (1951)
Balise tt2668134 :  Albator, corsaire de l'espace (2013)
Balise tt2351310 :  Pandémie (2013)
Balise tt0164181 :  Stir of Echoes (1999)
Balise tt2316411 :  Enemy (2013)
Balise tt0090729 :  Biggles: Adventures in Time (1986)
Balise tt0039152 :  Angel and the Badman (1947)
Balise tt0068420 :  And Hope to Die (1972)
Balise tt1068953 :  House of Good and Evil (2013)
Balise tt0387808 :  Idiocracy (2006)
Balise tt0072951 :  Escape to Witch Mountain (1975)
Balise tt0000010 :  Employees Leaving the Lumière Factory (1895)
Balise tt2317225 :  (The) Machine (2013)
Balise tt1371630 :  Air Doll (2009)
Balise tt1321865 :  Carlos the Jackal 2010)
Balise tt0062870 :  Deadly Sanctuary (1969)
Balise tt0053388 :  Battle in Outer Space (1959)
Balise tt0385635 :  Dans une galaxie près de chez vous
Balise tt0047195 :  Louis II de Bavière (1955)
Balise tt0790636 :  Dallas Buyers Club (2013)
Balise tt1032854 :  Terror's Advocate (2007)
Balise tt0092718 :  Can't Buy Me Love (1987)
Balise tt0073650 :  Salò, or the 120 Days of Sodom (1975)
Balise tt0327056 :  Mystic River (2003)
Balise tt2458582 :  Ésimésac (2012)
Balise tt0040766 :  Secret Beyond the Door... (1947)
Balise tt0310775 :  Sympathy for Mr. Vengeance (2002)
Balise tt2304662 :  Be My Slave (2012)
Balise tt0044837 :  Limelight (1952)

Le danger avec les glands est qu'ils prennent racines.
Corneille

Hors ligne

#157 Le 17/05/2014, à 18:58

Compte anonymisé

Re : [python]Monsieur Cinéscript

Merci lukophron pour la rectification de la liste au sujet du film "Le démantèlement".En plus le film a deux titres anglais différent.
"The Auction" et "The Dismantlement".

http://subscene.com/subtitles/the-aucti … ian/901712

#158 Le 17/05/2014, à 19:56

lukophron

Re : [python]Monsieur Cinéscript

Ce n'est pas moi Loup, et ce n'est pas corrigé correctement (ça va disparaître à la prochaine màj)

Merci d'avoir pointé l'erreur, c'est très utile.
A première vue, ça vient du fait que maintenant IMDB affiche le "titre original" en VO et le "titre original" dans la langue repérée sur la navigateur (sur la page release info), du coup ma recherche s'embrouille.

laissez comme c'est pour l'instant, ça me servira de test.


Le danger avec les glands est qu'ils prennent racines.
Corneille

Hors ligne

#159 Le 17/05/2014, à 20:05

xabilon

Re : [python]Monsieur Cinéscript

C'est moi qui ai corrigé, mais seulement dans la liste "lisible par les humains"


Pour passer un sujet en résolu : modifiez le premier message et ajoutez [Résolu] au titre.

Hors ligne

#160 Le 17/05/2014, à 22:10

lukophron

Re : [python]Monsieur Cinéscript

ok, c'est corrigé, je poste le code modifié asap.


Mais j'ai un nouveau bug (ouéééé....):
les accents semblent perturber la recherche. Par exemple, je recherche "demant" ou "démant" ou "mante", Iceweasel ne trouve rien. Si je cherche "mant", il me trouve bien "démantèlement". C'est pareil chez vous ?


Le danger avec les glands est qu'ils prennent racines.
Corneille

Hors ligne

#161 Le 17/05/2014, à 22:30

xabilon

Re : [python]Monsieur Cinéscript

Oui, mais à mon avis c'est un souci de caractères sur ce titre précis, il n'y a aucun problème à trouver "la dénonciation".

Edit : exact, compare ces deux mots, surtout les deux lettres accentuées :

démantèlement   ---> celui qui est dans la liste
démantèlement   ---> celui que j'écris normalement

Dernière modification par xabilon (Le 17/05/2014, à 22:34)


Pour passer un sujet en résolu : modifiez le premier message et ajoutez [Résolu] au titre.

Hors ligne

#162 Le 14/06/2014, à 18:36

lukophron

Re : [python]Monsieur Cinéscript


Le danger avec les glands est qu'ils prennent racines.
Corneille

Hors ligne

#163 Le 19/06/2014, à 16:36

lukophron

Re : [python]Monsieur Cinéscript

caillouxrongeur a écrit :

Pour le dernier, est il possible de mettre le titre francais, "la merditude des choses" ? Ca facilitera la recherche à ceux qui n'ont pas le reflexe de rechercher directement la balise imdb.

c'pareil pour le script


Le danger avec les glands est qu'ils prennent racines.
Corneille

Hors ligne

#164 Le 21/06/2014, à 06:27

lukophron

Re : [python]Monsieur Cinéscript

@Yann_001
j'ai pas compris pour wikipédia
pour avoir ça

Balise tt1075110 :  (La) merditude des choses (De helaasheid der dingen) (2009)

il suffit de prendre les deux titres sur imdb, sur la page releaseinfo
J'ai la fonction prête par une ancienne version, avec une ligne changée :

def titrimdb(films, dernier):
    # cherche les titres des films en fonction de leur numéro imdb
    print '\nrecherche des titres des nouveaux films sur imdb'
    print films
    nouvfilm = []

    title = re.compile('<title>(.*?)</title>')
    tab = re.compile('<td>(.*?)</td>')
    
    cookieJar = mechanize.CookieJar()
    handlers = [ 
        urllib2.HTTPHandler(),
        urllib2.HTTPCookieProcessor(cookieJar),
        ]   
    opener = urllib2.build_opener(*handlers)
    headers = {
   'Accept': 'text/html,application/xhtml+xml,'\
             'application/xml;q=0.9,*/*;q=0.8',
   'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
   'Accept-Language': 'en-US,en;q=0.8,fr;q=0.6',
   'Connection': 'keep-alive',
   'User-Agent': 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.19 '\
                 '(KHTML, like Gecko) Ubuntu/12.04 '\
                 'Chromium/18.0.1025.151 Chrome/18.0.1025.151 '\
                 'Safari/535.19',
    }
    
    for i in films:
        page = ''
        url='http://www.imdb.com/title/'+i+'/releaseinfo'
        for j in range(5):
            print 'Balise '+i+' : ',
            try :   
                request = urllib2.Request(
                    url=url, 
                    headers=headers
                )
                connection = opener.open(request)
                if connection.geturl()==url:
                    page = connection.read()
                else :
                    print "\nATTENTION : vérifier la balise "+i+'\n'
                break
            except urllib2.HTTPError, exc:
                if exc.code == 404:
                    print "404 Page non trouvée !"
                    print "\nATTENTION : vérifier la balise "+i+'\n'
                    break
                else:           
                    print "La requête HTTP a échoué avec le code %d (%s)" % (exc.code, exc.msg)
                    print "\nATTENTION : vérifier la balise "+i+'\n'
                    break
            except urllib2.URLError, exc:
                print "Echec. Cause:", exc.reason
                print 'page imdb inaccessible, nouvelle tentative dans 3 secondes'
                if j==4:
                    print 'échec de connection avec IMDb - sortie'
                    raise
                time.sleep(3)
        
        original = ''
       
        titre = title.search(page).group(1)
        titre = unescape(titre)
        titre = titre.split(' - ')[0]
        
        tableau = tab.findall(page)

        for k in tableau :
            if 'original title' in k.lower() :
                if original : 
                    original += ' ('+unescape(tableau[tableau.index(k)+1])+')'
                else :
                    original = unescape(tableau[tableau.index(k)+1])
                date = titre.split().pop()
        if original != '' :
            titre = original+' '+date
        if titre[:2].lower() in ["l'","d'"] :
            titre = titre[:2]+' '+titre[2:]
        titest = titre.split()
        if titest[0].lower() in ['le','la','les',"l'",'the','a']: # vérifier le formatage voulu (mon, ma, mes ?)
            titest[0]='('+titest[0]+')'
            titre = ' '.join(titest)
        
        titre = cleanString(titre)
        print titre
        nouvfilm.append(titre)
        if i == dernier[1] :
            dernier[0] = titre
        time.sleep(1)

    print 'recherche imdb terminée' 
    if nouvfilm == []:
        print 'pas de nouveau film, donc'
    else :
        print '\ntitres ajoutés :'
        print ' ; '.join(nouvfilm)
    return nouvfilm, dernier

Le danger avec les glands est qu'ils prennent racines.
Corneille

Hors ligne

#165 Le 07/07/2014, à 09:49

lukophron

Re : [python]Monsieur Cinéscript

yann_001 a écrit :

C'est à dire le titre francophone et anglophone ou plutôt celui d'origine pour les films d'autres contrées.

la formulation n'est pas claire, pardon, tu veux faire quoi ?

for k in tableau :
            if 'original title' in k.lower() :
                if original and original != unescape(tableau[tableau.index(k)+1]):
                    original += ' ('+unescape(tableau[tableau.index(k)+1])+')'
                else :
                    original = unescape(tableau[tableau.index(k)+1])

ceci (dans titrimdb) récupère tous les titres originaux

Cibler uniquement le titre franco-français n'a pas créé de consensus, la dernière fois qu'on en a parlé.


Le danger avec les glands est qu'ils prennent racines.
Corneille

Hors ligne

#166 Le 09/07/2014, à 11:18

yann_001

Re : [python]Monsieur Cinéscript

Bonjour.

lukophron a écrit :
yann_001 a écrit :

C'est à dire le titre francophone et anglophone ou plutôt celui d'origine pour les films d'autres contrées.

la formulation n'est pas claire, pardon, tu veux faire quoi ?

En clair je voudrais faire en sorte que le script indique le nom francophone du film et celui de son pays d'origine.
Exemple  avec ce film. La balise lui a fait récupérer le titre français et il n'apparait dans la liste que sous ce nom.

Des fois c'est le titre d'origine qui apparait pour certains films alors qu'il a été proposé avec le titre francophone mais pas toujours.
Donc j'essaie de trouver le moyen pour qu'il affiche les deux (titre français et du pays d'origine), mais ça ne fonctionne pas à tous les coups.

J'espère avoir été plus clair. wink

Je vais remettre un peu d'ordre dans ma version du script parce que j'ai testé tellement de trucs qu'il en est devenu bordélique, que me retrouve avec plein de choses qui vont plus et je le posterai.
Là ayant une connexion qui merde sérieux je peux pas tester dans de bonnes conditions. À moins de le faire à 3 heures du matin ou de lancer une à une la récupération de chaque balise mais ça prend un temps fou.

Hors ligne

#167 Le 09/07/2014, à 12:45

lukophron

Re : [python]Monsieur Cinéscript

pour ton exemple "Joey" : c'est le titre original. Il se trouve que, pour une fois, c'est aussi le titre français. Je ne vois pas le problème, du coup.

Si tu regardes sur imdb, maintenant tu as souvent deux (original title), je ne sais pas trop pourquoi (production multiple ?). Si tu veux cibler le titre français, il suffit de rechercher "France" dans le tableau 'release info'. Mais ça risque de faire plusieurs titres originaux, plus le titre français. Trois ou quatre titres d'affilé, ça fait long.

Pour les tests, en attendant que tu ais ta connexion, donne tes idées ici (fonctions ou passages de code). Je peux les implanter dans le script, tester, et faire le retour ici pour qu'on en discute.

Je poste sous peu ma propre version de travail commentée.


Le danger avec les glands est qu'ils prennent racines.
Corneille

Hors ligne

#168 Le 09/07/2014, à 15:55

lukophron

Re : [python]Monsieur Cinéscript

quelques correctifs effectués

pour l'un d'eux, merci à xabilon qui m'a amené à réfléchir sur des bugs éventuels. Ça passait mais pouvait faire un mini-bug sur le "dernier film trouvé". Pas méchant mais maintenant c'est bcp plus joli wink
ligne 204, recupbalise :

titre = []
[titre.append(x) for x in titrex.findall(page)\
if (x not in old_imdb and x not in titre)]

voilà ce que ça donne (non posté pour nous permettre de faire des tests sans s'emm...)

mise à jour en cours... v1.1.1
id du topic en cours = 1517951
récupération du message-liste
http://forum.ubuntu-fr.org/viewtopic.php?id=1517951
première page récupérée http://forum.ubuntu-fr.org/viewtopic.php?id=1517951

 message récupéré pour mise à jour

page en cours = 81
recherche des codes imdb sur la page 81
http://forum.ubuntu-fr.org/viewtopic.php?id=1517951&p=81
[]
recherche des codes imdb sur la page 82
http://forum.ubuntu-fr.org/viewtopic.php?id=1517951&p=82
['tt0104804']
recherche des codes imdb sur la page 83
http://forum.ubuntu-fr.org/viewtopic.php?id=1517951&p=83
['tt0165078']
recherche des codes imdb sur la page 84
http://forum.ubuntu-fr.org/viewtopic.php?id=1517951&p=84
[]
recherche des codes imdb sur la page 85
http://forum.ubuntu-fr.org/viewtopic.php?id=1517951&p=85
['tt0986233']
recherche des codes imdb sur la page 86
http://forum.ubuntu-fr.org/viewtopic.php?id=1517951&p=86
['tt0275277']
recherche des codes imdb sur la page 87
http://forum.ubuntu-fr.org/viewtopic.php?id=1517951&p=87
['tt0033870']
page atteinte : 87


recherche des titres des nouveaux films sur imdb
['tt0986233', 'tt0104804', 'tt0275277', 'tt0033870', 'tt0165078']
Balise tt0986233 :  Hunger (2008)
Balise tt0104804 :  Man Trouble (1992)
Balise tt0275277 :  Cowboy Bebop: Tengoku no tobira (2001)
Balise tt0033870 :  (The) Maltese Falcon (1941)
Balise tt0165078 :  Wandâfuru raifu (1998)
recherche imdb terminée

titres ajoutés :
[u'Hunger (2008)', u'Man Trouble (1992)', u'Cowboy Bebop: Tengoku no tobira (2001)', u'(The) Maltese Falcon (1941)', u'Wanda\u0302furu raifu (1998)']

le choix du jour : Zombie King and the legion of Doom
recherche d'une image...
http://www.bing.com/images/search?q=movie+Zombie+King+and+the+legion+of+Doom&adlt=off
http://media-cache-ak0.pinimg.com/736x/f9/65/4f/f9654f7403aa9d1240273966609c57a8.jpg
envoi de l'image pour modif' en ligne
envoi du formulaire
image réduite accessible : http://s30.postimg.org/n3wammopp/f9654f7403aa9d1240273966609c57a8.jpg

nouvelle liste créée 

modification de la liste locale
ok, liste.bak mis à jour
Bonjour,
mise à jour effectuée depuis la page 81 jusqu'à la page 87
    
    Merci d'errer les signalements[code]
    Balise tt0986233 : Hunger (2008)
    Balise tt0104804 : Man Trouble (1992)
    Balise tt0275277 : Cowboy Bebop: Tengoku no tobira (2001)
    Balise tt0033870 : (The) Maltese Falcon (1941)
    Balise tt0165078 : Wandâfuru raifu (1998)[/code]

le code de travail qui génère la sortie ci-dessus, pas mal remanié alors de mémoire :
- bug pour l'affichage d'un titre au hasard réglé, je crois
- stop dans la mise à jour juste avant l'envoi (ctrl+c pour arrêter, <enter> pour continuer normalement)
- pleins de détails insignifiants mais vachement bien trouvés ^^

#!/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
#
# un fichier joint pour accéder au compte
#   deux fichiers créés pour sauvegarder la liste et le log
#
# licence internationale DTFWYW
# licence fr SCVSVPTPUB

import urllib2
import locale
import re
import time
import mechanize
import htmlentitydefs
import unicodedata


from random import choice

version = 'v1.1.1'

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 = urllib2.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 = urllib2.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 = titrex.findall(page)
        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 = listall + titre
        
        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

    listall = list(set(listall))

    return numpage, listall, newurl, dernier


def titrimdb(films, dernier):
    # cherche les titres des films en fonction de leur numéro imdb
    print '\nrecherche des titres des nouveaux films sur imdb'
    print films
    nouvfilm = []

    title = re.compile('<title>(.*?)</title>')
    tab = re.compile('<td>(.*?)</td>')
    
    cookieJar = mechanize.CookieJar()
    handlers = [ 
        urllib2.HTTPHandler(),
        urllib2.HTTPCookieProcessor(cookieJar),
        ]   
    opener = urllib2.build_opener(*handlers)
    headers = {
   'Accept': 'text/html,application/xhtml+xml,'\
             'application/xml;q=0.9,*/*;q=0.8',
   'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
   'Accept-Language': 'en-US,en;q=0.8,fr;q=0.6',
   'Connection': 'keep-alive',
   'User-Agent': 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.19 '\
                 '(KHTML, like Gecko) Ubuntu/12.04 '\
                 'Chromium/18.0.1025.151 Chrome/18.0.1025.151 '\
                 'Safari/535.19',
    }
    
    for i in films:
        page = ''
        url='http://www.imdb.com/title/'+i+'/releaseinfo'
        for j in range(5):
            print 'Balise '+i+' : ',
            try :   
                request = urllib2.Request(
                    url=url, 
                    headers=headers
                )
                connection = opener.open(request)
                if connection.geturl()==url:
                    page = connection.read()
                else :
                    print "\nATTENTION : vérifier la balise "+i+'\n'
                break
            except urllib2.HTTPError, exc:
                if exc.code == 404:
                    print "404 Page non trouvée !"
                    print "\nATTENTION : vérifier la balise "+i+'\n'
                    break
                else:           
                    print "La requête HTTP a échoué avec le code %d (%s)" % (exc.code, exc.msg)
                    print "\nATTENTION : vérifier la balise "+i+'\n'
                    break
            except urllib2.URLError, exc:
                print "Echec. Cause:", exc.reason
                print 'page imdb inaccessible, nouvelle tentative dans 3 secondes'
                if j==4:
                    print 'échec de connection avec IMDb - sortie'
                    raise
                time.sleep(3)
        
        original = ''
        
        titre = title.search(page).group(1)
        titre = unescape(titre)
        titre = titre.split(' - ')[0]
        
        tableau = tab.findall(page)

        for k in tableau :
            if 'original title' in k.lower() :
                if original and original != unescape(tableau[tableau.index(k)+1]):
                    original += ' ('+unescape(tableau[tableau.index(k)+1])+')'
                else :
                    original = unescape(tableau[tableau.index(k)+1])
                date = titre.split().pop()
        if original != '' :
            titre = original+' '+date
        if titre[:2].lower() in ["l'","d'"] :
            titre = titre[:2]+' '+titre[2:]
        titest = titre.split()
        if titest[0].lower() in ['le','la','les',"l'",'the','a']: # vérifier le formatage voulu (mon, ma, mes ?)
            titest[0]='('+titest[0]+')'
            titre = ' '.join(titest)
        
        titre = cleanString(titre)
        print titre
        nouvfilm.append((i, titre))
        if i == dernier[1] :
            dernier[0] = titre
        time.sleep(1)

    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...'
    
    # modifie le post liste
    for i in range(5) :
        try :
			print 'modification du post-liste'
			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()
			
			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()
			#print forms[0]
			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()
			#print forms2[0]
			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 = urllib2.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"]
    #print form
    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:&quot;(.*?)&quot;', 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
    #`a changer si liste à part
    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'
    
    #s1 = set(new_imdb)
    #s2 = set(old_imdb)    
    #new_imdb = list(s1-s2)
    
    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)
    
    #cherchpic = choice(new_liste)
    cherchpic = choice(new_liste).decode('utf8', 'ignore').encode('ascii', 'ignore')
    print "\nle choix du jour : "+cherchpic
    try :
        ima = urllib2.unquote(getpic(cleanString(cherchpic)))
        thumb = sendimage('http://postimage.org/index.php?um=web', ima)
    except :
        print "bug python, choix annulé"
        cherchpic = "python"
        ima = urllib2.unquote(getpic(cherchpic))
        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]"	
    
    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)
    
    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 '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)
            
    try :
        if raw_input(msg2):
            print "go go go"

        modifpost(msg, msg2, login, password, postid, tid)
    except :
        print '\néchec des posts'
    
    print '\n ... mise à jour terminée '


if __name__ == "__main__":
    main()

Le danger avec les glands est qu'ils prennent racines.
Corneille

Hors ligne

#169 Le 17/07/2014, à 21:11

yann_001

Re : [python]Monsieur Cinéscript

Bonsoir lukophron

lukophron a écrit :

pour ton exemple "Joey" : c'est le titre original. Il se trouve que, pour une fois, c'est aussi le titre français. Je ne vois pas le problème, du coup.

Non le titre original est Making Contact et le titre français est Joey.
J'ai plusieurs milliers de VHS des années 70/80 avec le nom français qui ne colle pas avec le nom d'origine.

Après les vacances je poste un script . smile

Hors ligne

#170 Le 17/07/2014, à 22:34

lukophron

Re : [python]Monsieur Cinéscript

Salut Yann,

"Making Contact" est le titre en anglais. C'est une production allemande, sortie pour ses premières en Autriche et RFA, sous le titre original "Joey".
Il peut y avoir des erreurs sur IMDb, cela dit.
Bon, passons.


Il est possible, et sans trop se prendre la tête, de récupérer le titre franco-français. Je ne suis pas trop pour, mais bon...

voilà l'idée :
dans la fonction titrimdb :

for k in tableau :
    if 'original title' in k.lower() :
    [...]

dans la même boucle, rajouter un deuxième test sur le même modèle

if 'France' in k.lower() :

Mais je ne sais pas si tu te bases sur ce script ou si tu es reparti de zéro.


Le danger avec les glands est qu'ils prennent racines.
Corneille

Hors ligne

#171 Le 18/07/2014, à 20:40

yann_001

Re : [python]Monsieur Cinéscript

Bonsoir lukophron.

lukophron a écrit :

Il est possible, et sans trop se prendre la tête, de récupérer le titre franco-français. Je ne suis pas trop pour, mais bon...

Je pense que l'on va réussir à se comprendre à un moment ou un autre. big_smile wink

Le truc c'est vrai que je voudrais que le titre franco-français soit récupéré parce qu'il y a eu pas mal de doublon à cause de la récupération uniquement du titre d'origine.
De plus comme avait dit Loup2 qui avait posté un film canadien avec un titre ''origine'' francophone, le script avait récupéré le titre anglophone qui n'était pas celui d'origine puisque le titre d'origine était francophone.
J'espère que tu as compris ce que je voulais dire. big_smile

lukophron a écrit :

Mais je ne sais pas si tu te bases sur ce script ou si tu es reparti de zéro.

J'en ai fait plusieurs. Certains sont basés sur le tien, d'autres sur le plugin de Gcstar et d"autres des délires.
Comme je n'ai pas pris de note et que ma connexion merde je n'ai pas pu continuer les tests et je ne sais plus lesquels fonctionnent  ''pratiquement'' comme je veux et ceux qui ne fonctionnent pas.

La semaine prochaine je change de FAI . Je devrais retrouver une connexion plus acceptable que mes 4 k/s en journée et pouvoir tester le tout mais les vacances arrivant et ma famille avec je n'aurais pas trop le temps de tester et me connecter.

Je vais essayer à mes moments perdus de faire un script pour t'expliquer plus précisément où je veux en venir.

En tout cas tu as fait un beau boulot mec et je te souhaite de bonnes vacances. wink

Hors ligne

#172 Le 18/07/2014, à 22:10

lukophron

Re : [python]Monsieur Cinéscript

yann_001 a écrit :

Le truc c'est vrai que je voudrais que le titre franco-français soit récupéré parce qu'il y a eu pas mal de doublon à cause de la récupération uniquement du titre d'origine.

J'y vois un problème d'interface clavier-chaise. tongue

De plus comme avait dit Loup2 qui avait posté un film canadien avec un titre ''origine'' francophone, le script avait récupéré le titre anglophone qui n'était pas celui d'origine puisque le titre d'origine était francophone.

oui, j'ai expliqué pourquoi et corrigé pour adapter au nouveau choix de IMDb. On a des pb tous les six mois quand ils changent leur mise en page. Je pense que la meilleure solution serait un serveur qui fait tourner le script en se basant sur la Db en local (on peut la télécharger). Si jamais t'es inspiré wink

J'espère que tu as compris ce que je voulais dire. big_smile

Ben... oui, j'avais compris, je maintiens mon avis, qui n'est qu'un avis.

J'en ai fait plusieurs. Certains sont basés sur le tien, d'autres sur le plugin de Gcstar et d"autres des délires.
Comme je n'ai pas pris de note et que ma connexion merde je n'ai pas pu continuer les tests et je ne sais plus lesquels fonctionnent  ''pratiquement'' comme je veux et ceux qui ne fonctionnent pas.

La semaine prochaine je change de FAI . Je devrais retrouver une connexion plus acceptable que mes 4 k/s en journée et pouvoir tester le tout mais les vacances arrivant et ma famille avec je n'aurais pas trop le temps de tester et me connecter.

Et bon courage, et bonnes vacances à toi !
edit : et ça tombe bien que tu reprennes, je vais déconnecter sous peu (je suis parfois dans des endroits où tes 4ko/s me feraient rêver ^^)


Sinon, je viens de voir que plusieurs films n'ont pas été récupérés en début de topic, à cause d'un espace entre la balise et les "tt". C'est d'ailleurs comme ça que j'ai tilté sur un certain changement de pseudo. fufifuuuuuuuu
(j'me note à moi-même de repasser le script 12C4)

Dernière modification par lukophron (Le 18/07/2014, à 22:18)


Le danger avec les glands est qu'ils prennent racines.
Corneille

Hors ligne

#173 Le 05/08/2014, à 10:26

lukophron

Re : [python]Monsieur Cinéscript

(j'me note à moi-même de repasser le script 12C4)

liste des balises non prises en compte, vérif auto avec recherche élargie :

page 2 : tt0090376
page 5 : tt0062626
page 8 : tt2134092
page 10 : tt0074156
page 12 : tt0140384
page 26 : tt0114069
page 39 : tt0249462
page 55 : tt0297107
page 78 : tt00000001
page 81 : tt00000001
page 84 : tt0105001

vérif manuelle
page 2 : tt0090376, espace inséré dans la balise
page 5 : tt0062626, espace inséré dans la balise
page 8 : tt2134092, espace inséré dans la balise
page 10 : tt0074156, espace inséré dans la balise
page 12 : tt0140384, lien imdb, à ignorer
page 26 : tt0114069, lien imdb, à ignorer
page 39 : tt0249462, lien imdb, à ignorer
page 55 : tt0297107, lien imdb, à ignorer
page 78, page 81 : tt00000001, mauvais num (trop de zéro), le bon num (tt0000001) est déjà pris
page 84 : tt0105001, slash inséré dans la balise

films à récupérer : tt0090376 tt0062626 tt2134092 tt0074156 tt0105001

balises incorrectes : 1* raspouille, 4* yann_001

nota : dans le regex, rajouter un ou deux caractères quelconque avant et après la balise ?

titrex = re.compile('[\[imdb\]|\[*\]](tt\d+)[\[/imdb\]|\[/*\]]', re.I)

Dernière modification par lukophron (Le 05/08/2014, à 10:34)


Le danger avec les glands est qu'ils prennent racines.
Corneille

Hors ligne

#174 Le 05/08/2014, à 12:35

yann_001

Re : [python]Monsieur Cinéscript

Bon j'ai supprimé le slash pour la balise tt0105001

L'espace pour la balise tt0074156 et  tt0062626. Je ne peux pas le faire pour la balise tt0090376 parce que c'est mon ancien compte qui a été supprimé. Il faudrait que xabilon édite le message pour supprimer l'espace.

Désolé je n'avais pas fait attention qu'il y avait un espace. C'est en faisant le copié/collé que cela a dû arriver.

Hors ligne

#175 Le 05/08/2014, à 20:50

lukophron

Re : [python]Monsieur Cinéscript

cpas grave, et c déjà repris, pas de soucis
c'était juste pour info, pour garder un oeil sur les balises qui passent ou pas.
Sur 100 pages, 5 valables non prises


Le danger avec les glands est qu'ils prennent racines.
Corneille

Hors ligne