Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import os
- from os.path import join, getsize, exists
- import sys
- import apsw
- import re
- from xml.etree import ElementTree as ET
- import urllib
- import string
- from TvRage import TvRage
- #=========================================
- def RecupereSaisonEpisode(nomfic):
- Continuer = False
- nomfic = nomfic.upper()
- # devrait trouver des noms de fichiers de type multi episode .S01E01.S01E02
- rep = re.search(r'(.*)\.s(\d{1,2})e(\d{1,2})\.s(\d{1,2})e(\d{1,2})',nomfic, re.I)
- if rep:
- nomEmission = rep.group(1)
- Continuer = True
- else:
- # devrait trouver SddEdd ou sddedd
- rep = re.search(r'(.*).S(\d\d?)E(\d\d?)(\.*)', nomfic, re.I)
- if rep:
- nomEmission = rep.group(1)
- Continuer = True
- else:
- # cherche ddxdd
- #rep = re.search(r'(.*).(\d\d?)x(\d\d?)(\.*)', nomfic, re.I)
- rep = re.search(r'(.*)\.(\d{1,2})x(\d{1,2})(.*)', nomfic, re.I)
- if rep:
- nomEmission = rep.group(1)
- Continuer = True
- else:
- # cherche Sdddd
- rep = re.search(r'(.*).S(\d\d)(.\d\d?)' , nomfic, re.I)
- if rep:
- nomEmission = rep.group(1)
- Continuer = True
- else:
- # devrait trouver xxx
- rep = re.search(r'(.*)(\d)(.\d\d?)',nomfic,re.I)
- if rep:
- nomEmission = rep.group(1)
- Continuer = True
- if Continuer:
- longueurNomEmission = len(nomEmission) + 1
- nomEmission = nomEmission.replace("."," ")
- saison = rep.group(2)
- if len(saison) == 1:
- saison = "0" + saison
- episode = rep.group(3)
- ret = [nomEmission,saison,episode]
- return True,ret
- else:
- ret = ["",-1,-1]
- return False,ret
- #=========================================
- def FabriquerBase():
- # SI la table n'existe pas, on la cree
- # Sinon, on ignore ceci grace a la clause IF NOT EXISTS
- 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);'
- curseur.execute(sql)
- #=========================================
- def ParcourirChemin(chemin):
- nomEmission = ""
- # ouvre le fichier de log pour les erreurs
- ficerr = open('erreurs.log',"w")
- for racine, reps, fichiers in os.walk(chemin,topdown=True):
- for fic in [f for f in fichiers if f.endswith (('.avi','mkv','mp4','m4v'))]:
- # Combine chemin et nom de fichier pour creer une seule variable
- fn = join(racine,fic)
- NomFicOriginal,ext = os.path.splitext(fic)
- fl = fic
- estok,donnees = RecupereSaisonEpisode(fl)
- if estok:
- nomEmission = data[0]
- saison = data[1]
- episode = data[2]
- print("Season {0} Episode {1}".format(saison,episode))
- else:
- print("Pas de Saison/Episode")
- ficerr.writelines('---------------------------\n')
- ficerr.writelines('{0} ne contient aucune information de serie/episode\n'.format(fic))
- ficerr.writelines('---------------------------\n\n')
- #--------------------------------
- requetesql = 'SELECT count(pkid) as nbLignes from EmissionsTV where NomFichier = "%s";' % fl
- try:
- for x in curseur.execute(requetesql):
- nombreLignes = x[0]
- if nombreLignes == 0: # vide, donc on ajoute
- try:
- sql = 'INSERT INTO EmissionsTV (Serie,CheminRacine,NomFichier,Saison,Episode,tvrageid) VALUES (?,?,?,?,?,?)'
- curseur.execute(sql,(nomEmission,racine,fl,saison,episode,-1))
- except:
- print("Erreur")
- ficerr.writelines('---------------------------\n')
- ficerr.writelines('Erreur ecriture dans la base...\n')
- ficerr.writelines('nomfic = {0}\n'.format(fic))
- ficerr.writelines('---------------------------\n\n')
- except:
- print("Erreur")
- print('Serie - {0} Fichier - {1}'.format(nomEmission,fic))
- # ferme le fichier de log
- ficerr.close
- # Fin de ParcourirChemin
- def ParcourirBase():
- tr = TvRage()
- CurseurSerie = connection.cursor()
- requetesql = "SELECT DISTINCT serie FROM EmissionsTV WHERE tvrageid = -1"
- for x in CurseurSerie.execute(requetesql):
- nomSerie = x[0]
- NomATrouver = string.capwords(x[0]," ")
- print("Recherche information sur " + NomATrouver)
- sl = tr.TrouverIdParNom(NomATrouver)
- resultat = tr.AfficheResultatsEmission(sl)
- if resultat == 0:
- print("Aucun resultat pour %s" % nomSerie)
- else:
- option = int(resultat)-1
- id = sl[option]['ID']
- MettreAJourBase(nomSerie,id)
- RecupererEtatEmission(nomSerie,id)
- def MettreAJourBase(nomSerie,id):
- idcurseur = connection.cursor()
- requetesql = 'UPDATE EmissionsTV SET tvrageid = ' + id + ' WHERE serie = "' + nomSerie + '"'
- try:
- idcurseur.execute(requetesql)
- except:
- print "error"
- def RecupererEtatEmission(nomSerie,id):
- tr = TvRage()
- idcurseur = connection.cursor()
- dict = tr.TrouveInfoEmission(id)
- etat = dict['Etat']
- requetesql = 'UPDATE EmissionsTV SET Etat = "' + etat + '" WHERE serie = "' + nomSerie + '"'
- try:
- idcurseur.execute(requetesql)
- except:
- print "Erreur"
- #=========================================
- def main():
- global connection
- global curseur
- # on cree la connexion et le curseur
- connection = apsw.Connection("EmissionsTV.db3")
- curseur = connection.cursor()
- FabriquerBase()
- #=========================================
- # regle les chemins vers vos fichiers video
- #=========================================
- dossierDepart = ["/extramedia/tv_files","/media/freeagnt/tv_files_2"]
- #for cptr in range(0,2):
- #ParcourirChemin(dossierDepart[cptr])
- ParcourirBase()
- # ferme le curseur et la base de donnees
- curseur.close()
- connection.close()
- print("Fin")
- #=======================================
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement