Advertisement
Guest User

python

a guest
Jul 17th, 2012
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.17 KB | None | 0 0
  1. import xbmc, xbmcgui, xbmcaddon, xbmcplugin
  2. import urllib, urllib2
  3. import re, string, sys, os
  4. import urlresolver
  5. from t0mm0.common.addon import Addon
  6. from t0mm0.common.net import Net
  7. import HTMLParser
  8.  
  9. try:
  10. from sqlite3 import dbapi2 as sqlite
  11. print "Loading sqlite3 as DB engine"
  12. except:
  13. from pysqlite2 import dbapi2 as sqlite
  14. print "Loading pysqlite2 as DB engine"
  15.  
  16. addon_id = 'plugin.video.videogirmit'
  17. plugin = xbmcaddon.Addon(id=addon_id)
  18.  
  19. DB = os.path.join(xbmc.translatePath("special://database"), 'videogirmit.db')
  20. BASE_URL = 'http://www.videogirmit.com'
  21. net = Net()
  22. addon = Addon('plugin.video.videogirmit', sys.argv)
  23. showAllParts = True
  24. showPlayAll = True
  25.  
  26. if plugin.getSetting('showAllParts') == 'false':
  27. showAllParts = False
  28.  
  29. if plugin.getSetting('showPlayAll') == 'false':
  30. showPlayAll = False
  31.  
  32. ##### Queries ##########
  33. mode = addon.queries['mode']
  34. url = addon.queries.get('url', None)
  35. content = addon.queries.get('content', None)
  36. query = addon.queries.get('query', None)
  37. startPage = addon.queries.get(
  38. 'startPage', None)
  39. numOfPages = addon.queries.get('numOfPages', None)
  40. listitem = addon.queries.get('listitem', None)
  41. urlList = addon.queries.get('urlList', None)
  42.  
  43.  
  44.  
  45. def GetTitles(url, startPage= '1', numOfPages= '1'): # Get Movie Titles
  46. print 'videogirmit get Movie Titles Menu %s' % url
  47.  
  48. # handle paging
  49. pageUrl = url
  50. if int(startPage)> 1:
  51. pageUrl = url + '-' + startPage + '.html'
  52. print pageUrl
  53. html = net.http_GET(pageUrl).content
  54.  
  55. start = int(startPage)
  56. end = start + int(numOfPages)
  57.  
  58. last = 2
  59. match = re.search('class="first_last".+?-([\d]+).html', html)
  60. if match:
  61. last = int(match.group(1))
  62.  
  63. # Get the sticky section only once
  64. if start == 1:
  65. match = re.compile('Sticky:.+?href="(.+?)".+?>(.+?)<', re.DOTALL).findall(html)
  66. for movieUrl, name in match:
  67. cm = []
  68. r = re.search('([\w\s]+)', name)
  69. if r:
  70. title = r.group(1)
  71. else:
  72. title = name
  73. runstring = 'XBMC.Container.Update(plugin://plugin.video.videogirmit/?mode=Search&query=%s)' %(title)
  74. cm.append(('Search on videogirmit', runstring))
  75. addon.add_directory({'mode': 'GetLinks', 'url': movieUrl}, {'title': name}, contextmenu_items= cm)
  76.  
  77. print str(start) + ' : ' + str(end) + ' : ' + str(last)
  78. for page in range( start, min(last, end)):
  79. if ( page != start):
  80. pageUrl = url + '-' + str(page) + '.html'
  81. html = net.http_GET(pageUrl).content
  82.  
  83. match = re.compile('nonsticky.+?<a class=".+?" href="(.+?)".+?>(.+?)<', re.DOTALL).findall(html)
  84. for movieUrl, name in match:
  85. cm = []
  86. title = name.partition(' ')
  87. runstring = 'XBMC.Container.Update(plugin://plugin.video.videogirmit/?mode=Search&query=%s)' %(title[0])
  88. cm.append(('Search on videogirmit', runstring))
  89. addon.add_directory({'mode': 'GetLinks', 'url': movieUrl}, {'title': name}, contextmenu_items= cm)
  90.  
  91. # keep iterating until the laast page is reached
  92. if end < last:
  93. addon.add_directory({'mode': 'GetTitles', 'url': url, 'startPage': str(end), 'numOfPages': numOfPages}, {'title': 'Next...'})
  94.  
  95. xbmcplugin.endOfDirectory(int(sys.argv[1]))
  96.  
  97.  
  98. def GetLinks(url): # Get Links
  99. print '***************************************************** In GetLinks %s' % url
  100. html = net.http_GET(url).content
  101. listitem = GetMediaInfo(html)
  102.  
  103. match = re.compile('<pre class="bbcode_code"style="height:(.+?)</div>', re.DOTALL).findall(html)
  104. for data in match:
  105. urlList = []
  106. links = re.compile('http(.+?)(?:\n|<|")').findall(data)
  107. firstPart = True
  108. print '******************************************************'
  109. for url in links:
  110.  
  111. if 'http' not in url:
  112. url = 'http' + url
  113. print url
  114. url = url.replace(' ', '')
  115. host = GetDomain(url)
  116.  
  117. # Get all mirrors for mirorii.com and it it to links
  118. if 'mirorii.com' in url:
  119. links.extend(GetMirroriLinks(url))
  120. continue
  121. if 'multiup.org' in url:
  122. links.extend(GetMultiup(url))
  123. continue
  124.  
  125. # ignore .rar files
  126. r = re.search('\.rar[(?:\.html|\.htm)]*', url, re.IGNORECASE)
  127. if r:
  128. print 'ignored videogirmit url %s' % url
  129. continue
  130.  
  131. # ignore .srt files
  132. r = re.search('\.srt[(?:\.html|\.htm)]*$', url, re.IGNORECASE)
  133. if r:
  134. print 'ignored videogirmit url %s' % url
  135. continue
  136.  
  137. # find parts and build array for plalist
  138. r = re.search('\.[0]+([\d]+)[\.]*[(?:html|htm)]*', url, re.IGNORECASE)
  139. if r:
  140. print 'its a part file'
  141. partNum = r.group(1)
  142. if firstPart:
  143. print 'in First part'
  144. if len(urlList) > 0:
  145. if showPlayAll and urlresolver.HostedMediaFile(url= urlList[0]):
  146. print 'adding previous parts'
  147. title = GetDomain(urlList[0]) + ' : Play All ' + str(len(urlList)) + ' Parts'
  148. addon.add_directory({'mode': 'PlayVideo', 'urlList': SortUrlList(urlList), 'listitem': listitem}, {'title': title })
  149.  
  150. urlList = []
  151. firstPart = False
  152. urlList.append(url)
  153. if showAllParts and urlresolver.HostedMediaFile(url= url):
  154. title = url.rpartition('/')
  155. title = title[2].replace('.html', '')
  156. title = title.replace('.htm', '')
  157. title = GetDomain(url) + ' : ' + title
  158. addon.add_directory({'mode': 'PlayVideo', 'urlList': [url], 'listitem': listitem}, {'title': title })
  159. continue
  160. else:
  161. print 'its a single file'
  162. if len(urlList) > 0:
  163. print 'adding previous parts'
  164. if showPlayAll and urlresolver.HostedMediaFile(url= urlList[0]):
  165. print 'adding previous parts'
  166. title = GetDomain(urlList[0]) + ' : Play All ' + str(len(urlList)) + ' Parts'
  167. addon.add_directory({'mode': 'PlayVideo', 'urlList': urlList, 'listitem': listitem}, {'title': title })
  168. print 'single file link'
  169. # if its a single link just build array of just that link
  170. urlList = []
  171. urlList.append(url)
  172.  
  173. if urlresolver.HostedMediaFile(url= urlList[0]):
  174. host = host + ' : Single link'
  175. addon.add_directory({'mode': 'PlayVideo', 'urlList': urlList, 'listitem': listitem}, {'title': host})
  176. urlList = []
  177. if len(urlList) > 0:
  178. if showPlayAll and urlresolver.HostedMediaFile(url= urlList[0]):
  179. title = GetDomain(urlList[0]) + ' : Play All ' + str(len(urlList)) + ' Parts'
  180. addon.add_directory({'mode': 'PlayVideo', 'urlList': SortUrlList(urlList), 'listitem': listitem}, {'title': title })
  181. urlList = []
  182.  
  183. match = re.compile('<a onclick=".+?" href="(.+?)".+?">(.+?)<', re.DOTALL).findall(html)
  184. urlList = []
  185. for url, name in match:
  186.  
  187. host = GetDomain(url)
  188.  
  189. #ignore unknown hosts
  190. if 'Unknown' in host:
  191. continue
  192. # Resolve links if its a known videogirmit mirror
  193. if any(host in s for s in SITES_1) or any(host in s for s in SITES_2) or any(host in s for s in SITES_3) :
  194. url = GetVideoLinks(host, url)
  195. host = GetDomain(url)
  196.  
  197. print '##################################### %s %s' %(url, name)
  198. # ignore .rar files
  199. # \.rar[(?:\.html$|\.htm$)]+
  200. r = re.search('\.rar[(?:\.html|\.htm)]*', url, re.IGNORECASE)
  201. if r:
  202. print 'ignored videogirmit url %s' % url
  203. continue
  204.  
  205. # find parts and build array for plalist
  206. print ' ------------------Name is %s----' % name
  207. r = re.search('Part?.([\d]+)[\s]*', name, re.IGNORECASE)
  208. if r:
  209. print 'found parts'
  210. partNum = r.group(1)
  211. if int(partNum.strip()) == 1:
  212. print 'in First part'
  213. if len(urlList) > 0:
  214. if showPlayAll and urlresolver.HostedMediaFile(url= urlList[0]):
  215. print 'in parts : adding previous parts %d' % len(urlList)
  216. title = GetDomain(urlList[0]) + ' : Play All ' + str(len(urlList)) + ' Parts'
  217. addon.add_directory({'mode': 'PlayVideo', 'urlList': urlList, 'listitem': listitem}, {'title': title })
  218. urlList = []
  219. urlList.append(url)
  220. if showAllParts and urlresolver.HostedMediaFile(url= url):
  221. title = GetDomain(url) + ' : Part ' + partNum
  222. addon.add_directory({'mode': 'PlayVideo', 'urlList': [ url ], 'listitem': listitem}, {'title': title})
  223. continue
  224. else:
  225. if len(urlList) > 0:
  226. if showPlayAll and urlresolver.HostedMediaFile(url= urlList[0]):
  227. print 'in single : adding previous parts %d' % len(urlList)
  228. title = GetDomain(urlList[0]) + ' : Play All ' + str(len(urlList)) + ' Parts'
  229. addon.add_directory({'mode': 'PlayVideo', 'urlList': urlList, 'listitem': listitem}, {'title': title })
  230. print 'single file link'
  231. # if its a single link just build array of just that link
  232. urlList = []
  233. urlList.append(url)
  234.  
  235. if urlresolver.HostedMediaFile(url= urlList[0]):
  236. host = host + ' : Single link'
  237. addon.add_directory({'mode': 'PlayVideo', 'urlList': urlList, 'listitem': listitem}, {'title': host})
  238. urlList = []
  239.  
  240. if len(urlList) > 0:
  241. if showPlayAll and urlresolver.HostedMediaFile(url= urlList[0]):
  242. title = GetDomain(urlList[0]) + ' : Play All ' + str(len(urlList)) + ' Parts'
  243. addon.add_directory({'mode': 'PlayVideo', 'urlList': urlList, 'listitem': listitem}, {'title': title })
  244.  
  245. xbmcplugin.endOfDirectory(int(sys.argv[1]))
  246.  
  247. def SortUrlList(urlList):
  248. print 'In SortUrlList'
  249. retList = [''] * len(urlList)
  250. for url in urlList:
  251. partNum = re.search('\.[0]+([\d]+)[\.]*[(?:html|htm)]*', url, re.IGNORECASE).group(1)
  252. retList[int(partNum) - 1] = url
  253. print retList
  254. return retList
  255.  
  256. def GetVideoLinks(host, url):
  257. if any(host in s for s in SITES_1):
  258. links = re.compile('<embed src="(.+?)"').findall(net.http_GET(url).content)
  259. if len(links):
  260. return links[0]
  261. if any(host in s for s in SITES_1):
  262. links = re.compile('<iframe src="(.+?)"', re.IGNORECASE).findall(net.http_GET(url).content)
  263. if len(links):
  264. return links[0]
  265. if any(host in s for s in SITES_2):
  266. links = re.compile('object.+?src="(.+?)"').findall(net.http_GET(url).content)
  267. if len(links):
  268. return links[0]
  269.  
  270. if any(host in s for s in SITES_3):
  271. links = re.compile('<iframe src="(.+?)"', re.IGNORECASE).findall(net.http_GET(url).content)
  272. if len(links):
  273. return links[0]
  274. if any(host in s for s in SITES_2):
  275. links = re.compile('name="movie" value="(.+?)"').findall(net.http_GET(url).content)
  276. if len(links):
  277. return links[0]
  278. #print 'ignored videogirmit url %s' % url
  279. return url
  280.  
  281. def GetMirroriLinks(url):
  282. html = net.http_GET(url).content
  283. match = re.compile('<li id=".+?".+?href="(.+?)"').findall(html)
  284. return match
  285.  
  286. def GetMultiup(url):
  287. html = net.http_GET(url).content
  288. form_values = {}
  289. for i in re.finditer('<input type="hidden" name="(.+?)" value="(.+?)"', html):
  290. form_values[i.group(1)] = i.group(2)
  291. r = re.search('What is the result of ([\d]+) \+ ([\d]+)', html)
  292. if not r:
  293. print 'could not find security code'
  294. return []
  295. form_values["data[Fichier][security_code]"] = str(int(r.group(1)) + int(r.group(2)))
  296. html = net.http_POST(url, form_data=form_values).content
  297. match = re.compile('href="(.+?)">Download').findall(html)
  298. return match
  299.  
  300.  
  301. def PlayVideo(urlList, listitem):
  302. print '************************************* in PlayVideo'
  303. print urlList
  304.  
  305. playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)
  306. playlist.clear()
  307. urlList = map(str, urlList[1:-1].split(','))
  308. try:
  309. for url in urlList:
  310. url = url.replace('\\r', '').replace("u'", "").replace("'", "").strip()
  311. print 'url is %s' % url
  312. playlist.add(url= urlresolver.HostedMediaFile(url).resolve())
  313. xbmc.Player().play(playlist)
  314. except:
  315. print 'error while trying to PlayVideo'
  316.  
  317. def GetDomain(url):
  318. tmp = re.compile('//(.+?)/').findall(url)
  319. domain = 'Unknown'
  320. if len(tmp) > 0 :
  321. domain = tmp[0].replace('www.', '')
  322. return domain
  323.  
  324.  
  325. def GetMediaInfo(html):
  326. listitem = xbmcgui.ListItem()
  327. match = re.search('og:title" content="(.+?) \((.+?)\)', html)
  328. if match:
  329. print match.group(1) + ' : ' + match.group(2)
  330. listitem.setInfo('video', {'Title': match.group(1), 'Year': int(match.group(2)) } )
  331. return listitem
  332.  
  333. def MainMenu(): #homescreen
  334.  
  335. addon.add_directory({'mode': 'Video'}, {'title': 'TV Video'})
  336. addon.add_directory({'mode': 'Movies'}, {'title': 'Kannada Movies'})
  337. addon.add_directory({'mode': 'Comedies'}, {'title': 'Comedies'})
  338. addon.add_directory({'mode': 'Playlist'}, {'title': 'Playlist'})
  339. addon.add_directory({'mode': 'GetSearchQuery'}, {'title': 'Search'})
  340. addon.add_directory({'mode': 'ResolverSettings'}, {'title': 'Resolver Settings'})
  341. xbmcplugin.endOfDirectory(int(sys.argv[1]))
  342.  
  343.  
  344. def Video():
  345. addon.add_directory({'mode': 'GetTitles', 'url': BASE_URL + '/videos.html', 'startPage': '1', 'numOfPages': '1'}, {'title': 'Kannada TV Videos'})
  346. xbmcplugin.endOfDirectory(int(sys.argv[1]))
  347.  
  348. def Movies():
  349. addon.add_directory({'mode': 'GetTitles', 'url': BASE_URL + '/movies.html', 'startPage': '1', 'numOfPages': '1'}, {'title': 'Kannada Movies'})
  350. xbmcplugin.endOfDirectory(int(sys.argv[1]))
  351.  
  352. def Comedies():
  353. addon.add_directory({'mode': 'GetTitles', 'url': BASE_URL + '/comedies.html', 'startPage': '1', 'numOfPages': '1'}, {'title': 'Kannada Comedy Videos'})
  354. xbmcplugin.endOfDirectory(int(sys.argv[1]))
  355.  
  356. def Playlist():
  357. addon.add_directory({'mode': 'GetTitles', 'url': BASE_URL + '/playlistsnew.html', 'startPage': '1', 'numOfPages': '1'}, {'title': 'Kannada Playlist'})
  358. xbmcplugin.endOfDirectory(int(sys.argv[1]))
  359.  
  360.  
  361. def GetSearchQuery():
  362. last_search = addon.load_data('search')
  363. if not last_search: last_search = ''
  364. keyboard = xbmc.Keyboard()
  365. keyboard.setHeading('Search TV Shows')
  366. keyboard.setDefault(last_search)
  367. keyboard.doModal()
  368. if (keyboard.isConfirmed()):
  369. query = keyboard.getText()
  370. addon.save_data('search',query)
  371. Search(query)
  372. else:
  373. return
  374.  
  375.  
  376. def Search(query):
  377. url = 'http://www.google.com/search?q=site:videogirmit.com ' + query
  378. url = url.replace(' ', '+')
  379. print url
  380. html = net.http_GET(url).content
  381. match = re.compile('<h3 class="r"><a href="(.+?)".+?onmousedown=".+?">(.+?)</a>').findall(html)
  382. for url, title in match:
  383. title = title.replace('<b>...</b>', '').replace('<em>', '').replace('</em>', '')
  384. addon.add_directory({'mode': 'GetLinks', 'url': url}, {'title': title})
  385. xbmcplugin.endOfDirectory(int(sys.argv[1]))
  386.  
  387.  
  388. if mode == 'main':
  389. MainMenu()
  390. elif mode == 'GetTitles':
  391. GetTitles(url, startPage, numOfPages)
  392. elif mode == 'GetLinks':
  393. GetLinks(url)
  394. elif mode == 'GetSearchQuery':
  395. GetSearchQuery()
  396. elif mode == 'Search':
  397. Search(query)
  398. elif mode == 'PlayVideo':
  399. PlayVideo(urlList, listitem)
  400. elif mode == 'ResolverSettings':
  401. urlresolver.display_settings()
  402. elif mode == 'Videos':
  403. Videos()
  404. elif mode == 'Movies':
  405. Movies()
  406. elif mode == 'Comedies':
  407. Comedies()
  408. elif mode == 'Playlist':
  409. Playlist()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement