PageRenderTime 26ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/Repo/plugin.video.md123movies/default.py

https://gitlab.com/TheVibeTeam/repository.thevibe
Python | 431 lines | 424 code | 3 blank | 4 comment | 4 complexity | 9132b9f860c02ba691534fe8895919a7 MD5 | raw file
  1. import urllib,re,xbmcplugin,xbmcgui,xbmc,xbmcaddon,os
  2. import requests
  3. from addon.common.addon import Addon
  4. from addon.common.net import Net
  5. #By Mucky Duck (12/2015)
  6. addon_id='plugin.video.md123movies'
  7. selfAddon = xbmcaddon.Addon(id=addon_id)
  8. addon = Addon(addon_id, sys.argv)
  9. art = xbmc.translatePath(os.path.join('special://home/addons/' + addon_id + '/resources/art/'))
  10. icon = xbmc.translatePath(os.path.join('special://home/addons/' + addon_id, 'icon.png'))
  11. fanart = xbmc.translatePath(os.path.join('special://home/addons/' + addon_id , 'fanart.jpg'))
  12. User_Agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36'
  13. show_tv = selfAddon.getSetting('enable_shows')
  14. baseurl = 'http://123movies.to'
  15. net = Net()
  16. def CAT():
  17. addDir('[B][COLOR white]Most Favorite[/COLOR][/B]',baseurl+'/movie/filter/movie/favorite/all/all/all/all/all',1,icon,fanart,'')
  18. addDir('[B][COLOR white]Most Ratings[/COLOR][/B]',baseurl+'/movie/filter/movie/rating/all/all/all/all/all',1,icon,fanart,'')
  19. addDir('[B][COLOR white]Most Viewed[/COLOR][/B]',baseurl+'/movie/filter/movie/view/all/all/all/all/all',1,icon,fanart,'')
  20. addDir('[B][COLOR white]Top IMDB[/COLOR][/B]',baseurl+'/movie/filter/movie/imdb_mark/all/all/all/all/all',1,icon,fanart,'')
  21. addDir('[B][COLOR white]Country[/COLOR][/B]',baseurl+'/movie/filter/all',10,icon,fanart,'')
  22. addDir('[B][COLOR white]Search[/COLOR][/B]','url',8,icon,fanart,'')
  23. addDir('[B][COLOR white]Latest[/COLOR][/B]',baseurl+'/movie/filter/movie/latest/all/all/all/all/all',1,icon,fanart,'')
  24. addDir('[B][COLOR white]Genre[/COLOR][/B]',baseurl+'/movie/filter/all',9,icon,fanart,'')
  25. addDir('[B][COLOR white]Year[/COLOR][/B]',baseurl+'/movie/filter/all',11,icon,fanart,'')
  26. if show_tv == 'true':
  27. addDir('[B][COLOR white]TV[/COLOR][/B]','url',4,icon,fanart,'')
  28. def TV():
  29. addDir('[B][COLOR white]Most Favorite[/COLOR][/B]',baseurl+'/movie/filter/series/favorite/all/all/all/all/all',2,icon,fanart,'')
  30. addDir('[B][COLOR white]Most Ratings[/COLOR][/B]',baseurl+'/movie/filter/series/rating/all/all/all/all/all',2,icon,fanart,'')
  31. addDir('[B][COLOR white]Most Viewed[/COLOR][/B]',baseurl+'/movie/filter/series/view/all/all/all/all/all',2,icon,fanart,'')
  32. addDir('[B][COLOR white]Top IMDB[/COLOR][/B]',baseurl+'/movie/filter/series/imdb_mark/all/all/all/all/all',2,icon,fanart,'')
  33. addDir('[B][COLOR white]Country[/COLOR][/B]',baseurl+'/movie/filter/series',10,icon,fanart,'')
  34. addDir('[B][COLOR white]Search[/COLOR][/B]','url',8,icon,fanart,'')
  35. addDir('[B][COLOR white]Latest[/COLOR][/B]',baseurl+'/movie/filter/series/latest/all/all/all/all/all',2,icon,fanart,'')
  36. addDir('[B][COLOR white]Genre[/COLOR][/B]',baseurl+'/movie/filter/series',9,icon,fanart,'')
  37. addDir('[B][COLOR white]Year[/COLOR][/B]',baseurl+'/movie/filter/series',11,icon,fanart,'')
  38. def GENRE(url):
  39. link = OPEN_URL(url)
  40. link = link.encode('ascii', 'ignore')
  41. match=re.compile('<input class="genre-ids" value="(.*?)" name=".*?"\n.*?type="checkbox" >(.*?)</label>').findall(link)
  42. for url2,name in match:
  43. name = name.replace(' ','')
  44. if '/series' in url:
  45. url2 = baseurl + '/movie/filter/series/latest/'+url2+'/all/all/all/all'
  46. addDir('[B][COLOR white]%s[/COLOR][/B]' %name,url2,2,icon,fanart,'')
  47. else:
  48. url2 = baseurl + '/movie/filter/movie/latest/'+url2+'/all/all/all/all'
  49. addDir('[B][COLOR white]%s[/COLOR][/B]' %name,url2,1,icon,fanart,'')
  50. def COUNTRY(url):
  51. link = OPEN_URL(url)
  52. link = link.encode('ascii', 'ignore')
  53. match=re.compile('<input class="country-ids" value="(.*?)" name=".*?"\n.*?type="checkbox" >(.*?)</label>').findall(link)
  54. for url2,name in match:
  55. name = name.replace(' ','')
  56. if '/series' in url:
  57. url2 = baseurl + '/movie/filter/series/latest/all/'+url2+'/all/all/all'
  58. addDir('[B][COLOR white]%s[/COLOR][/B]' %name,url2,2,icon,fanart,'')
  59. else:
  60. url2 = baseurl + '/movie/filter/movie/latest/all/'+url2+'/all/all/all'
  61. addDir('[B][COLOR white]%s[/COLOR][/B]' %name,url2,1,icon,fanart,'')
  62. def YEAR(url):
  63. link = OPEN_URL(url)
  64. link = link.encode('ascii', 'ignore')
  65. match=re.compile('value="(.*?)" name="year"\n.*?>(.*?)</label>').findall(link)
  66. for url2,name in match:
  67. name = name.replace(' ','')
  68. if '/series' in url:
  69. url2 = baseurl + '/movie/filter/series/latest/all/all/'+url2+'/all/all'
  70. addDir('[B][COLOR white]%s[/COLOR][/B]' %name,url2,2,icon,fanart,'')
  71. else:
  72. url2 = baseurl + '/movie/filter/movie/latest/all/all/'+url2+'/all/all'
  73. addDir('[B][COLOR white]%s[/COLOR][/B]' %name,url2,1,icon,fanart,'')
  74. if '/series' in url:
  75. addDir('[B][COLOR white]Older[/COLOR][/B]',baseurl+'/movie/filter/series/latest/all/all/older-2012/all/all',2,icon,fanart,'')
  76. else:
  77. addDir('[B][COLOR white]Older[/COLOR][/B]',baseurl+'/movie/filter/movie/latest/all/all/older-2012/all/all',1,icon,fanart,'')
  78. def INDEX(url):
  79. link = OPEN_URL(url)
  80. link = link.encode('ascii', 'ignore').decode('ascii')
  81. all_videos = regex_get_all(link, '<div class="ml-item">', '</h2></span>')
  82. for a in all_videos:
  83. name = regex_from_to(a, 'title="', '"').replace("&amp;","&").replace('&#39;',"'").replace('&quot;','"').replace('&#39;',"'")
  84. url = regex_from_to(a, 'href="', '"').replace("&amp;","&")
  85. icon = regex_from_to(a, 'original="', '"')
  86. #dis = regex_from_to(a, 'data-url="', '"')[0].replace("&amp;","&").replace('&#39;',"'").replace('&quot;','"').replace('&#39;',"'")
  87. if 'Season' not in name:
  88. addDir('[B][COLOR white]%s[/COLOR][/B]' %name,url+'watching.html',3,icon,fanart,'')
  89. try:
  90. nextp=re.compile('<li class="next"><a href="(.*?)" data-ci-pagination-page=".*?" rel="next">').findall(link)[0]
  91. addDir('[B][COLOR red]Next Page>>>[/COLOR][/B]',nextp,1,icon,fanart,'')
  92. except: pass
  93. setView('movies', 'show-view')
  94. def INDEX2(url):
  95. link = OPEN_URL(url)
  96. link = link.encode('ascii', 'ignore').decode('ascii')
  97. all_videos = regex_get_all(link, '<div class="ml-item">', '</h2></span>')
  98. for a in all_videos:
  99. name = regex_from_to(a, 'title="', '"').replace("&amp;","&").replace('&#39;',"'").replace('&quot;','"').replace('&#39;',"'")
  100. url = regex_from_to(a, 'href="', '"').replace("&amp;","&")
  101. icon = regex_from_to(a, 'original="', '"')
  102. #dis = regex_from_to(a, '<p>', '</p>').replace("&amp;","&").replace('&#39;',"'").replace('&quot;','"').replace('&#39;',"'")
  103. if 'Season' in name:
  104. addDir('[B][COLOR white]%s[/COLOR][/B]' %name,url+'watching.html',6,icon,fanart,'')
  105. try:
  106. nextp=re.compile('<li class="next"><a href="(.*?)" data-ci-pagination-page=".*?" rel="next">').findall(link)[0]
  107. addDir('[B][COLOR red]Next Page>>>[/COLOR][/B]',nextp,2,icon,fanart,'')
  108. except: pass
  109. setView('movies', 'show-view')
  110. def EPIS(url):
  111. link = OPEN_URL(url)
  112. token = re.compile('token="(.*?)"').findall(link)[0]
  113. video_id = re.compile('-id="(.*?)"').findall(link)[0]
  114. request_url = 'http://123movies.to/ajax/get_episodes/'+video_id+'/'+token
  115. link = OPEN_URL(request_url)
  116. all_videos = regex_get_all(link, '<a', '</a>')
  117. for a in all_videos:
  118. name = regex_from_to(a, 'title="', '"').replace("&amp;","&").replace('&#39;',"'").replace('&quot;','"').replace('&#39;',"'")
  119. hash_id = regex_from_to(a, 'hash="', '"')
  120. episode_id = regex_from_to(a, 'episode-id="', '"')
  121. url = 'http://123movies.to/ajax/load_episode/'+episode_id+'/'+hash_id
  122. addDir('[B][COLOR white]%s[/COLOR][/B]' %name,url,7,icon,fanart,'')
  123. setView('movies', 'show-view')
  124. def LINKS(url):
  125. link = OPEN_URL(url)
  126. token = re.compile('token="(.*?)"').findall(link)[0]
  127. video_id = re.compile('-id="(.*?)"').findall(link)[0]
  128. request_url = 'http://123movies.to/ajax/get_episodes/'+video_id+'/'+token
  129. try:
  130. link = OPEN_URL(request_url)
  131. all_videos = regex_get_all(link, '"server-9"', '"clearfix"')
  132. for a in all_videos:
  133. print
  134. hash_id = regex_from_to(a, 'hash="', '"')
  135. episode_id = regex_from_to(a, 'episode-id="', '"')
  136. #hash_id = re.compile(r'hash="(.*?)"').findall(link)[0]
  137. #episode_id = re.compile(r'episode-id="(.*?)"').findall(link)[0]
  138. request_url = 'http://123movies.to/ajax/load_episode/'+episode_id+'/'+hash_id
  139. headers = {'host': '123movies.to', 'referer': url,
  140. 'user-agent':User_Agent,'x-requested-with':'XMLHttpRequest'}
  141. link = OPEN_URL(request_url)
  142. url = re.compile('file="(.*?)"').findall(link)[-1]
  143. if 'http://sub.' in url:
  144. url = re.compile('file="(.*?)"').findall(link)[-2]
  145. if 'http://sub.' in url:
  146. url = re.compile('file="(.*?)"').findall(link)[-3]
  147. liz = xbmcgui.ListItem(name, iconImage='DefaultVideo.png', thumbnailImage=iconimage)
  148. liz.setInfo(type='Video', infoLabels={'Title':description})
  149. liz.setProperty("IsPlayable","true")
  150. liz.setPath(url)
  151. xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, liz)
  152. else:
  153. liz = xbmcgui.ListItem(name, iconImage='DefaultVideo.png', thumbnailImage=iconimage)
  154. liz.setInfo(type='Video', infoLabels={'Title':description})
  155. liz.setProperty("IsPlayable","true")
  156. liz.setPath(url)
  157. xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, liz)
  158. else:
  159. liz = xbmcgui.ListItem(name, iconImage='DefaultVideo.png', thumbnailImage=iconimage)
  160. liz.setInfo(type='Video', infoLabels={'Title':description})
  161. liz.setProperty("IsPlayable","true")
  162. liz.setPath(url)
  163. xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, liz)
  164. except:
  165. url = re.compile('file="(.*?)"').findall(link)[0]
  166. liz = xbmcgui.ListItem(name, iconImage='DefaultVideo.png', thumbnailImage=iconimage)
  167. liz.setInfo(type='Video', infoLabels={'Title':description})
  168. liz.setProperty("IsPlayable","true")
  169. liz.setPath(url)
  170. xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, liz)
  171. def LINKS2(url):
  172. headers = {'host': '123movies.to', 'referer': url,
  173. 'user-agent':User_Agent,'x-requested-with':'XMLHttpRequest'}
  174. link = requests.get(url, headers=headers, allow_redirects=False).text
  175. try:
  176. url = re.compile('file="(.*?)"').findall(link)[-1]
  177. if 'http://sub' in url:
  178. url = re.compile('file="(.*?)"').findall(link)[-2]
  179. if 'http://sub.' in url:
  180. url = re.compile('file="(.*?)"').findall(link)[--3]
  181. liz = xbmcgui.ListItem(name, iconImage='DefaultVideo.png', thumbnailImage=iconimage)
  182. liz.setInfo(type='Video', infoLabels={'Title':description})
  183. liz.setProperty("IsPlayable","true")
  184. liz.setPath(url)
  185. xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, liz)
  186. else:
  187. liz = xbmcgui.ListItem(name, iconImage='DefaultVideo.png', thumbnailImage=iconimage)
  188. liz.setInfo(type='Video', infoLabels={'Title':description})
  189. liz.setProperty("IsPlayable","true")
  190. liz.setPath(url)
  191. xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, liz)
  192. else:
  193. liz = xbmcgui.ListItem(name, iconImage='DefaultVideo.png', thumbnailImage=iconimage)
  194. liz.setInfo(type='Video', infoLabels={'Title':description})
  195. liz.setProperty("IsPlayable","true")
  196. liz.setPath(url)
  197. xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, liz)
  198. except:
  199. url = re.compile('file="(.*?)"').findall(link)[0]
  200. liz = xbmcgui.ListItem(name, iconImage='DefaultVideo.png', thumbnailImage=iconimage)
  201. liz.setInfo(type='Video', infoLabels={'Title':description})
  202. liz.setProperty("IsPlayable","true")
  203. liz.setPath(url)
  204. xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, liz)
  205. def SEARCH(query,type):
  206. if query:
  207. search = query.replace(' ','+')
  208. else:
  209. keyb = xbmc.Keyboard('', 'Type in Query')
  210. keyb.doModal()
  211. if (keyb.isConfirmed()):
  212. search = keyb.getText().replace(' ','+')
  213. if search == '':
  214. xbmc.executebuiltin("XBMC.Notification([COLOR gold][B]EMPTY QUERY[/B][/COLOR],Aborting search,7000,"+icon+")")
  215. return
  216. else: pass
  217. url = baseurl+'/movie/search/'+search
  218. print url
  219. link = OPEN_URL(url)
  220. link = link.encode('ascii', 'ignore').decode('ascii')
  221. all_videos = regex_get_all(link, '<div class="ml-item">', '</h2></span>')
  222. for a in all_videos:
  223. name = regex_from_to(a, 'title="', '"').replace("&amp;","&").replace('&#39;',"'").replace('&quot;','"').replace('&#39;',"'")
  224. url = regex_from_to(a, 'href="', '"').replace("&amp;","&")
  225. icon = regex_from_to(a, 'original="', '"')
  226. #dis = regex_from_to(a, '<p>', '</p>').replace("&amp;","&").replace('&#39;',"'").replace('&quot;','"').replace('&#39;',"'")
  227. if 'Season' in name:
  228. if type != 'tv':
  229. addDir('[B][COLOR white]%s[/COLOR][/B]' %name,url+'watching.html',6,icon,fanart,'')
  230. else:
  231. if type != 'movie':
  232. addDir('[B][COLOR white]%s[/COLOR][/B]' %name,url+'watching.html',3,icon,fanart,'')
  233. # OpenELEQ: query & type-parameter (edited 27 lines above)
  234. def regex_from_to(text, from_string, to_string, excluding=True):
  235. if excluding:
  236. try: r = re.search("(?i)" + from_string + "([\S\s]+?)" + to_string, text).group(1)
  237. except: r = ''
  238. else:
  239. try: r = re.search("(?i)(" + from_string + "[\S\s]+?" + to_string + ")", text).group(1)
  240. except: r = ''
  241. return r
  242. def regex_get_all(text, start_with, end_with):
  243. r = re.findall("(?i)(" + start_with + "[\S\s]+?" + end_with + ")", text)
  244. return r
  245. def get_params():
  246. param=[]
  247. paramstring=sys.argv[2]
  248. if len(paramstring)>=2:
  249. params=sys.argv[2]
  250. cleanedparams=params.replace('?','')
  251. if (params[len(params)-1]=='/'):
  252. params=params[0:len(params)-2]
  253. pairsofparams=cleanedparams.split('&')
  254. param={}
  255. for i in range(len(pairsofparams)):
  256. splitparams={}
  257. splitparams=pairsofparams[i].split('=')
  258. if (len(splitparams))==2:
  259. param[splitparams[0]]=splitparams[1]
  260. return param
  261. def addDir(name,url,mode,iconimage,fanart,description):
  262. u=sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode="+str(mode)+"&name="+urllib.quote_plus(name)+"&iconimage="+urllib.quote_plus(iconimage)+"&description="+urllib.quote_plus(description)
  263. ok=True
  264. liz=xbmcgui.ListItem(name, iconImage="DefaultFolder.png", thumbnailImage=iconimage)
  265. liz.setInfo( type="Video", infoLabels={ "Title": name,"Plot":description} )
  266. liz.setProperty('fanart_image', fanart)
  267. if mode==3 or mode==7:
  268. liz.setProperty("IsPlayable","true")
  269. ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=False)
  270. else:
  271. ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=True)
  272. return ok
  273. def addLink(name,url,mode,iconimage,fanart,description=''):
  274. #u=sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode="+str(mode)+"&name="+urllib.quote_plus(name)+"&description="+str(description)
  275. #ok=True
  276. liz=xbmcgui.ListItem(name, iconImage="DefaultFolder.png", thumbnailImage=iconimage)
  277. liz.setInfo( type="Video", infoLabels={ "Title": name, 'plot': description } )
  278. liz.setProperty('fanart_image', fanart)
  279. ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=url,listitem=liz,isFolder=False)
  280. return ok
  281. def OPEN_URL(url):
  282. headers = {}
  283. headers['User-Agent'] = User_Agent
  284. link = requests.get(url, headers=headers, allow_redirects=False).text
  285. link = link.encode('ascii', 'ignore')
  286. return link
  287. def setView(content, viewType):
  288. if content:
  289. xbmcplugin.setContent(int(sys.argv[1]), content)
  290. if addon.get_setting('auto-view') == 'true':
  291. print addon.get_setting(viewType)
  292. if addon.get_setting(viewType) == 'Info':
  293. VT = '504'
  294. elif addon.get_setting(viewType) == 'Info2':
  295. VT = '503'
  296. elif addon.get_setting(viewType) == 'Info3':
  297. VT = '515'
  298. elif addon.get_setting(viewType) == 'Fanart':
  299. VT = '508'
  300. elif addon.get_setting(viewType) == 'Poster Wrap':
  301. VT = '501'
  302. elif addon.get_setting(viewType) == 'Big List':
  303. VT = '51'
  304. elif viewType == 'default-view':
  305. VT = addon.get_setting(viewType)
  306. print viewType
  307. print VT
  308. xbmc.executebuiltin("Container.SetViewMode(%s)" % ( int(VT) ) )
  309. xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_UNSORTED )
  310. xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_LABEL )
  311. xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_VIDEO_RATING )
  312. xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_DATE )
  313. xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_PROGRAM_COUNT )
  314. xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_VIDEO_RUNTIME )
  315. xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_GENRE )
  316. xbmcplugin.addSortMethod( handle=int( sys.argv[ 1 ] ), sortMethod=xbmcplugin.SORT_METHOD_MPAA_RATING )
  317. params=get_params()
  318. url=None
  319. name=None
  320. mode=None
  321. iconimage=None
  322. description=None
  323. site=None
  324. query=None
  325. type=None
  326. # OpenELEQ: query & type-parameter (added 2 lines above)
  327. try:
  328. url=urllib.unquote_plus(params["url"])
  329. except:
  330. pass
  331. try:
  332. name=urllib.unquote_plus(params["name"])
  333. except:
  334. pass
  335. try:
  336. iconimage=urllib.unquote_plus(params["iconimage"])
  337. except:
  338. pass
  339. try:
  340. mode=int(params["mode"])
  341. except:
  342. pass
  343. try:
  344. description=urllib.unquote_plus(params["description"])
  345. except:
  346. pass
  347. try:
  348. query=urllib.unquote_plus(params["query"])
  349. except:
  350. pass
  351. try:
  352. type=urllib.unquote_plus(params["type"])
  353. except:
  354. pass
  355. # OpenELEQ: query & type-parameter (added 8 lines above)
  356. if mode==None or url==None or len(url)<1:
  357. CAT()
  358. elif mode==1:
  359. INDEX(url)
  360. elif mode==2:
  361. INDEX2(url)
  362. elif mode==3:
  363. LINKS(url)
  364. elif mode==4:
  365. TV()
  366. elif mode==6:
  367. EPIS(url)
  368. elif mode==7:
  369. LINKS2(url)
  370. elif mode==8:
  371. SEARCH(query,type)
  372. # OpenELEQ: query & type-parameter (added to line above)
  373. elif mode==9:
  374. GENRE(url)
  375. elif mode==10:
  376. COUNTRY(url)
  377. elif mode==11:
  378. YEAR(url)
  379. xbmcplugin.endOfDirectory(int(sys.argv[1]))