Advertisement
Guest User

FCM 72 - cherche_fichiers_tv-2.py​​

a guest
Aug 18th, 2013
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.61 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import os
  5. from os.path import join, getsize, exists
  6. import sys
  7. import apsw
  8. import re
  9. from xml.etree import ElementTree as ET
  10. import urllib
  11. import string
  12. from TvRage import TvRage
  13.  
  14. #=========================================
  15. def RecupereSaisonEpisode(nomfic):
  16.     Continuer = False
  17.     nomfic = nomfic.upper()
  18.    
  19.     # devrait trouver des noms de fichiers de type multi episode .S01E01.S01E02
  20.     rep = re.search(r'(.*)\.s(\d{1,2})e(\d{1,2})\.s(\d{1,2})e(\d{1,2})',nomfic, re.I)
  21.     if rep:
  22.         nomEmission = rep.group(1)
  23.         Continuer = True  
  24.     else:
  25.         # devrait trouver SddEdd ou sddedd
  26.         rep = re.search(r'(.*).S(\d\d?)E(\d\d?)(\.*)', nomfic, re.I)  
  27.         if rep:
  28.             nomEmission = rep.group(1)
  29.             Continuer = True
  30.         else:
  31.             # cherche ddxdd
  32.             #rep = re.search(r'(.*).(\d\d?)x(\d\d?)(\.*)', nomfic, re.I)
  33.             rep = re.search(r'(.*)\.(\d{1,2})x(\d{1,2})(.*)', nomfic, re.I)
  34.             if rep:
  35.                 nomEmission = rep.group(1)
  36.                 Continuer = True
  37.             else:
  38.                 # cherche Sdddd
  39.                 rep = re.search(r'(.*).S(\d\d)(.\d\d?)' , nomfic, re.I)
  40.                 if rep:
  41.                     nomEmission = rep.group(1)
  42.                     Continuer = True
  43.                 else:
  44.                     # devrait trouver xxx
  45.                     rep = re.search(r'(.*)(\d)(.\d\d?)',nomfic,re.I)
  46.                     if rep:
  47.                         nomEmission = rep.group(1)
  48.                         Continuer = True
  49.     if Continuer:
  50.         longueurNomEmission = len(nomEmission) + 1
  51.         nomEmission = nomEmission.replace("."," ")
  52.         saison = rep.group(2)
  53.         if len(saison) == 1:
  54.             saison = "0" + saison
  55.         episode = rep.group(3)
  56.         ret = [nomEmission,saison,episode]
  57.         return True,ret
  58.     else:
  59.         ret = ["",-1,-1]
  60.         return False,ret
  61.  
  62. #=========================================
  63. def FabriquerBase():
  64.     # SI la table n'existe pas, on la cree
  65.     # Sinon, on ignore ceci grace a la clause IF NOT EXISTS
  66.     sql = 'CREATE TABLE IF NOT EXISTS EmissionsTV (pkID INTEGER PRIMARY KEY, Serie TEXT, CheminRacine TEXT, NomFichier TEXT, Saison TEXT, Episode TEXT, tvrageid TEXT, etat TEXT);'
  67.     curseur.execute(sql)
  68.  
  69. #=========================================    
  70. def ParcourirChemin(chemin):
  71.  
  72.     nomEmission = ""
  73.     # ouvre le fichier de log pour les erreurs
  74.     ficerr = open('erreurs.log',"w")
  75.     for racine, reps, fichiers in os.walk(chemin,topdown=True):
  76.         for fic in [f for f in fichiers if f.endswith (('.avi','mkv','mp4','m4v'))]:
  77.             # Combine chemin et nom de fichier pour creer une seule variable
  78.             fn = join(racine,fic)  
  79.             NomFicOriginal,ext = os.path.splitext(fic)
  80.             fl = fic
  81.             estok,donnees = RecupereSaisonEpisode(fl)
  82.             if estok:
  83.                 nomEmission = data[0]
  84.                 saison = data[1]
  85.                 episode = data[2]
  86.                 print("Season {0} Episode {1}".format(saison,episode))
  87.             else:
  88.                 print("Pas de Saison/Episode")
  89.                 ficerr.writelines('---------------------------\n')
  90.                 ficerr.writelines('{0} ne contient aucune information de serie/episode\n'.format(fic))
  91.                 ficerr.writelines('---------------------------\n\n')
  92.             #--------------------------------
  93.             requetesql = 'SELECT count(pkid) as nbLignes from EmissionsTV where NomFichier = "%s";' % fl
  94.             try:
  95.                 for x in curseur.execute(requetesql):
  96.                     nombreLignes = x[0]
  97.                 if nombreLignes == 0:  # vide, donc on ajoute
  98.                     try:
  99.                         sql = 'INSERT INTO EmissionsTV (Serie,CheminRacine,NomFichier,Saison,Episode,tvrageid) VALUES (?,?,?,?,?,?)'
  100.                         curseur.execute(sql,(nomEmission,racine,fl,saison,episode,-1))
  101.                     except:
  102.                         print("Erreur")
  103.                         ficerr.writelines('---------------------------\n')
  104.                         ficerr.writelines('Erreur ecriture dans la base...\n')
  105.                         ficerr.writelines('nomfic = {0}\n'.format(fic))
  106.                         ficerr.writelines('---------------------------\n\n')
  107.             except:
  108.                 print("Erreur")
  109.             print('Serie - {0} Fichier - {1}'.format(nomEmission,fic))
  110.         # ferme le fichier de log
  111.         ficerr.close
  112.     # Fin de ParcourirChemin
  113.      
  114. def ParcourirBase():
  115.     tr = TvRage()
  116.     CurseurSerie = connection.cursor()
  117.     requetesql = "SELECT DISTINCT serie FROM EmissionsTV WHERE tvrageid = -1"
  118.     for x in CurseurSerie.execute(requetesql):
  119.         nomSerie = x[0]
  120.         NomATrouver = string.capwords(x[0]," ")
  121.         print("Recherche information sur " + NomATrouver)
  122.         sl = tr.TrouverIdParNom(NomATrouver)
  123.         resultat = tr.AfficheResultatsEmission(sl)
  124.         if resultat == 0:
  125.             print("Aucun resultat pour %s" % nomSerie)
  126.         else:
  127.             option = int(resultat)-1
  128.             id = sl[option]['ID']
  129.             MettreAJourBase(nomSerie,id)
  130.             RecupererEtatEmission(nomSerie,id)
  131.            
  132. def MettreAJourBase(nomSerie,id):
  133.     idcurseur = connection.cursor()
  134.     requetesql = 'UPDATE EmissionsTV SET tvrageid = ' + id + ' WHERE serie = "' + nomSerie + '"'
  135.     try:
  136.         idcurseur.execute(requetesql)
  137.     except:
  138.         print "error"
  139.  
  140. def RecupererEtatEmission(nomSerie,id):
  141.     tr = TvRage()
  142.     idcurseur = connection.cursor()
  143.     dict = tr.TrouveInfoEmission(id)
  144.     etat = dict['Etat']
  145.     requetesql = 'UPDATE EmissionsTV SET Etat = "' + etat + '" WHERE serie = "' + nomSerie + '"'
  146.     try:
  147.         idcurseur.execute(requetesql)
  148.     except:
  149.         print "Erreur"
  150.        
  151. #=========================================    
  152. def main():
  153.     global connection
  154.     global curseur  
  155.  
  156.     # on cree la connexion et le curseur
  157.     connection = apsw.Connection("EmissionsTV.db3")
  158.     curseur = connection.cursor()
  159.     FabriquerBase()
  160.     #=========================================
  161.     # regle les chemins vers vos fichiers video
  162.     #=========================================
  163.     dossierDepart = ["/extramedia/tv_files","/media/freeagnt/tv_files_2"]
  164.     #for cptr in range(0,2):
  165.         #ParcourirChemin(dossierDepart[cptr])    
  166.     ParcourirBase()
  167.     # ferme le curseur et la base de donnees
  168.     curseur.close()
  169.     connection.close()
  170.  
  171.     print("Fin")
  172.  
  173. #=======================================
  174. if __name__ == '__main__':
  175.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement