Advertisement
Jx7

Téléchargement des émissions du site de Canal + v0.10

Jx7
Nov 19th, 2012
546
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 18.91 KB | None | 0 0
  1. #!/usr/bin/python
  2. # -*- coding:Utf-8 -*-
  3.  
  4. ########################################################################################################
  5. # Copyright (C) 2010  La_Poigne                                                                        #
  6. # This program is free software: you can redistribute it and/or modify it under the terms of the GNU   #
  7. # General Public License as published by the Free Software Foundation, either version 2 of the         #
  8. # License, or any later version.                                                                       #
  9. # This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY without     #
  10. # even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU        #
  11. # General Public License for more details.                                                             #
  12. # You should have received a copy of the GNU General Public License along with this program. If not,   #
  13. # see http://www.gnu.org/licenses/                                                                     #
  14. ########################################################################################################
  15. #
  16. # V0.10
  17. #
  18. # ------------------------------------------------------------------------
  19. # CE SCRIPT NECESSITE FLVSTREAMER OU RTMPDUMP DANS LE CAS DES SOURCES RTMP
  20. # ------------------------------------------------------------------------
  21. #
  22. # ---------------------------------------------------------
  23. # Script de téléchargement des émissions du site de Canal +
  24. # ---------------------------------------------------------
  25. # Syntaxe: cplus.py [--help] [--verbose (1|2)] [--test] [--QUALITY] [--outdir OUTdir_PATH]
  26. #
  27. #             verbose: affiche les infos à l'écran en + des logs
  28. #             test: ne lance pas les téléchargements et ne met donc pas à jour le fichier d'historique
  29. #             QUALITY: choix de la qualité:
  30. #                       'SD' pour le bas débit,
  31. #                       'MD' pour le haut débit,
  32. #                       'HD' pour la HD
  33. #             outdir: désigne le répertoire de téléchargement. S'il n'est pas précisé, c'est le sous répertoire downloads du script qui sera utilisé.
  34. #
  35. # Exemples:
  36. #   cplus.py --verbose 2 --HD
  37. #   cplus.py --verbose 1 --HD --outdir /mnt/video/TV
  38. #
  39. # L'historique des émissions téléchargées est enregistrée dans le fichier cplus_history.
  40. # Il est utilisé par le script donc ne pas le supprimer au risque de retélécharger des émissions.
  41. #
  42. # Le fichier cplus_unwanted sert à indiquer quelles émissions on ne veut pas télécharger.
  43. # On peut par exemple vouloir télécharger les émissions quotidiennes du petit journal mais pas
  44. # l'émission de la semaine.
  45. #
  46. # Les émissions non commentées sont celles que j'ai testées et qui dont les téléchargements
  47. # fonctionnent. Les autres sont à tester (emplacement de la date inclu).
  48. #
  49. # Le script gère les émissions en plusieurs parties (attention, il est nécessaire de télécharger toutes
  50. # les parties en une seule commande, le script ne gèrera pas les différentes parties si certaines ont
  51. # déjà été téléchargées).
  52. #
  53. ########################################################################################################
  54. #
  55. # Changelog:
  56. #
  57. # v0.1
  58. # 21/12/2010 : Création par vincentp010.
  59. #
  60. # v0.4
  61. # 10/11/2012 : Refonte par Jx7.
  62. #
  63. # v0.5
  64. # 19/11/2012 : Optimisations.
  65. #              2 modes: verbose et test.
  66. #
  67. # v0.6
  68. # 20/11/2012 : Correction d'un bug lié à l'utilisation des modes verbose et test.
  69. #              Optimisations.
  70. #              Ajout des noms de fichier supposés (nécessaire pour certains ID regroupant plusieurs
  71. #              émissions).
  72. #
  73. # v0.7
  74. # 20/11/2012 : Ajout d'un paramètre dans la syntaxe pour choisir la qualité par des vidéos sans avoir à
  75. #              éditer le script.
  76. #              Ajout d'explications en début de script sur son utilisation.
  77. #              Ajout de la gestion des émissions en plusieurs parties (attention, il est nécessaire de
  78. #              télécharger toutes les parties en une seule commande, le script ne gèrera pas les
  79. #              différentes parties si certaines ont déjà été téléchargées).
  80. #
  81. # v0.8
  82. # 20/11/2012 : Résolution d'un bug d'affichage
  83. #              Changement de la syntaxe de l'option de qualité (SD, MD, HD)
  84. #              Ajout d'un mode verbose simple
  85. #              Ajout d'une option de choix de répertoire de téléchargement
  86. #
  87. # v0.10
  88. # 20/05/2013: Correction de bugs
  89. #
  90. ########################################################################################################
  91.  
  92. import os, urllib, subprocess, time, sys
  93. from xml.dom import minidom
  94.  
  95. # Identifiants des émissions ([ID de l'émission, emplacement de la date, nom de l'émission, nom supposé du fichier])
  96. ShowList = []
  97. ShowList.append([130,3,"Action discrete","ACTION_DISCRETE"]) # 130, 304, 371 ?
  98. ShowList.append([304,3,"Action discrete","ACTION_DISCRETE"]) # 130, 304, 371 ?
  99. ShowList.append([371,3,"Action discrete","ACTION_DISCRETE"]) # 130, 304, 371 ?
  100. #ShowList.append([62,4,"Le boucan du jour"]) # 204 205 206 316 ?
  101. #ShowList.append([627,4,"Bref"])
  102. #ShowList.append([104,4,"Le grand journal","LE_GRAND_JOURNAL"]) # 129
  103. ShowList.append([254,2,"Groland","GROLAND"])
  104. ShowList.append([48,3,"Guignols de l'info (les)","LES_GUIGNOLS"]) # 222 555 ?
  105. #ShowList.append([242,4,"Du hard ou du cochon"])
  106. #ShowList.append([451,4,"Jamel comedy club"]) # 943 953 ?
  107. #ShowList.append([896,4,"Le journal du hard"])
  108. #ShowList.append([39,4,"La matinale"]) # 105 ?
  109. #ShowList.append([215,4,"Le meilleur du hier","LE_MEILLEUR_DU_HIER"]) # 63 107 110 112 ?
  110. #ShowList.append([47,4,"Les pépites du net"]) # 319 321 ?
  111. ShowList.append([249,4,"Petit journal (le)","LE_PETIT_JOURNAL"]) # 249 250 556 557 558 559 ?
  112. #ShowList.append([843,4,"La question de plus"])
  113. #ShowList.append([294,4,"La revue de presse de Catherine et Eliane"]) # 852 ?
  114. ShowList.append([1082,4,"Salut les terriens","SALUT_LES_TERRIENS"])
  115. ShowList.append([41,4,"Salut les terriens","SALUT_LES_TERRIENS"])
  116. ShowList.append([74,4,"Salut les terriens","SALUT_LES_TERRIENS"])
  117. ShowList.append([105,4,"Salut les terriens","SALUT_LES_TERRIENS"])
  118. ShowList.append([110,4,"Salut les terriens","SALUT_LES_TERRIENS"])
  119. ShowList.append([316,4,"Salut les terriens","SALUT_LES_TERRIENS"])
  120. ShowList.append([371,4,"Salut les terriens","SALUT_LES_TERRIENS"])
  121. #ShowList.append([680,4,"Salut les terriens - edito de Blako"])
  122. #ShowList.append([1064,4,"Salut les terriens - Gaspard Proust"])
  123. #ShowList.append([1072,4,"Salut les terriens - les martiens de la semaine"])
  124. #ShowList.append([252,4,"SAV des émissions"]) # 406 ?
  125. #ShowList.append([936,4,"Tweet en clair"])
  126. ShowList.append([201,2,"Zapping (le)","ZAPPING"]) # 130 207 ?
  127.  
  128. # Répertoires (à créer avant)
  129. #HomeDir = os.path.realpath(sys.argv[0])
  130. #HomeDir = os.path.abspath(sys.argv[0])
  131. HomeDir = os.path.abspath(sys.argv[0])[:len(os.path.abspath(sys.argv[0]))-len(sys.argv[0])-1]
  132. DownloadsDir = HomeDir + "/downloads"
  133. #print HomeDir
  134. #print DownloadsDir
  135. #sys.exit()
  136.  
  137. #Fichiers
  138. LogFile = HomeDir + "/cplus_log"
  139. HistoryFile = HomeDir + "/cplus_history"
  140. UnwantedFile = HomeDir + "/cplus_unwanted"
  141.  
  142. # Paramètres Web de Canal +
  143. ShowURL_XML = "http://www.canalplus.fr/rest/bootstrap.php?/bigplayer/getMEAs/"
  144. VideoURL_XML = "http://www.canalplus.fr/rest/bootstrap.php?/bigplayer/getVideos/"
  145.  
  146. # Autres variables
  147. #Verbose = 1
  148. Verbose = 0
  149. #Test = True
  150. Test = False
  151. Quality = "SD"
  152. #Quality = "MD"
  153. #Quality = "HD"
  154.  
  155. # fonction: Affichage de la syntaxe et exit si mauvaise syntaxe
  156. def Syntax():
  157.     print "cplus.py [--help] [--verbose (1|2)] [--test] [--QUALITY] [--outdir OUTDIR_PATH]" + '\n'
  158.     print "--help: affiche cet écran d'aide" + '\n'
  159.     print "--verbose: affiche les infos à l'écran en + des logs"
  160.     print "           1: verbose minimum"
  161.     print "           2: verbose maximum" + '\n'
  162.     print "--test: ne lance pas les téléchargements (fichier d'historique non mis à jour)" + '\n'
  163.     print "--QUALITY: choix de la qualité"
  164.     print "           SD: slow definition"
  165.     print "           MD: medium definition"
  166.     print "           HD: high definition"
  167.     print "--outdir: désigne le répertoire de téléchargement"
  168.     sys.exit()
  169.  
  170. # fonction: Télécharge un XML à partir d'une URL
  171. def DownloadXML(_URL):
  172.     try:
  173.         _XMLFileSock = urllib.urlopen(_URL)
  174.         _XMLFile = _XMLFileSock.read()
  175.     except Exception, e:
  176.         return 1
  177.     try:
  178.         _XML = minidom.parseString(_XMLFile)
  179.     except Exception, e:
  180.         _XML = 1
  181.     return _XML
  182.  
  183. # fonction: Récupère les ID des vidéos en parsant les balises MEA d'un XML
  184. def ParseMEAs(_XML):
  185.     _IDs = []
  186.     _MEAs = _XML.getElementsByTagName('MEA')
  187.     for i in _MEAs:
  188.         if i.getElementsByTagName('ID')[0].childNodes != []:
  189.             #_ID = i.getElementsByTagName('ID')[0].childNodes[0].nodeValue
  190.             #_IDs.append(_ID)
  191.             _IDs.append(i.getElementsByTagName('ID')[0].childNodes[0].nodeValue)
  192.     return _IDs
  193.  
  194. # fonction: Récupère l'URL d'un fichier en parsant un XML
  195. def GetVideoURL(_XML):
  196.     _FileURL = []
  197.     _Videos = _XML.getElementsByTagName('VIDEO')
  198.     if Quality == "SD":
  199.         _Quality = "BAS_DEBIT"
  200.     if Quality == "MD":
  201.         _Quality = "HAUT_DEBIT"
  202.     if Quality == "HD":
  203.         _Quality = "HD"
  204.     for i in _Videos:
  205.         try:
  206.             _Video = i.getElementsByTagName('MEDIA')[0].getElementsByTagName('VIDEOS')[0]
  207.         except Exception:
  208.             _Video = ""
  209.         try:
  210.             _RTMP = _Video.getElementsByTagName(_Quality)[0].childNodes[0].nodeValue
  211.         except Exception:
  212.             _RTMP = ""
  213.         _FileURL.append(_RTMP)
  214.     return _FileURL[0]
  215.  
  216. # fonction: Exécute une commande et log le résultat dans un fichier de sortie
  217. def Execute(_Params, _File):
  218.     p = subprocess.Popen(_Params,stdout=_File)
  219.     p.wait()
  220.     return p.returncode
  221.  
  222. # fonction: Ajoute une vidéo à l'historique
  223. def AddHistory(_File):
  224.     HistoryFile_ = open(HistoryFile, 'a')
  225.     HistoryFile_.write(_File.encode('utf-8') + '\n')
  226.     HistoryFile_.close()
  227.  
  228. # fonction: Vérifie si un nom de fichier (_File) est présent dans un fichier texte (_CheckFile)
  229. def Check(_CheckFile, _File):
  230.     _Check = 0
  231.     CheckFile_ = open(_CheckFile, 'r')
  232.     for _Line in CheckFile_:
  233.         _Line = _Line[0:len(_Line) - 2]
  234.         if _Line.decode('utf-8') in _File:
  235.             _Check = 1
  236.     CheckFile_.close()
  237.     return _Check
  238.  
  239. # fonction: Initiliase les infos globales
  240. def InitInfos():
  241.     global ShowName;    ShowName = "N/A"
  242.     global ShowID;      ShowID = "N/A"
  243.     global ShowURL;     ShowURL = "N/A"
  244.     global VideoID;     VideoID = "N/A"
  245.     global VideoURL;    VideoURL = "N/A"
  246.     global FileName;    FileName = "N/A"
  247.     global TargetFile;  TargetFile = "N/A"
  248.     global FileURL;     FileURL = "N/A"
  249.     global Message;     Message = ""
  250.  
  251. # fonction: Log les infos globales (et les affiche à l'écran selon la valeur de _Verbose)
  252. def LogInfos(_LogFile, _Verbose):
  253.     LogFile_ = open(_LogFile, "a")
  254.     if _Verbose > 0: os.system('clear')
  255.  
  256.     if Test == True:
  257.         line = "---Téléchargements inactifs---" + '\n'
  258.         LogFile_.write(line + '\n')
  259.         if _Verbose > 0: print line
  260.  
  261.     line = "Emission:"
  262.     LogFile_.write(line + '\n')
  263.     if _Verbose == 2: print line
  264.  
  265.     line = " -Nom: "
  266.     LogFile_.write(line + ShowName + '\n')
  267.     if _Verbose == 2: print line + ShowName
  268.     if _Verbose == 1: print "Emission:      " + ShowName
  269.  
  270.     line = " -ID: " + str(ShowID)
  271.     LogFile_.write(line + '\n')
  272.     if _Verbose == 2: print line
  273.  
  274.     line = " -URL: " + ShowURL + '\n'
  275.     LogFile_.write(line + '\n')
  276.     if _Verbose == 2: print line
  277.  
  278.     line = "Video:"
  279.     LogFile_.write(line + '\n')
  280.     if _Verbose == 2: print line
  281.  
  282.     line = " -ID: " + VideoID
  283.     LogFile_.write(line + '\n')
  284.     if _Verbose == 2: print line
  285.  
  286.     line = " -URL: " + VideoURL + '\n'
  287.     LogFile_.write(line + '\n')
  288.     if _Verbose == 2: print line
  289.  
  290.     line = "Fichier:"
  291.     LogFile_.write(line + '\n')
  292.     if _Verbose == 2: print line
  293.  
  294.     line = " -Nom: "
  295.     LogFile_.write(line + FileName + '\n')
  296.     if _Verbose == 2: print line + FileName
  297.     if _Verbose == 1: print "Fichier:       " + FileName
  298.  
  299.     line = " -Cible: "
  300.     LogFile_.write(line + TargetFile + '\n')
  301.     if _Verbose == 2: print line + TargetFile
  302.     if _Verbose == 1: print "Fichier cible: " + TargetFile
  303.  
  304.     line = " -URL: " + FileURL + '\n'
  305.     LogFile_.write(line + '\n')
  306.     if _Verbose == 2: print line
  307.  
  308.     line = "Infos:"
  309.     LogFile_.write(line + '\n')
  310.     if _Verbose == 2: print line
  311.  
  312.     line = Message
  313.     LogFile_.write(line + '\n')
  314.     if _Verbose > 0: print line
  315.  
  316.     line = "--------------------------------------------------------------------------------------------------------------------------------------------------------"
  317.     LogFile_.write(line + '\n')
  318.     if _Verbose > 0: print line
  319.  
  320.     LogFile_.close()
  321.  
  322. #fonction: Classement alphabétique des lignes d'un fichier
  323. def SortFile(_TextFile):
  324.     f = open(_TextFile, 'r')
  325.     lines = f.readlines()
  326.     lines.sort()
  327.     f.close()
  328.     f = open(_TextFile, 'w')
  329.     f.writelines(lines)
  330.     f.close()
  331.  
  332. # MAIN
  333. if __name__ == "__main__":
  334.  
  335.     # Teste l'existance des fichiers textes et les crée si besoin
  336.     if os.path.exists(UnwantedFile) == False:
  337.         UnwantedFile_ = open(UnwantedFile, 'w')
  338.         UnwantedFile_.close()
  339.     else:
  340.         # Classement alphabétique du fichier des non voulus
  341.         SortFile(UnwantedFile)
  342.     if os.path.exists(HistoryFile) == False:
  343.         HistoryFile_ = open(HistoryFile, 'w')
  344.         HistoryFile_.close()
  345.     if os.path.exists(LogFile) == False:
  346.         LogFile_ = open(LogFile, "w")
  347.         LogFile_.close()
  348.  
  349.     # Lecture de la syntaxe
  350.     if len(sys.argv) > 1:
  351.         i = len(sys.argv)
  352.         j = 1
  353.         while j < i:
  354.             WhileLoop = 1
  355.             if WhileLoop == 1 and sys.argv[j] == "--help":
  356.                 Syntax()
  357.                 WhileLoop = 0
  358.             if WhileLoop == 1 and sys.argv[j] == "--verbose":
  359.                 if isinstance(int(sys.argv[j+1]), int) == True and int(sys.argv[j+1]) >= 1 and int(sys.argv[j+1]) <= 2:
  360.                     Verbose = int(sys.argv[j+1])
  361.                     j = j+1
  362.                 else:
  363.                     Syntax()
  364.                 WhileLoop = 0
  365.             if WhileLoop == 1 and sys.argv[j] == "--outdir":
  366.                 if os.path.exists(sys.argv[j+1]) == True:
  367.                     DownloadsDir = sys.argv[j+1]
  368.                     j = j+1
  369.                 else:
  370.                     Syntax()
  371.                 WhileLoop = 0
  372.             if WhileLoop == 1 and sys.argv[j] == "--test":
  373.                 Test = True
  374.                 WhileLoop = 0
  375.             if WhileLoop == 1 and sys.argv[j] == "--MD":
  376.                 Quality = "MD"
  377.                 WhileLoop = 0
  378.             if WhileLoop == 1 and sys.argv[j] == "--HD":
  379.                 Quality = "HD"
  380.                 WhileLoop = 0
  381.             if WhileLoop == 1:
  382.                 Syntax()
  383.             j = j+1
  384.     else:
  385.         Syntax()
  386.  
  387.     # Début de la log
  388.     LogFile_ = open(LogFile, "a")
  389.     LogFile_.write("-------------------" + '\n' + time.strftime("%Y.%m.%d %H:%M:%S") + '\n' + "-------------------" + '\n')
  390.     LogFile_.close()
  391.  
  392.     # Traitement émission par émission
  393.     for x in range(len(ShowList)):
  394.         InitInfos()
  395.         ShowName = ShowList[x][2]
  396.         ShowID = ShowList[x][0]
  397.         ShowURL = ShowURL_XML + str(ShowID)
  398.         ShowXML = DownloadXML(ShowURL)
  399.         if ShowXML == 1:
  400.             Message = "ERREUR : IMPOSSIBLE DE TÉLÉCHARGER LE XML DE L'ÉMISSION."
  401.             LogInfos(LogFile, Verbose)
  402.         else:
  403.  
  404.             # Traitement vidéo par vidéo pour l'émission en cours
  405.             VideosIDsList = ParseMEAs(ShowXML)
  406.             PreviousTargetFile = ""
  407.             # Comptage des parties d'émissions
  408.             count = 1
  409.             for VideoID in VideosIDsList:
  410.                 VideoURL = VideoURL_XML + VideoID
  411.                 VideoXML = DownloadXML(VideoURL)
  412.                 if VideoXML == 1:
  413.                     Message = "ERREUR : IMPOSSIBLE DE TÉLÉCHARGER LE XML DE LA VIDÉO."
  414.                     LogInfos(LogFile, Verbose)
  415.                 else:
  416.                     FileURL = GetVideoURL(VideoXML)
  417.                     head, FileName = os.path.split(FileURL)
  418.  
  419.                     # Comparaison du nom de fichier avec le nom supposé
  420.                     if not ShowList[x][3] in FileName:
  421.                         Message = "Fichier hors émisssion."
  422.                         LogInfos(LogFile, Verbose)
  423.                     else:
  424.                         # Comparaison du nom de fichier avec les fichiers non voulus et déjà téléchargées
  425.                         Unwanted = Check(UnwantedFile, FileName)
  426.                         History = Check(HistoryFile, FileName)
  427.                         if Unwanted + History != 0:
  428.                             if Unwanted != 0:
  429.                                 Message = "Vidéo non voulue."
  430.                                 LogInfos(LogFile, Verbose)
  431.                             elif History != 0:
  432.                                 Message = "Vidéo déjà téléchargée."
  433.                                 LogInfos(LogFile, Verbose)
  434.  
  435.                         # Nommage simple du fichier en cours
  436.                         else:
  437.                             basename, extension = os.path.splitext(FileName)
  438.                             words = basename.split('_')
  439.                             if len(words) <= 1:
  440.                                 FileName = "N/A"
  441.                                 FileURL = "N/A"
  442.                                 Message = "Nom de fichier indeterminable."
  443.                                 LogInfos(LogFile, Verbose)
  444.                             else:
  445.                                 # Création du répertoire de l'émission s'il n'existe pas
  446.                                 if not os.path.isdir(DownloadsDir + "/" + ShowName):
  447.                                     os.makedirs(DownloadsDir + "/" + ShowName)
  448.  
  449.                                 # Formattage de la date
  450.                                 date = words[ShowList[x][1]]
  451.                                 date = "20" + date[:2] + "." + date[2:4] + "." + date[-2:]
  452.  
  453.                                 # Test des émissions en plusieurs parties
  454.                                 FileSimpleName = date + "_" + Quality
  455.                                 TargetFile = DownloadsDir + "/" + ShowName + "/" + FileSimpleName
  456.                                 if TargetFile in PreviousTargetFile:
  457.                                     if count == 1 and Test == False:
  458.                                         os.rename(PreviousTargetFile, PreviousTargetFile[:len(PreviousTargetFile)-4] + "-1" + PreviousTargetFile[len(PreviousTargetFile)-4:])
  459.                                     count += 1
  460.                                     FileSimpleName += "-" + str(count) + extension
  461.                                 else:
  462.                                     count = 1
  463.                                     FileSimpleName += extension
  464.                                 TargetFile = DownloadsDir + "/" + ShowName + "/" + date[:4] + "/" + FileSimpleName
  465.                                 # Téléchargement via flvstreamer si le protocole utilisé dans l'URL est RTMP
  466.                                 if FileURL.find("rtmp") != -1:
  467.                                     #params=['flvstreamer', '-q', '-r', FileURL]
  468.                                     #params=['flvstreamer', '-r', FileURL]
  469.                                     params=['rtmpdump', '-r', FileURL]
  470.                                     if Test == True:
  471.                                         Message = "(téléchargements inactifs)" + '\n' + "Téléchargement via flvstreamer."
  472.                                         LogInfos(LogFile, Verbose)
  473.                                         r = 0
  474.                                     else:
  475.                                         Message = "Téléchargement via flvstreamer."
  476.                                         LogInfos(LogFile, Verbose)
  477.                                         target_ = open(TargetFile, 'w')
  478.                                         r = Execute(params, target_)
  479.                                         target_.close()
  480.  
  481.                                 # Téléchargement direct dans les autres cas
  482.                                 else:
  483.                                     if Test == True:
  484.                                         Message = "(téléchargements inactifs)" + '\n' + "Téléchargement direct."
  485.                                         LogInfos(LogFile, Verbose)
  486.                                         r = 0
  487.                                     else:
  488.                                         Message = "Téléchargement direct."
  489.                                         LogInfos(LogFile, Verbose)
  490.                                         try:
  491.                                             urllib.urlretrieve(FileURL, TargetFile)
  492.                                             r=0
  493.                                         except Exception:
  494.                                             r=1
  495.  
  496.                                 # Ajout dans l'historique s'il n'y a pas eu d'erreur
  497.                                 if r == 0:
  498.                                     Message += '\n' + "Téléchargement terminé, ajout dans l'historique."
  499.                                     if Test == False:
  500.                                         AddHistory(FileName)
  501.                                     LogInfos(LogFile, Verbose)
  502.  
  503.                                 # Suppression du fichier s'il y a eu une erreur
  504.                                 else:
  505.                                     Message += '\n' + "ERREUR : PROBLÈME DE TÉLÉCHARGEMENT."
  506.                                     if Test == False:
  507.                                         if os.path.exists(TargetFile):
  508.                                             os.remove(TargetFile)
  509.                                     LogInfos(LogFile, Verbose)
  510.  
  511.                 # Mémorisation du fichier cible avant de passer au suivant
  512.                 PreviousTargetFile = TargetFile
  513.  
  514.     time.sleep(1)
  515.     # Classement alphabétique du fichier d'historique
  516.     SortFile(HistoryFile)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement