Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

nombre réponses : 25

#0 Re : -1 »  Les Roms... » Le 09/08/2014, à 10:54

lukophron
Réponses : 105
sounderk a écrit :

J'ai pas besoin d'aller au Philippine pour voir la Misère  Je sort de chez moi je la voie tous les jours   roll
C'est bien une optique de ''BoBo Branché " que d'aller voir ailleurs la Misére du Monde , Faut dire qu'un BoBo ça a le temps et le fric pour voyagé....   roll

Moi je ne sors même pas de chez moi, j'ouvre un forum. Tu sens la misère sociale à travers une misérable syntaxe, une piteuse orthographe, une ouverture d'esprit pathétiquement réduite (qui s'accompagne très souvent de phrases ou d'expressions répétées à tout propos), une pauvreté de culture attristante.

Pour ton information, quand on parle de misère en France, et de misère aux Philippines ou en Inde, on ne parle pas du tout de la même chose. Il y a de la misère en France, ce n'est simplement pas la même échelle. Mais avec le nombre d'abrutis misant sur l'individualisme, on arrivera à nouveau à penser la misère comme "naturelle", rassure-toi.

#1 Re : -1 »  [Projet]Faire avec les moyens à dispositions » Le 06/08/2014, à 09:27

lukophron
Réponses : 8

Salut,

Le besoin est clair : classifier, centraliser les informations, rendre leur utilisation fluide.
Mais sans avoir accès à un système sécurisé grâce au support du service info, tu risques de mettre ces dossiers trop facilement accessibles (j'imagine que les données perso peuvent être confidentielles). Le faire seul dans son coin ne t'apportera rien je pense.

Pourquoi ne pas faire un rapport à ton n+1, avec ton n+2 (voire n+3) et le service info en copie ? Si un supérieur te bloque, met le dans une boucle qui l'oblige à se dévoiler. Si ton responsable (n+1) n'y est pour rien, propose lui de faire le rapport et de lui laisser l'envoyer à la hiérarchie.
Propose une solution ou deux techniquement, en t'appuyant sur ce qui existe déjà dans ta boîte. Essaie de chiffrer (en coût, en heures, en productivité, en ce que tu peux) le montage et l'utilisation du projet (ex: 1 journée pour un mec du service info + une journée de tests/calibrages avec un utilisateur; temps passé par jour à faire des recherches vs nouveau temps de recherche; gain de sécurité probable ?). Le tout est de présenter l'intérêt pour ton poste, avec des exemples dans ceux que tu connais, et de laisser les autres prendre leurs responsabilités.

Le "rapport" est un bel outil pour enterrer des projets, mais c'est une arme à multiple tranchants.
J'ai déjà eu le cas de lenteur de prise de décision. On a torché un truc en 1 heure. On n'a jamais eu de réponse claire du n+2. Mais comme tout le monde était d'accord sur le besoin, ça s'est fait. Devant le fait accompli efficacement, il n'a que pu l'avaliser..

#2 Re : -1 »  [python]Monsieur Cinéscript » Le 05/09/2013, à 01:16

lukophron
Réponses : 174

je crois que tu peux MP à SOD, c'est son dada

#3 Re : -1 »  [python]Monsieur Cinéscript » Le 20/10/2013, à 06:29

lukophron
Réponses : 174

NB : déconnexion prévue vers fin décembre, faudra prévoir un relai
m'en fous de la mise en page, j'ai fait un test ce matin, pour le foune. Faites vos commentaires !

#4 Re : -1 »  [python]Monsieur Cinéscript » Le 10/02/2014, à 21:20

lukophron
Réponses : 174

bon, en fait j'ai déjà envoyé sur ce topic une version fonctionnelle, pas de changement. J'ai fourni la boite mail de Monsieur Cinéma aussi, pour faciliter la chose.

#5 Re : -1 »  [python]Monsieur Cinéscript » Le 15/05/2014, à 13:21

lukophron
Réponses : 174

Salut,

Suis de retour, demandez si besoin.

++

#6 Re : -1 »  [python]Monsieur Cinéscript » Le 16/05/2014, à 20:53

lukophron
Réponses : 174

ç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)

#7 Re : -1 »  [python]Monsieur Cinéscript » Le 17/05/2014, à 19:56

lukophron
Réponses : 174

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.

#8 Re : -1 »  [python]Monsieur Cinéscript » Le 17/05/2014, à 22:10

lukophron
Réponses : 174

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 ?

#10 Re : -1 »  [python]Monsieur Cinéscript » Le 19/06/2014, à 16:36

lukophron
Réponses : 174
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

#11 Re : -1 »  [python]Monsieur Cinéscript » Le 21/06/2014, à 06:27

lukophron
Réponses : 174

@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

#12 Re : -1 »  [python]Monsieur Cinéscript » Le 07/07/2014, à 09:49

lukophron
Réponses : 174
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é.

#13 Re : -1 »  [python]Monsieur Cinéscript » Le 09/07/2014, à 12:45

lukophron
Réponses : 174

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.

#14 Re : -1 »  [python]Monsieur Cinéscript » Le 09/07/2014, à 15:55

lukophron
Réponses : 174

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()

#15 Re : -1 »  [python]Monsieur Cinéscript » Le 17/07/2014, à 22:34

lukophron
Réponses : 174

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.

#16 Re : -1 »  [python]Monsieur Cinéscript » Le 18/07/2014, à 22:10

lukophron
Réponses : 174
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)

#17 Re : -1 »  [python]Monsieur Cinéscript » Le 05/08/2014, à 10:26

lukophron
Réponses : 174

(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)

#18 Re : -1 »  [python]Monsieur Cinéscript » Le 05/08/2014, à 20:50

lukophron
Réponses : 174

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

#19 Re : -1 »  Dernières suggestions pour ce courrier » Le 07/07/2014, à 10:47

lukophron
Réponses : 38

une grosse entreprise, genre amazon ?

#20 Re : -1 »  Dernières suggestions pour ce courrier » Le 07/07/2014, à 19:58

lukophron
Réponses : 38
Omniia a écrit :

Je pense que ça peut faire du mal de se dire que la "communauté Ubuntu" collabore avec une une entreprise qui peut nous gêner moralement parlant.

du genre amazon ?
(comme c'est pas passé à la première, je tente le comique de répétition...)

#21 Re : -1 »  Dernières suggestions pour ce courrier » Le 07/07/2014, à 20:08

lukophron
Réponses : 38

(je sais bien, c'est pour ça que j'ai viré ubuntu sans jamais cracher sur la communauté)

#22 Re : -1 »  Propriétaires devenus aberrants mais accès possible en console » Le 28/07/2014, à 10:24

lukophron
Réponses : 6

Salut,

sauvegarder, réinstaller
(tu vas galérer à retrouver tous les droits de tous les fichiers. Même si la majorité est évidente, ça va être le bordel dans les détails pour retrouver un système fonctionnel et sûr)

amha, ta machine est maintenant criblée de failles de sécurité, arrête d'ouvrir des sessions (droits sur la racine mis pour l'utilisateur, arrrf)
Sur le comment une opération sur une partition fat32 te pourrit ta partition dédiée LMDE, je ne sais pas, mais je trollerais bien sur la qualité de windows... wink

#23 Re : -1 »  pause électronique .post ouvert ... » Le 03/12/2013, à 01:55

lukophron
Réponses : 29

@sounderk
oui, c'est sympa de bricoler, et de voir qu'en 5 min tu peux réparer des trucs que d'autres auraient jetés.
Si tu veux vraiment te lancer dans l'électronique, je te conseille d'investir dans une hotte (ou d'en bricoler une, c'est pas les ventilo qui manquent dans une déchetterie...). Les vapeurs d'étain et autres sont très toxiques. Si tu soudes une fois l'an, pas de quoi s'inquiéter, mais si c'est régulier, protège tes bronches !

#24 Re : -1 »  Mon script ignore des dossiers... » Le 07/09/2013, à 02:10

lukophron
Réponses : 8

Salut,

Ton script se paume dans l'arborescence.
Une idée serait de faire

for d in *; do
    ...
    for da in $d/*; do
        ...
        for f in $d/$da/*.flac; do
            ...

et vire les "cd .." qui ne servent à rien et sont mal placés.

Au passage, tu peux voir que cette triple boucle imbriquée, ce n'est peut-être pas la meilleure solution ^^