Advertisement
Guest User

Untitled

a guest
Jul 24th, 2018
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 40.11 KB | None | 0 0
  1. #-*- coding: utf-8 -*-
  2. #Vstream https://github.com/Kodi-vStream/venom-xbmc-addons
  3. from resources.lib.gui.hoster import cHosterGui
  4. from resources.lib.gui.gui import cGui
  5. from resources.lib.handler.inputParameterHandler import cInputParameterHandler
  6. from resources.lib.handler.outputParameterHandler import cOutputParameterHandler
  7. from resources.lib.handler.requestHandler import cRequestHandler
  8. from resources.lib.parser import cParser
  9. from resources.lib.util import cUtil
  10. from resources.lib.comaddon import progress, dialog, VSlog
  11.  
  12. import urllib, re, urllib2
  13. import random
  14.  
  15. #from resources.lib.dl_deprotect import DecryptDlProtect
  16.  
  17. UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0'
  18. headers = { 'User-Agent' : UA }
  19.  
  20. SITE_IDENTIFIER = 'zone_telechargement_ws'
  21. SITE_NAME = '[COLOR violet]Zone-Telechargement[/COLOR]'
  22. SITE_DESC = 'Fichier en DDL, HD'
  23.  
  24. URL_HOST = 'https://zone-telechargement1.ws/'
  25. #URL_MAIN = 'https://ww2.zone-telechargement1.ws/'
  26. URL_MAIN = 'https://zone-telechargement1.ws/'
  27. URL_DECRYPT = ''
  28.  
  29. URL_SEARCH = (URL_MAIN + 'index.php?', 'showMovies')
  30. URL_SEARCH_MOVIES = (URL_MAIN + 'index.php?', 'showMovies')
  31. URL_SEARCH_SERIES = (URL_MAIN + 'index.php?', 'showMovies')
  32. FUNCTION_SEARCH = 'showMovies'
  33.  
  34. MOVIE_NEWS = (URL_MAIN + 'nouveaute/', 'showMovies') # films (derniers ajouts)
  35. MOVIE_EXCLUS = (URL_MAIN + 'exclus/', 'showMovies') # exclus (films populaires)
  36. MOVIE_3D = (URL_MAIN + 'films-bluray-3d/', 'showMovies') # films en 3D
  37. MOVIE_HD = (URL_MAIN + 'films-bluray-hd/', 'showMovies') # films en HD
  38. MOVIE_HDLIGHT = (URL_MAIN + 'x265-x264-hdlight/', 'showMovies') # films en x265 et x264
  39. MOVIE_VOSTFR = (URL_MAIN + 'filmsenvostfr/', 'showMovies') # films VOSTFR
  40. MOVIE_4K = (URL_MAIN + 'film-ultra-hd-4k/', 'showMovies') # films "4k"
  41.  
  42. MOVIE_GENRES = (URL_MAIN , 'showGenre')
  43.  
  44. MOVIE_ANIME = (URL_MAIN + 'dessins-animes/', 'showMovies') # dessins animes
  45.  
  46. SERIE_VFS = (URL_MAIN + 'series-vf/', 'showMovies') # serie VF
  47. SERIE_VOSTFRS = (URL_MAIN + 'series-vostfr/', 'showMovies') # serie VOSTFR
  48.  
  49. ANIM_VFS = (URL_MAIN + 'animes-vf/', 'showMovies')
  50. ANIM_VOSTFRS = (URL_MAIN + 'animes-vostfr/', 'showMovies')
  51.  
  52. DOC_NEWS = (URL_MAIN + 'documentaires-gratuit/', 'showMovies') # docs
  53. DOC_DOCS = ('http://', 'load')
  54.  
  55. SPORT_SPORTS = (URL_MAIN + 'sport/', 'showMovies') # sports
  56. TV_NEWS = (URL_MAIN + 'emissions-tv/', 'showMovies') # dernieres emissions tv
  57. SPECT_NEWS = (URL_MAIN + 'spectacles/', 'showMovies') # dernieres spectacles
  58. CONCERT_NEWS = (URL_MAIN + 'concerts/', 'showMovies') # dernieres concerts
  59. AUTOFORM_VID = (URL_MAIN + 'autoformations-videos/', 'showMovies')
  60.  
  61. MemorisedHost = ''
  62. def GetURL_MAIN():
  63. global MemorisedHost
  64.  
  65. oInputParameterHandler = cInputParameterHandler()
  66. MemorisedHost_2 = oInputParameterHandler.getValue('MemorisedHost')
  67. if MemorisedHost_2:
  68. MemorisedHost = MemorisedHost_2
  69. return MemorisedHost
  70.  
  71. if MemorisedHost:
  72. return MemorisedHost
  73. else:
  74. oRequestHandler = cRequestHandler(URL_HOST)
  75. sHtmlContent = oRequestHandler.request()
  76. MemorisedHost = oRequestHandler.getRealUrl()
  77. return MemorisedHost
  78.  
  79. #Ne sert a rien, juste au cas ou
  80. return URL_HOST
  81.  
  82. def AutoRedirect_Gethtml(url):
  83. oRequestHandler = cRequestHandler(url)
  84. oRequestHandler.addParameters('User-Agent', UA)
  85. sHtmlContent = oRequestHandler.request()
  86.  
  87. #si erreur
  88. if sHtmlContent == '':
  89. url2 = GetURL_MAIN()
  90. url = url.replace(url.split('/')[2], url2.split('/')[2])
  91.  
  92. VSlog('Redirection vers ' + url)
  93.  
  94. oRequestHandler = cRequestHandler(url)
  95. oRequestHandler.addParameters('User-Agent', UA)
  96. sHtmlContent = oRequestHandler.request()
  97.  
  98. return sHtmlContent
  99.  
  100. def load():
  101. oGui = cGui()
  102.  
  103. oOutputParameterHandler = cOutputParameterHandler()
  104. oOutputParameterHandler.addParameter('siteUrl', 'http://venom/')
  105. oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche', 'search.png', oOutputParameterHandler)
  106.  
  107. oOutputParameterHandler = cOutputParameterHandler()
  108. oOutputParameterHandler.addParameter('siteUrl', MOVIE_NEWS[0])
  109. oGui.addDir(SITE_IDENTIFIER, MOVIE_NEWS[1], 'Films (Derniers ajouts)', 'films_news.png', oOutputParameterHandler)
  110.  
  111. oOutputParameterHandler = cOutputParameterHandler()
  112. oOutputParameterHandler.addParameter('siteUrl', MOVIE_EXCLUS[0])
  113. oGui.addDir(SITE_IDENTIFIER, MOVIE_EXCLUS[1], 'Exclus (Films populaires)', 'news.png', oOutputParameterHandler)
  114.  
  115. oOutputParameterHandler = cOutputParameterHandler()
  116. oOutputParameterHandler.addParameter('siteUrl', MOVIE_HD[0])
  117. oGui.addDir(SITE_IDENTIFIER, MOVIE_HD[1], 'Blu-rays (720p & 1080p)', 'films_hd.png', oOutputParameterHandler)
  118.  
  119. oOutputParameterHandler = cOutputParameterHandler()
  120. oOutputParameterHandler.addParameter('siteUrl', MOVIE_3D[0])
  121. oGui.addDir(SITE_IDENTIFIER, MOVIE_3D[1], 'Films 3D', 'news.png', oOutputParameterHandler)
  122.  
  123. oOutputParameterHandler = cOutputParameterHandler()
  124. oOutputParameterHandler.addParameter('siteUrl', MOVIE_HDLIGHT[0])
  125. oGui.addDir(SITE_IDENTIFIER, MOVIE_HDLIGHT[1], 'Films (x265 & x264)', 'films_hd.png', oOutputParameterHandler)
  126.  
  127. oOutputParameterHandler = cOutputParameterHandler()
  128. oOutputParameterHandler.addParameter('siteUrl', MOVIE_4K[0])
  129. oGui.addDir(SITE_IDENTIFIER, MOVIE_4K[1], 'Films 4k', 'films_hd.png', oOutputParameterHandler)
  130.  
  131. oOutputParameterHandler = cOutputParameterHandler()
  132. oOutputParameterHandler.addParameter('siteUrl', MOVIE_ANIME[0])
  133. oGui.addDir(SITE_IDENTIFIER, MOVIE_ANIME[1], 'Dessins Animés', 'animes.png', oOutputParameterHandler)
  134.  
  135. oOutputParameterHandler = cOutputParameterHandler()
  136. oOutputParameterHandler.addParameter('siteUrl', MOVIE_GENRES[0])
  137. oGui.addDir(SITE_IDENTIFIER, MOVIE_GENRES[1], 'Films (Genres)', 'films_genres.png', oOutputParameterHandler)
  138.  
  139. oOutputParameterHandler = cOutputParameterHandler()
  140. oOutputParameterHandler.addParameter('siteUrl', SERIE_VFS[0])
  141. oGui.addDir(SITE_IDENTIFIER, SERIE_VFS[1], 'Séries VF (Derniers ajouts)', 'series_vf.png', oOutputParameterHandler)
  142.  
  143. oOutputParameterHandler = cOutputParameterHandler()
  144. oOutputParameterHandler.addParameter('siteUrl', SERIE_VOSTFRS[0])
  145. oGui.addDir(SITE_IDENTIFIER, SERIE_VOSTFRS[1], 'Séries VOSTFR (Derniers ajouts)', 'series_vostfr.png', oOutputParameterHandler)
  146.  
  147. oOutputParameterHandler = cOutputParameterHandler()
  148. oOutputParameterHandler.addParameter('siteUrl', ANIM_VFS[0])
  149. oGui.addDir(SITE_IDENTIFIER, ANIM_VFS[1], 'Animés VF', 'animes_vf.png', oOutputParameterHandler)
  150.  
  151. oOutputParameterHandler = cOutputParameterHandler()
  152. oOutputParameterHandler.addParameter('siteUrl', ANIM_VOSTFRS[0])
  153. oGui.addDir(SITE_IDENTIFIER, ANIM_VOSTFRS[1], 'Animés VOSTFR', 'animes_vostfr.png', oOutputParameterHandler)
  154.  
  155. oOutputParameterHandler = cOutputParameterHandler()
  156. oOutputParameterHandler.addParameter('siteUrl', DOC_NEWS[0])
  157. oGui.addDir(SITE_IDENTIFIER, DOC_NEWS[1], 'Documentaires', 'doc.png', oOutputParameterHandler)
  158.  
  159. oOutputParameterHandler = cOutputParameterHandler()
  160. oOutputParameterHandler.addParameter('siteUrl', TV_NEWS[0])
  161. oGui.addDir(SITE_IDENTIFIER, TV_NEWS[1], 'Emissions TV', 'tv.png', oOutputParameterHandler)
  162.  
  163. oOutputParameterHandler = cOutputParameterHandler()
  164. oOutputParameterHandler.addParameter('siteUrl', SPECT_NEWS[0])
  165. oGui.addDir(SITE_IDENTIFIER, SPECT_NEWS[1], 'Spectacles', 'star.png', oOutputParameterHandler)
  166.  
  167. oGui.setEndOfDirectory()
  168.  
  169. def showSearch():
  170. oGui = cGui()
  171. sSearchText = oGui.showKeyBoard()
  172. if (sSearchText != False):
  173. sUrl = sSearchText
  174. showMovies(sUrl)
  175. oGui.setEndOfDirectory()
  176. return
  177.  
  178. def showGenre():
  179. oGui = cGui()
  180.  
  181. basePath = ''
  182.  
  183. liste = []
  184. liste.append( ['Action', URL_MAIN + '?genrelist[]=1'] )
  185. liste.append( ['Animation', URL_MAIN + '?genrelist[]=2'] )
  186. liste.append( ['Arts Martiaux', URL_MAIN + '?genrelist[]=3'] )
  187. liste.append( ['Aventure', URL_MAIN + basePath + '?genrelist[]=4'] )
  188. liste.append( ['Biopic', URL_MAIN + basePath + '?genrelist[]=5'] )
  189. liste.append( ['Comédie Dramatique', URL_MAIN + basePath + '?genrelist[]=7'] )
  190. liste.append( ['Comédie Musicale', URL_MAIN + basePath + '?genrelist[]=8'] )
  191. liste.append( ['Comédie', URL_MAIN + basePath + '?genrelist[]=9'] )
  192. liste.append( ['Divers', URL_MAIN + basePath + '?genrelist[]=10'] )
  193. liste.append( ['Documentaires', URL_MAIN + basePath + '?genrelist[]=11'] )
  194. liste.append( ['Drame', URL_MAIN + basePath + '?genrelist[]=12'] )
  195. liste.append( ['Epouvante Horreur', URL_MAIN + basePath + '?genrelist[]=13'] )
  196. liste.append( ['Espionnage', URL_MAIN + basePath + '?genrelist[]=14'] )
  197. liste.append( ['Famille', URL_MAIN + basePath + '?genrelist[]=15'] )
  198. liste.append( ['Fantastique', GetURL_MAIN()+ 'genres/fantastique/'] )
  199. liste.append( ['Guerre', URL_MAIN + basePath + '?genrelist[]=17'] )
  200. liste.append( ['Historique', URL_MAIN + basePath + '?genrelist[]=18'] )
  201. liste.append( ['Musical', URL_MAIN + basePath + '?genrelist[]=19'] )
  202. liste.append( ['Péplum', URL_MAIN + basePath + '?genrelist[]=6'] )
  203. liste.append( ['Policier', URL_MAIN + basePath + '?genrelist[]=20'] )
  204. liste.append( ['Romance', URL_MAIN + basePath + '?genrelist[]=21'] )
  205. liste.append( ['Science Fiction', URL_MAIN + basePath + '?genrelist[]=22'] )
  206. liste.append( ['Thriller', URL_MAIN + basePath + '?genrelist[]=23'] )
  207. liste.append( ['Western', URL_MAIN + basePath + '?genrelist[]=24'] )
  208.  
  209. for sTitle, sUrl in liste:
  210.  
  211. oOutputParameterHandler = cOutputParameterHandler()
  212. oOutputParameterHandler.addParameter('siteUrl', sUrl)
  213. oGui.addDir(SITE_IDENTIFIER, 'showMovies', sTitle, 'genres.png', oOutputParameterHandler)
  214.  
  215. oGui.setEndOfDirectory()
  216.  
  217. def showMovies(sSearch = ''):
  218. oGui = cGui()
  219.  
  220. oInputParameterHandler = cInputParameterHandler()
  221. Nextpagesearch = oInputParameterHandler.getValue('Nextpagesearch')
  222. sUrl = oInputParameterHandler.getValue('siteUrl')
  223.  
  224. if Nextpagesearch:
  225. sSearch = sUrl
  226.  
  227. bGlobal_Search = False
  228. qual = False
  229. if sSearch:
  230.  
  231. if URL_SEARCH[0] in sSearch:
  232. bGlobal_Search = True
  233. sSearch=sSearch.replace(URL_SEARCH[0],'')
  234.  
  235. if Nextpagesearch:
  236. query_args = (('do', 'search'), ('subaction', 'search'), ('story', sSearch) , ('titleonly', '3') ,('search_start', Nextpagesearch))
  237. else:
  238. query_args = (('do', 'search'), ('subaction', 'search'), ('story', sSearch), ('titleonly', '3'))
  239.  
  240. url = URL_MAIN + 'index.php?do=search'
  241. data = urllib.urlencode(query_args)
  242. request = urllib2.Request(url, data, headers)
  243. #sPattern = '<a href="(.+?)" *><img class=".+?" src="(.+?)".+?\s*<.+?>\s*<div style=".+?">\s*<.+?>\s*<div style=".+?"><div class=".+?">\s*<div class=".+?\s*<a href=".+?" *>(.+?)<'
  244. sPattern = '<a href="(.+?)" *><img class="mainimg.+?src="(.+?)"(?:.|\s)+?<a href=".+?" *>(.+?)<'
  245.  
  246. oRequestHandler = cRequestHandler(URL_SEARCH[0])
  247. oRequestHandler.setRequestType(cRequestHandler.REQUEST_TYPE_POST)
  248. oRequestHandler.addParametersLine(data)
  249. oRequestHandler.addParameters('User-Agent', UA)
  250. sHtmlContent = oRequestHandler.request()
  251.  
  252. Url2 = oRequestHandler.getRealUrl()
  253. #VSlog(Url2)
  254.  
  255. #test si mauvaise url
  256. if not URL_SEARCH[0] in Url2:
  257. #VSlog('Changement url : ' + Url2)
  258. #Recuperation mainurl
  259. MemorisedHost = 'https://' + Url2.split('/')[2] + '/'
  260. #VSlog(MemorisedHost)
  261.  
  262. #Et on recommence
  263. #VSlog(MemorisedHost)
  264. oRequestHandler = cRequestHandler(URL_SEARCH[0].replace(URL_MAIN,MemorisedHost) )
  265. oRequestHandler.setRequestType(cRequestHandler.REQUEST_TYPE_POST)
  266. oRequestHandler.addParametersLine(data)
  267. oRequestHandler.addParameters('User-Agent', UA)
  268. sHtmlContent = oRequestHandler.request()
  269.  
  270. else:
  271. #sPattern = '<div style="height:[0-9]{3}px;"> *<a href="([^"]+)"><img class="[^"]+?" data-newsid="[^"]+?" src="([^<"]+)".+?<div class="[^"]+?" style="[^"]+?"> *<a href="[^"]+?"> ([^<]+?)<'
  272. sPattern = '<div style="height:[0-9]{3}px;">\s*<a href="([^"]+)"><img class="[^"]+?" data-newsid="[^"]+?" src="([^<"]+)".+?<a href="[^"]+" *>([^<]+)<'
  273. sHtmlContent = AutoRedirect_Gethtml(sUrl)
  274.  
  275. VSlog(sUrl)
  276. #fh = open('c:\\test.txt', "w")
  277. #fh.write(sHtmlContent.replace('\n', ''))
  278. #fh.close()
  279.  
  280. oParser = cParser()
  281. aResult = oParser.parse(sHtmlContent, sPattern)
  282.  
  283. #print aResult
  284. if (aResult[0] == False):
  285. oGui.addText(SITE_IDENTIFIER)
  286.  
  287. if (aResult[0] == True):
  288. total = len(aResult[1])
  289. progress_ = progress().VScreate(SITE_NAME)
  290. for aEntry in aResult[1]:
  291. progress_.VSupdate(progress_, total)
  292. if progress_.iscanceled():
  293. break
  294.  
  295. sTitle = str(aEntry[2])
  296. #on vire le tiret des series
  297. sTitle = sTitle.replace(' - Saison', ' Saison')
  298. sDisplayTitle = sTitle
  299. #nettoyage du titre
  300. sTitle = sTitle.replace('[COMPLETE]', '').replace('[Complete]', '')
  301. sUrl2 = str(aEntry[0]).replace('https','http')
  302.  
  303. #traite les qualités
  304. liste = ['4k', '1080p', '720p', 'bdrip', 'hdrip', 'dvdrip', 'cam-md']
  305. for i in liste:
  306. if i in sUrl2:
  307. sDisplayTitle = ('%s [%s]') % (sTitle, i.upper())
  308.  
  309. #Si recherche et trop de resultat, on nettoye
  310. #31/12/17 Ne fonctionne plus ?
  311. if sSearch and total > 2:
  312. if cUtil().CheckOccurence(sSearch, sTitle) == 0:
  313. continue
  314.  
  315. sThumb = str(aEntry[1])
  316. if not sThumb.startswith('http'):
  317. sThumb = URL_MAIN + sThumb
  318.  
  319. oOutputParameterHandler = cOutputParameterHandler()
  320. oOutputParameterHandler.addParameter('siteUrl', sUrl2)
  321. oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
  322. oOutputParameterHandler.addParameter('sThumb', sThumb)
  323.  
  324. if 'films-gratuit' in sUrl2 or '4k' in sUrl2:
  325. oGui.addMovie(SITE_IDENTIFIER, 'showMoviesLinks', sDisplayTitle, '', sThumb, '', oOutputParameterHandler)
  326. else:
  327. oGui.addTV(SITE_IDENTIFIER, 'showSeriesLinks', sDisplayTitle, '', sThumb, '', oOutputParameterHandler)
  328.  
  329. progress_.VSclose(progress_)
  330.  
  331. if sSearch:
  332. sPattern = '<a name="nextlink" id="nextlink" onclick="javascript:list_submit\(([0-9]+)\); return\(false\)" href="#">Suivant'
  333. aResult = oParser.parse(sHtmlContent, sPattern)
  334. if (aResult[0] == True):
  335. oOutputParameterHandler = cOutputParameterHandler()
  336. oOutputParameterHandler.addParameter('siteUrl', sSearch)
  337. oOutputParameterHandler.addParameter('Nextpagesearch', aResult[1][0])
  338. oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Next >>>[/COLOR]', oOutputParameterHandler)
  339.  
  340. oGui.setEndOfDirectory()
  341. else:
  342. sNextPage = __checkForNextPage(sHtmlContent)
  343. if (sNextPage != False):
  344. oOutputParameterHandler = cOutputParameterHandler()
  345. oOutputParameterHandler.addParameter('siteUrl', sNextPage)
  346. if sSearch:
  347. oOutputParameterHandler.addParameter('Nextpagesearch', Nextpagesearch)
  348. oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Next >>>[/COLOR]', oOutputParameterHandler)
  349.  
  350. if not sSearch:
  351. oGui.setEndOfDirectory()
  352.  
  353. def __checkForNextPage(sHtmlContent):
  354. oParser = cParser()
  355. sPattern = '<div class="navigation" align="center" >.+?<a href="([^"]+)">Suivant</a></div>'
  356. aResult = oParser.parse(sHtmlContent, sPattern)
  357.  
  358. if (aResult[0] == True):
  359. return aResult[1][0]
  360.  
  361. return False
  362.  
  363.  
  364. def showMoviesLinks():
  365. #VSlog('mode film')
  366. oGui = cGui()
  367. oParser = cParser()
  368. oInputParameterHandler = cInputParameterHandler()
  369. sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
  370. sThumb = oInputParameterHandler.getValue('sThumb')
  371. sUrl = oInputParameterHandler.getValue('siteUrl')
  372.  
  373. oRequestHandler = cRequestHandler(sUrl)
  374. sHtmlContent = oRequestHandler.request()
  375.  
  376. sDesc = ''
  377. #Affichage du menu
  378. oGui.addText(SITE_IDENTIFIER, '[COLOR olive]' + 'Qualités disponibles pour ce film :' + '[/COLOR]')
  379.  
  380. #on recherche d'abord la qualité courante
  381. sPattern = '<div style=".+?">.+?Qualité (.+?) [|] (.+?)</div>'
  382. aResult = oParser.parse(sHtmlContent, sPattern)
  383. #print aResult
  384.  
  385. sQual = ''
  386. if (aResult[0]):
  387. sQual = aResult[1][0]
  388. sTitle = ('%s [COLOR coral]%s[/COLOR]') % (sMovieTitle, sQual)
  389.  
  390. oOutputParameterHandler = cOutputParameterHandler()
  391. oOutputParameterHandler.addParameter('siteUrl', sUrl)
  392. oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle)
  393. oOutputParameterHandler.addParameter('sThumb', sThumb)
  394. oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumb, sDesc, oOutputParameterHandler)
  395.  
  396. #on regarde si dispo dans d'autres qualités
  397. sPattern = '<a href="([^"]+)"><span class="otherquality"><span style="color:#.{6}"><b>([^<]+)<\/b><\/span><span style="color:#.{6}"><b>([^<]+)<\/b><\/span>'
  398.  
  399. aResult = oParser.parse(sHtmlContent, sPattern)
  400. #print aResult
  401.  
  402. if (aResult[0] == True):
  403. total = len(aResult[1])
  404. progress_ = progress().VScreate(SITE_NAME)
  405. for aEntry in aResult[1]:
  406. progress_.VSupdate(progress_, total)
  407. if progress_.iscanceled():
  408. break
  409.  
  410. sUrl = URL_MAIN[:-1] + str(aEntry[0])
  411. sQual = str(aEntry[1])
  412. sLang = str(aEntry[2])
  413. sTitle = ('%s [%s] %s') % (sMovieTitle, sQual, sLang)
  414.  
  415. oOutputParameterHandler = cOutputParameterHandler()
  416. oOutputParameterHandler.addParameter('siteUrl', sUrl)
  417. oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle)
  418. oOutputParameterHandler.addParameter('sThumb', sThumb)
  419. oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumb, sDesc, oOutputParameterHandler)
  420.  
  421. progress_.VSclose(progress_)
  422.  
  423. oGui.setEndOfDirectory()
  424.  
  425. def showSeriesLinks():
  426. #VSlog('mode serie')
  427. oGui = cGui()
  428. oParser = cParser()
  429. oInputParameterHandler = cInputParameterHandler()
  430. sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
  431. sThumb = oInputParameterHandler.getValue('sThumb')
  432. sUrl = oInputParameterHandler.getValue('siteUrl')
  433.  
  434. oRequestHandler = cRequestHandler(sUrl)
  435. sHtmlContent = oRequestHandler.request()
  436.  
  437. #Mise àjour du titre
  438. sPattern = '<meta name="description" content="Telecharger (.+?)Qualité.+?\|[^\|](.+?) Episode .+?\|[^\|](.+?) la serie'
  439. aResult = oParser.parse(sHtmlContent, sPattern)
  440. #print aResult
  441. if (aResult[0]):
  442. sMovieTitle = aResult[1][0][0] + aResult[1][0][1] + aResult[1][0][2]
  443.  
  444. oGui.addText(SITE_IDENTIFIER,'[COLOR olive]Qualités disponibles pour cette saison :[/COLOR]')
  445.  
  446. #on recherche d'abord la qualité courante
  447. sPattern = '<div style="[^"]+?">.+?Qualité (.+?)<'
  448. aResult = oParser.parse(sHtmlContent, sPattern)
  449. #print aResult
  450.  
  451. sQual = ''
  452. if (aResult[1]):
  453. sQual = aResult[1][0]
  454.  
  455. sDisplayTitle = ('%s [%s]') % (sMovieTitle, sQual.replace('|',''))
  456.  
  457. oOutputParameterHandler = cOutputParameterHandler()
  458. oOutputParameterHandler.addParameter('siteUrl', sUrl)
  459. oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle)
  460. oOutputParameterHandler.addParameter('sThumb', sThumb)
  461. oGui.addTV(SITE_IDENTIFIER, 'showSeriesHosters', sDisplayTitle, '', sThumb, '', oOutputParameterHandler)
  462.  
  463. #on regarde si dispo dans d'autres qualités
  464. sHtmlContent1 = CutQual(sHtmlContent)
  465. sPattern1 = '<a href="([^"]+)"><span class="otherquality"><span style="color:#.{6}"><b>([^<]+)<\/b><\/span><span style="color:#.{6}"><b>([^<]+)<\/b><\/span>'
  466.  
  467. aResult1 = oParser.parse(sHtmlContent1, sPattern1)
  468. #print aResult1
  469.  
  470. if (aResult1[0] == True):
  471. total = len(aResult1[1])
  472. progress_ = progress().VScreate(SITE_NAME)
  473. for aEntry in aResult1[1]:
  474. progress_.VSupdate(progress_, total)
  475. if progress_.iscanceled():
  476. break
  477.  
  478. sUrl = URL_MAIN + 'telecharger-series' + str(aEntry[0])
  479. sQual = str(aEntry[1])
  480. sLang = str(aEntry[2])
  481. sDisplayTitle = ('%s [%s] %s') % (sMovieTitle, sQual, sLang)
  482.  
  483. oOutputParameterHandler = cOutputParameterHandler()
  484. oOutputParameterHandler.addParameter('siteUrl', sUrl)
  485. oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle)
  486. oOutputParameterHandler.addParameter('sThumb', sThumb)
  487. oGui.addTV(SITE_IDENTIFIER, 'showSeriesHosters', sDisplayTitle, '', sThumb, '', oOutputParameterHandler)
  488.  
  489. progress_.VSclose(progress_)
  490.  
  491. #on regarde si dispo d'autres saisons
  492. sHtmlContent2 = CutSais(sHtmlContent)
  493. sPattern2 = '<a href="([^"]+)"><span class="otherquality">([^<]+)<b>([^<]+)<span style="color:#.{6}">([^<]+)<\/span><span style="color:#.{6}">([^<]+)<\/b><\/span>'
  494.  
  495. aResult2 = oParser.parse(sHtmlContent2, sPattern2)
  496. #print aResult2
  497.  
  498. if (aResult2[0] == True):
  499. oGui.addText(SITE_IDENTIFIER,'[COLOR olive]Autres Saisons disponibles pour cette série :[/COLOR]')
  500.  
  501. for aEntry in aResult2[1]:
  502.  
  503. sUrl = URL_MAIN + 'telecharger-series' + str(aEntry[0])
  504. sTitle = '[COLOR skyblue]' + aEntry[1] + aEntry[2] + aEntry[3] + aEntry[4] + '[/COLOR]'
  505.  
  506. oOutputParameterHandler = cOutputParameterHandler()
  507. oOutputParameterHandler.addParameter('siteUrl', sUrl)
  508. oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle)
  509. oOutputParameterHandler.addParameter('sThumb', sThumb)
  510. oGui.addTV(SITE_IDENTIFIER, 'showSeriesLinks', sTitle, 'series.png', sThumb, '', oOutputParameterHandler)
  511.  
  512. oGui.setEndOfDirectory()
  513.  
  514. def showHosters():
  515. #VSlog('showHosters')
  516. oGui = cGui()
  517. oInputParameterHandler = cInputParameterHandler()
  518. sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
  519. sUrl = oInputParameterHandler.getValue('siteUrl')
  520. sThumb=oInputParameterHandler.getValue('sThumb')
  521.  
  522. oRequestHandler = cRequestHandler(sUrl)
  523. oRequestHandler.addHeaderEntry('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0')
  524. oRequestHandler.addHeaderEntry('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
  525. oRequestHandler.addHeaderEntry('Accept-Language', 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3')
  526. sHtmlContent = oRequestHandler.request()
  527.  
  528. #fh = open('c:\\test.txt', "w")
  529. #fh.write(sHtmlContent.replace('\n', ''))
  530. #fh.close()
  531.  
  532. #Fonction pour recuperer uniquement les liens
  533. #sHtmlContent = Cutlink(sHtmlContent)
  534.  
  535. #Si ca ressemble aux lien premiums on vire les liens non premium
  536. if 'Premium' in sHtmlContent or 'PREMIUM' in sHtmlContent:
  537. oParser = cParser()
  538. sPattern = '<font color=red>([^<]+?)</font>'
  539. aResult = oParser.parse(sHtmlContent, sPattern)
  540. sHtmlContent = CutNonPremiumlinks(sHtmlContent)
  541.  
  542. #print sHtmlContent
  543. oParser = cParser()
  544.  
  545. sPattern = '<font color=red>([^<]+?)</font>|<div style="font-weight:bold.+?">([^>]+?)</div></b><b><a target="_blank" href="([^<>"]+?)">T.+?charger<\/a>|>\[(Liens Premium) \]<|<span style="color:#FF0000">(.+?)</div></b><b><a target="_blank" href=href="https://([^"]+)/([^"]+?)">'
  546. aResult = oParser.parse(sHtmlContent, sPattern)
  547.  
  548. if (aResult[0] == True):
  549. total = len(aResult[1])
  550. progress_ = progress().VScreate(SITE_NAME)
  551.  
  552. for aEntry in aResult[1]:
  553. progress_.VSupdate(progress_, total)
  554. if progress_.iscanceled():
  555. break
  556.  
  557. if aEntry[0]:
  558. if ('Interchangeables' not in aEntry[0]):
  559. oGui.addText(SITE_IDENTIFIER, '[COLOR red]' + str(aEntry[0]) + '[/COLOR]')
  560.  
  561. #elif aEntry[1]:
  562. #oOutputParameterHandler = cOutputParameterHandler()
  563. #oOutputParameterHandler.addParameter('siteUrl', str(sUrl))
  564. #oOutputParameterHandler.addParameter('sMovieTitle', str(sMovieTitle))
  565. #oOutputParameterHandler.addParameter('sThumb', str(sThumb))
  566. #if 'Télécharger' in aEntry[1]:
  567. #oGui.addText(SITE_IDENTIFIER, '[COLOR olive]'+str(aEntry[1])+'[/COLOR]')
  568. #else:
  569. #oGui.addText(SITE_IDENTIFIER, '[COLOR red]'+str(aEntry[1])+'[/COLOR]')
  570.  
  571. else:
  572.  
  573. sTitle = '[COLOR skyblue]' + aEntry[1] + '[/COLOR] ' + sMovieTitle
  574. URL_DECRYPT = aEntry[3]
  575. oOutputParameterHandler = cOutputParameterHandler()
  576. if sUrl.startswith('http'):
  577. oOutputParameterHandler.addParameter('siteUrl', aEntry[2].replace('https','http'))
  578. else:
  579. sUrl2 = 'http://' + str(aEntry[3]) + '/' + str(aEntry[4])
  580. oOutputParameterHandler.addParameter('siteUrl', sUrl2)
  581.  
  582. oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle)
  583. oOutputParameterHandler.addParameter('sThumb', sThumb)
  584. oGui.addMovie(SITE_IDENTIFIER, 'Display_protected_link', sTitle, '', sThumb, '', oOutputParameterHandler)
  585.  
  586. progress_.VSclose(progress_)
  587.  
  588. oGui.setEndOfDirectory()
  589.  
  590. def showSeriesHosters():
  591. #VSlog('showSeriesHosters')
  592. oGui = cGui()
  593. oParser = cParser()
  594. oInputParameterHandler = cInputParameterHandler()
  595. sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
  596. sUrl = oInputParameterHandler.getValue('siteUrl')
  597. sThumb=oInputParameterHandler.getValue('sThumb')
  598.  
  599. oRequestHandler = cRequestHandler(sUrl)
  600. sHtmlContent = oRequestHandler.request()
  601.  
  602. #Fonction pour recuperer uniquement les liens
  603. #sHtmlContent = Cutlink(sHtmlContent)
  604.  
  605. #Pour les series on fait l'inverse des films on vire les liens premiums
  606. if 'Premium' in sHtmlContent or 'PREMIUM' in sHtmlContent or 'premium' in sHtmlContent:
  607. sHtmlContent = CutPremiumlinks(sHtmlContent)
  608.  
  609.  
  610. sPattern = '<div style="font-weight:bold;color:[^"]+?">([^<]+)</div>|<a target="_blank" href="https://([^"]+)/([^"]+?)">([^<]+)<'
  611. aResult = oParser.parse(sHtmlContent, sPattern)
  612.  
  613. if (aResult[0] == True):
  614. total = len(aResult[1])
  615. progress_ = progress().VScreate(SITE_NAME)
  616.  
  617. for aEntry in aResult[1]:
  618. progress_.VSupdate(progress_, total)
  619. if progress_.iscanceled():
  620. break
  621.  
  622. if aEntry[0]:
  623. if 'Télécharger' in aEntry[0]:
  624. oGui.addText(SITE_IDENTIFIER, '[COLOR olive]' + str(aEntry[0]) + '[/COLOR]')
  625. else:
  626. oGui.addText(SITE_IDENTIFIER, '[COLOR red]' + str(aEntry[0]) + '[/COLOR]')
  627. else:
  628. sName = str(aEntry[3])
  629. sName = sName.replace('Télécharger', '')
  630. sName = sName.replace('pisodes', 'pisode')
  631. sUrl2 = 'http://' + aEntry[1] + '/' + aEntry[2]
  632.  
  633. sTitle = sMovieTitle + ' ' + sName
  634. URL_DECRYPT = aEntry[1]
  635.  
  636. oOutputParameterHandler = cOutputParameterHandler()
  637. oOutputParameterHandler.addParameter('siteUrl', sUrl2)
  638. oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
  639. oOutputParameterHandler.addParameter('sThumb', sThumb)
  640. oGui.addMovie(SITE_IDENTIFIER, 'Display_protected_link', sTitle, '', sThumb, '', oOutputParameterHandler)
  641.  
  642. progress_.VSclose(progress_)
  643.  
  644. oGui.setEndOfDirectory()
  645.  
  646. def showStreamingHosters():
  647. oGui = cGui()
  648. oParser = cParser()
  649. oInputParameterHandler = cInputParameterHandler()
  650. sUrl = oInputParameterHandler.getValue('siteUrl')
  651. sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
  652. sThumb = oInputParameterHandler.getValue('sThumb')
  653.  
  654. oRequestHandler = cRequestHandler(sUrl)
  655. sHtmlContent = oRequestHandler.request()
  656.  
  657. sPattern = '<iframe.+?src="(.+?)"'
  658. aResult = oParser.parse(sHtmlContent, sPattern)
  659.  
  660. if (aResult[0] == True):
  661. for aEntry in aResult[1]:
  662. sHosterUrl = aEntry
  663.  
  664. oHoster = cHosterGui().checkHoster(sHosterUrl)
  665. if (oHoster != False):
  666. oHoster.setDisplayName(sMovieTitle)
  667. oHoster.setFileName(sMovieTitle)
  668. cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb)
  669.  
  670. oGui.setEndOfDirectory()
  671.  
  672. def Display_protected_link():
  673. #VSlog('Display_protected_link')
  674. oGui = cGui()
  675. oParser = cParser()
  676. oInputParameterHandler = cInputParameterHandler()
  677. sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
  678. sUrl = oInputParameterHandler.getValue('siteUrl')
  679. sThumb=oInputParameterHandler.getValue('sThumb')
  680.  
  681. #Ne marche pas
  682. if (False):
  683. code = {
  684. '123455600123455602123455610123455615': 'http://uptobox.com/',
  685. '1234556001234556071234556111234556153': 'http://turbobit.net/',
  686. '123455600123455605123455615': 'http://ul.to/',
  687. '123455600123455608123455610123455615': 'http://nitroflare.com/',
  688. '123455601123455603123455610123455615123455617': 'https://1fichier.com/?',
  689. '123455600123455606123455611123455615': 'http://rapidgator.net/'
  690. }
  691.  
  692. for k in code:
  693. match = re.search(k + '(.+)$', sUrl)
  694. if match:
  695. sHosterUrl = code[k] + match.group(1)
  696. sHosterUrl = sHosterUrl.replace('123455615', '/')
  697. oHoster = cHosterGui().checkHoster(sHosterUrl)
  698. if (oHoster != False):
  699. oHoster.setDisplayName(sMovieTitle)
  700. oHoster.setFileName(sMovieTitle)
  701. cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb)
  702. oGui.setEndOfDirectory()
  703. return
  704.  
  705. #Est ce un lien dl-protect ?
  706. if URL_DECRYPT in sUrl:
  707. sHtmlContent = DecryptDlProtecte(sUrl)
  708.  
  709. if sHtmlContent:
  710. #Si redirection
  711. if sHtmlContent.startswith('http'):
  712. aResult_dlprotecte = (True, [sHtmlContent])
  713. else:
  714. sPattern_dlprotecte = '<div class="lienet"><a href="(.+?)">'
  715. aResult_dlprotecte = oParser.parse(sHtmlContent, sPattern_dlprotecte)
  716.  
  717. else:
  718. oDialog = dialog().VSok('Erreur décryptage du lien')
  719. aResult_dlprotecte = (False, False)
  720.  
  721. #Si lien normal
  722. else:
  723. if not sUrl.startswith('http'):
  724. sUrl = 'http://' + sUrl
  725. aResult_dlprotecte = (True, [sUrl])
  726.  
  727. #print aResult_dlprotecte
  728.  
  729. if (aResult_dlprotecte[0]):
  730.  
  731. episode = 1
  732.  
  733. for aEntry in aResult_dlprotecte[1]:
  734. sHosterUrl = aEntry
  735. #print sHosterUrl
  736.  
  737. sTitle = sMovieTitle
  738. if len(aResult_dlprotecte[1]) > 1:
  739. sTitle = sMovieTitle + ' episode ' + str(episode)
  740.  
  741.  
  742. episode+=1
  743.  
  744. if 'stream' in str(sHosterUrl):
  745. oOutputParameterHandler = cOutputParameterHandler()
  746. oOutputParameterHandler.addParameter('siteUrl', sHosterUrl)
  747. oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
  748. oOutputParameterHandler.addParameter('sThumb', sThumb)
  749. oGui.addMovie(SITE_IDENTIFIER, 'showStreamingHosters', sTitle, '', sThumb, '', oOutputParameterHandler)
  750. else:
  751. oHoster = cHosterGui().checkHoster(sHosterUrl)
  752. if (oHoster != False):
  753. oHoster.setDisplayName(sTitle)
  754. oHoster.setFileName(sTitle)
  755. cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb)
  756.  
  757. oGui.setEndOfDirectory()
  758.  
  759. def CutQual(sHtmlContent):
  760. oParser = cParser()
  761. sPattern = '<h3>Qualit.+?galement disponibles pour cette saison:</h3>(.+?)</div>'
  762. aResult = oParser.parse(sHtmlContent, sPattern)
  763. #print aResult
  764. if (aResult[0]):
  765. return aResult[1][0]
  766. else:
  767. return sHtmlContent
  768.  
  769. return ''
  770.  
  771. def CutSais(sHtmlContent):
  772. oParser = cParser()
  773. sPattern = '<h3>Saisons.+?galement disponibles pour cette saison:</h3>(.+?)<h3>Qualit.+?galement disponibles pour cette saison:</h3>'
  774. aResult = oParser.parse(sHtmlContent, sPattern)
  775. #print aResult
  776. if (aResult[0]):
  777. return aResult[1][0]
  778. return ''
  779.  
  780. def CutNonPremiumlinks(sHtmlContent):
  781. oParser = cParser()
  782. sPattern = 'Lien Premium(.+?)Publie le '
  783. aResult = oParser.parse(sHtmlContent, sPattern)
  784. #print aResult
  785. if (aResult[0]):
  786. return aResult[1][0]
  787.  
  788. #Si ca marche pas on renvois le code complet
  789. return sHtmlContent
  790.  
  791. def CutPremiumlinks(sHtmlContent):
  792. oParser = cParser()
  793. sPattern = '(?i) par .{1,2}pisode(.+?)$'
  794. aResult = oParser.parse(sHtmlContent, sPattern)
  795. if (aResult[0]):
  796. sHtmlContent = aResult[1][0]
  797.  
  798. #Si ca marche pas on renvois le code complet
  799. return sHtmlContent
  800.  
  801. def DecryptDlProtecte(url):
  802.  
  803. VSlog('DecryptDlProtecte : ' + url)
  804. dialogs = dialog()
  805.  
  806. if not (url):
  807. return ''
  808.  
  809. #url=url.replace('https','http')
  810.  
  811. headersBase = {
  812. 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0',
  813. 'Referer' : url,
  814. #'Origin' : 'https://www.dl-protecte.com',
  815. 'Accept' : 'application/json, text/javascript, */*; q=0.01',
  816. 'Accept-Language': 'fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4',
  817. #'Pragma' : '',
  818. #'Accept-Charset' : ''
  819. }
  820.  
  821. #url2 = 'https://www.dl-protecte.org/php/Qaptcha.jquery.php'
  822. #url2 = 'https://www.protect-zt.com/php/Qaptcha.jquery.php'
  823. url2 = 'https://' + url.split('/')[2] + '/php/Qaptcha.jquery.php'
  824.  
  825. #VSlog(url2)
  826.  
  827. #Make random key
  828. s = "azertyupqsdfghjkmwxcvbn23456789AZERTYUPQSDFGHJKMWXCVBN_-#@";
  829. RandomKey = ''.join(random.choice(s) for i in range(32))
  830.  
  831. query_args = ( ('action' , 'qaptcha') , ('qaptcha_key' , RandomKey) )
  832. data = urllib.urlencode(query_args)
  833.  
  834. #Creation Header
  835. headers1 = dict(headersBase)
  836. headers1.update({'X-Requested-With':'XMLHttpRequest'})
  837. headers1.update({'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8'})
  838.  
  839. #Requete
  840. request = urllib2.Request(url2, data, headers1)
  841. try:
  842. reponse = urllib2.urlopen(request, timeout = 5)
  843. except urllib2.URLError, e:
  844. dialogs.VSinfo("Site Dl-Protecte HS", "Erreur", 5)
  845. VSlog( e.read() )
  846. VSlog( e.reason )
  847. return ''
  848. except urllib2.HTTPError, e:
  849. dialogs.VSinfo("Site Dl-Protecte HS", "Erreur", 5)
  850. VSlog( e.read() )
  851. VSlog( e.reason )
  852. return ''
  853. except timeout:
  854. VSlog('timeout')
  855. dialogs.VSinfo("Site Dl-Protecte HS", "Erreur", 5)
  856. return ''
  857.  
  858. sHtmlContent = reponse.read()
  859.  
  860. #VSlog( 'result' + str(sHtmlContent))
  861.  
  862. #Recuperatioen et traitement cookies ???
  863. cookies=reponse.info()['Set-Cookie']
  864. c2 = re.findall('(?:^|,) *([^;,]+?)=([^;,\/]+?);', cookies)
  865. if not c2:
  866. VSlog( 'Probleme de cookies')
  867. return ''
  868. cookies = ''
  869. for cook in c2:
  870. cookies = cookies + cook[0] + '=' + cook[1] + ';'
  871.  
  872. #VSlog( 'Cookie' + str(cookies))
  873.  
  874. reponse.close()
  875.  
  876. if not '"error":false' in sHtmlContent:
  877. VSlog('Captcha rate')
  878. VSlog(sHtmlContent)
  879. return
  880.  
  881. #Creation Header
  882. headers2 = dict(headersBase)
  883.  
  884. #tempo pas necessaire
  885. #cGui().showInfo("Patientez", 'Décodage en cours', 2)
  886. #xbmc.sleep(1000)
  887.  
  888. #Ancienne methode avec POST
  889. #query_args = ( ( 'YnJYHKk4xYUUu4uWQdxxuH@JEJ2yrmJS' , '' ) , ('submit' , 'Valider' ) )
  890. #data = urllib.urlencode(query_args)
  891.  
  892. #Nouvelle methode avec multipart
  893. #multipart_form_data = { RandomKey : '', 'submit' : 'Valider' }
  894.  
  895. import string
  896. _BOUNDARY_CHARS = string.digits + string.ascii_letters
  897. boundary = ''.join(random.choice(_BOUNDARY_CHARS) for i in range(30))
  898.  
  899. multipart_form_data = { RandomKey : '', 'submit' : 'Valider' }
  900. data, headersMulti = encode_multipart(multipart_form_data, {}, boundary)
  901. headers2.update(headersMulti)
  902. #VSlog( 'header 2' + str(headersMulti))
  903. #VSlog( 'data 2' + str(data))
  904.  
  905. #rajout des cookies
  906. headers2.update({'Cookie': cookies})
  907.  
  908. #Modifications
  909. headers2.update({'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'})
  910.  
  911. #VSlog( str(headers2) )
  912.  
  913. #Requete
  914. request = urllib2.Request(url, data, headers2)
  915. try:
  916. reponse = urllib2.urlopen(request)
  917. except urllib2.URLError, e:
  918. print e.read()
  919. print e.reason
  920.  
  921. sHtmlContent = reponse.read()
  922.  
  923. #fh = open('c:\\test.txt', "w")
  924. #fh.write(sHtmlContent)
  925. #fh.close()
  926.  
  927. reponse.close()
  928.  
  929. return sHtmlContent
  930.  
  931. #******************************************************************************
  932. #from http://code.activestate.com/recipes/578668-encode-multipart-form-data-for-uploading-files-via/
  933.  
  934. """Encode multipart form data to upload files via POST."""
  935.  
  936. def encode_multipart(fields, files, boundary = None):
  937. r"""Encode dict of form fields and dict of files as multipart/form-data.
  938. Return tuple of (body_string, headers_dict). Each value in files is a dict
  939. with required keys 'filename' and 'content', and optional 'mimetype' (if
  940. not specified, tries to guess mime type or uses 'application/octet-stream').
  941.  
  942. >>> body, headers = encode_multipart({'FIELD': 'VALUE'},
  943. ... {'FILE': {'filename': 'F.TXT', 'content': 'CONTENT'}},
  944. ... boundary='BOUNDARY')
  945. >>> print('\n'.join(repr(l) for l in body.split('\r\n')))
  946. '--BOUNDARY'
  947. 'Content-Disposition: form-data; name="FIELD"'
  948. ''
  949. 'VALUE'
  950. '--BOUNDARY'
  951. 'Content-Disposition: form-data; name="FILE"; filename="F.TXT"'
  952. 'Content-Type: text/plain'
  953. ''
  954. 'CONTENT'
  955. '--BOUNDARY--'
  956. ''
  957. >>> print(sorted(headers.items()))
  958. [('Content-Length', '193'), ('Content-Type', 'multipart/form-data; boundary=BOUNDARY')]
  959. >>> len(body)
  960. 193
  961. """
  962.  
  963. import mimetypes
  964. import random
  965. import string
  966.  
  967. _BOUNDARY_CHARS = string.digits + string.ascii_letters
  968.  
  969. def escape_quote(s):
  970. return s.replace('"', '\\"')
  971.  
  972. if boundary is None:
  973. boundary = ''.join(random.choice(_BOUNDARY_CHARS) for i in range(30))
  974. lines = []
  975.  
  976. for name, value in fields.items():
  977. lines.extend((
  978. '--{0}'.format(boundary),
  979. 'Content-Disposition: form-data; name="{0}"'.format(escape_quote(name)),
  980. '',
  981. str(value),
  982. ))
  983.  
  984. for name, value in files.items():
  985. filename = value['filename']
  986. if 'mimetype' in value:
  987. mimetype = value['mimetype']
  988. else:
  989. mimetype = mimetypes.guess_type(filename)[0] or 'application/octet-stream'
  990. lines.extend((
  991. '--{0}'.format(boundary),
  992. 'Content-Disposition: form-data; name="{0}"; filename="{1}"'.format(
  993. escape_quote(name), escape_quote(filename)),
  994. 'Content-Type: {0}'.format(mimetype),
  995. '',
  996. value['content'],
  997. ))
  998.  
  999. lines.extend((
  1000. '--{0}--'.format(boundary),
  1001. '',
  1002. ))
  1003. body = '\r\n'.join(lines)
  1004.  
  1005. headers = {
  1006. 'Content-Type': 'multipart/form-data; boundary={0}'.format(boundary),
  1007. 'Content-Length': str(len(body)),
  1008. }
  1009.  
  1010. return (body, headers)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement