daily pastebin goal
69%
SHARE
TWEET

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

Jx7 Nov 19th, 2012 372 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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)
RAW Paste Data
Top