Advertisement
mmu_man

PluzzDL FIX for 2014-04-29

Apr 28th, 2014
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 4.52 KB | None | 0 0
  1. diff -r e599d8d0fa82 other/Pluzz/src/PluzzDL.py
  2. --- a/other/Pluzz/src/PluzzDL.py    Sun Nov 25 17:56:46 2012 +0100
  3. +++ b/other/Pluzz/src/PluzzDL.py    Tue Apr 29 00:29:22 2014 +0200
  4. @@ -1,5 +1,5 @@
  5.  #!/usr/bin/env python
  6. -# -*- coding:Utf-8 -*-
  7. +# -*- coding:utf-8 -*-
  8.  
  9.  # Notes :
  10.  #    -> Filtre Wireshark :
  11. @@ -16,6 +16,7 @@
  12.  import datetime
  13.  import hashlib
  14.  import hmac
  15. +import json
  16.  import os
  17.  import re
  18.  import StringIO
  19. @@ -45,9 +46,10 @@
  20.     """
  21.  
  22.     REGEX_ID = "http://info.francetelevisions.fr/\?id-video=([^\"]+)"
  23. -   XML_DESCRIPTION = "http://www.pluzz.fr/appftv/webservices/video/getInfosOeuvre.php?mode=zeri&id-diffusion=_ID_EMISSION_"
  24. +   JSON_DESCRIPTION = "http://webservices.francetelevisions.fr/tools/getInfosOeuvre/v2/?idDiffusion=_ID_EMISSION_&catalogue=Pluzz"
  25.     URL_SMI = "http://www.pluzz.fr/appftv/webservices/video/getFichierSmi.php?smi=_CHAINE_/_ID_EMISSION_.smi&source=azad"
  26. -   M3U8_LINK = "http://medias2.francetv.fr/catchup-mobile/france-dom-tom/non-token/non-drm/m3u8/_FILE_NAME_.m3u8"
  27. +   #M3U8_LINK = "http://medias2.francetv.fr/catchup-mobile/france-dom-tom/non-token/non-drm/m3u8/_FILE_NAME_.m3u8"
  28. +   M3U8_LINK = "http://medias2.francetv.fr/catchup-mobile/hls-ios-inf/i/streaming-adaptatif_france-dom-tom/_FILE_NAME_-,398,632,934,k.mp4.csmil/master.m3u8"
  29.     REGEX_M3U8 = "/([0-9]{4}/S[0-9]{2}/J[0-9]{1}/[0-9]*-[0-9]{6,8})-"
  30.  
  31.     def __init__( self,
  32. @@ -75,7 +77,7 @@
  33.         # Recupere l'id de l'emission
  34.         idEmission = self.getId( url )
  35.         # Recupere la page d'infos de l'emission
  36. -       pageInfos = self.navigateur.getFichier( self.XML_DESCRIPTION.replace( "_ID_EMISSION_", idEmission ) )
  37. +       pageInfos = self.navigateur.getFichier( self.JSON_DESCRIPTION.replace( "_ID_EMISSION_", idEmission ) )
  38.         # Parse la page d'infos
  39.         self.parseInfos( pageInfos )
  40.         # Petit message en cas de DRM
  41. @@ -129,17 +131,32 @@
  42.         Parse le fichier de description XML d'une emission
  43.         """
  44.         try :
  45. -           xml.sax.parseString( pageInfos, PluzzDLInfosHandler( self ) )
  46. +           #xml.sax.parseString( pageInfos, PluzzDLInfosHandler( self ) )
  47. +           data = json.loads(pageInfos)
  48. +           self.codeProgramme = data["code_programme"]
  49. +           self.chaine = data["chaine"]
  50. +           self.timeStamp = float( data["diffusion"]["timestamp"] )
  51. +           for v in data["videos"]:
  52. +               print v
  53. +               fmt = v["format"]
  54. +               if fmt == "smil-mp4":
  55. +                   self.manifestURL = v["url"]
  56. +               if fmt == "m3u8-download":
  57. +                   self.m3u8URL = v["url"]
  58. +               # TODO: check for other formats?
  59. +               self.drm = v["drm"]
  60. +
  61.             # Si le lien m3u8 n'existe pas, il faut essayer de creer celui de la plateforme mobile
  62. -           if( self.m3u8URL is None ):
  63. -               self.m3u8URL = self.M3U8_LINK.replace( "_FILE_NAME_", re.findall( self.REGEX_M3U8, pageInfos )[ 0 ] )
  64. +           #XXX:
  65. +           #if( self.m3u8URL is None ):
  66. +           #   self.m3u8URL = self.M3U8_LINK.replace( "_FILE_NAME_", re.findall( self.REGEX_M3U8, pageInfos )[ 0 ] )
  67.             logger.debug( "URL m3u8 : %s" % ( self.m3u8URL ) )
  68.             logger.debug( "URL manifest : %s" % ( self.manifestURL ) )
  69.             logger.debug( "Lien RTMP : %s" % ( self.lienRTMP ) )
  70.             logger.debug( "Lien MMS : %s" % ( self.lienMMS ) )
  71.             logger.debug( "Utilisation de DRM : %s" % ( self.drm ) )
  72. -       except :
  73. -           raise PluzzDLException( "Impossible de parser le fichier XML de l'émission" )
  74. +       except:
  75. +           raise PluzzDLException( "Impossible de parser le fichier JSON de l'émission" )
  76.  
  77.     def getNomFichier( self, repertoire, codeProgramme, timeStamp, extension ):
  78.         """
  79. @@ -267,7 +284,9 @@
  80.         self.urlBase = "/".join( self.m3u8URL.split( "/" )[ :-1 ] )
  81.         # Recupere le lien avec le plus gros bitrate
  82.         try:
  83. -           self.listeFragmentsURL = "%s/%s" % ( self.urlBase, re.findall( ".+?\.m3u8.*", self.m3u8 )[ -1 ] )
  84. +           self.listeFragmentsURL = re.findall( ".+?\.m3u8.*", self.m3u8 )[ -1 ]
  85. +           if "://" not in self.listeFragmentsURL:
  86. +               self.listeFragmentsURL = "%s/%s" % ( self.urlBase, self.listeFragmentsURL )
  87.         except:
  88.             raise PluzzDLException( "Impossible de trouver le lien vers la liste des fragments" )
  89.         # Recupere la liste des fragments
  90. @@ -306,7 +325,10 @@
  91.         try :
  92.             i = self.premierFragment
  93.             while( i <= self.nbFragMax and not self.stopDownloadEvent.isSet() ):
  94. -               frag = self.navigateur.getFichier( "%s/%s" % ( self.urlBase, self.listeFragments[ i - 1 ] ) )
  95. +               fragURL = self.listeFragments[ i - 1 ]
  96. +               if "://" not in fragURL:
  97. +                   fragURL = "%s/%s" % ( self.urlBase, fragURL )
  98. +               frag = self.navigateur.getFichier( fragURL )
  99.                 self.fichierVideo.write( frag )
  100.                 # Affichage de la progression
  101.                 self.progressFnct( min( int( ( i / self.nbFragMax ) * 100 ), 100 ) )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement