def getsearchurl(self): try: magneturls = get_storage('magneturls') magneturls[self.name] = 'http://www.btmovi.org' magneturls.sync() return jubturl = 'https://jubt.gq/' rsp = _http('https://jubt.gitlab.io/home/') for match in re.finditer( r"\x3Ctd\x3E\s*\x3Ca\s+href\x3D[\x22\x27](?P<url>.*?)[\x22\x27]", rsp, re.IGNORECASE | re.DOTALL): if url_is_alive(match.group('url')): jubturl = match.group('url') break rsp = _http(jubturl + '/cn/index.html') match = re.search( r"window\x2Eopen\x28(?:\x26\x2334\x3B)?(?P<url>(?:http|https)\x3A[\w\x2E\x2F]*?)(?:\x26\x2334\x3B)?\x2C(?:\x26\x2334\x3B)?(?:(?!window).)*?strong\x3E磁力蜘蛛\s*\x7C.*?\x3C\x2Fdiv\x3E", rsp, re.IGNORECASE | re.DOTALL) if match: magneturls[self.name] = [ match.group('url').strip().rstrip('/') ] else: magneturls[self.name] = 'http://www.btmovi.org' magneturls.sync() except: xbmc.log(msg=format_exc(), level=xbmc.LOGERROR)
def search(self, what, cat='all', sorttype='relevance', page='1'): result = {} result['state'] = False result['list'] = [] result['sorttype'] = sorttype try: pageresult = _http(self.url) match = re.search( r'href\x3D[\x22\x27](?P<baseurl>.*?)[\x22\x27]\s+target', pageresult, re.DOTALL | re.MULTILINE) baseurl = '' if match: baseurl = match.group('baseurl').rstrip('/') if baseurl: if sorttype == 'addtime': sorttype = 'time' elif sorttype == 'size': sorttype = 'size' elif sorttype == 'relevance': sorttype = 'rel' else: sorttype = 'hits' searchurl = '%s/s/%s_%s_%s.html' % ( baseurl, parse.quote(what), str(sorttype), str(int(page))) pageresult = _http(searchurl) #plugin.log.error(pageresult) rmain = r'\x2Fbt\x2F(?P<magnet>[a-z0-9]{40})\x2Ehtml.*?blank[\x22\x27]\x3E(?P<title>.*?)\x3C\x2Fa\x3E.*?创建时间.*?\x3Cb\x3E(?P<createtime>.*?)\x3C\x2Fb\x3E.*?文件大小.*?\x3E(?P<filesize>.*?)\x3C\x2Fb\x3E' reobj = re.compile(rmain, re.IGNORECASE | re.DOTALL) for match in reobj.finditer(pageresult): title = match.group('title').replace('<em>', '').replace( '</em>', '') filesize = match.group('filesize') createtime = match.group('createtime') magnet = r'magnet:?xt=urn:btih:' + match.group('magnet') res_dict = dict() res_dict['name'] = title res_dict['size'] = filesize res_dict['filecount'] = '' res_dict['seeds'] = '' res_dict['leech'] = '' res_dict['link'] = magnet res_dict['date'] = createtime res_dict['desc_link'] = '' res_dict['engine_url'] = self.url result['list'].append(res_dict) if pageresult.find('»') >= 0: result['nextpage'] = True except Exception as ex: xbmc.log(msg=format_exc(), level=xbmc.LOGERROR) return result result['state'] = True return result
def jubt(): jubturl = 'https://jubt.gq/' try: rsp = _http('https://jubt.gitlab.io/home/') for match in re.finditer( r"\x3Ctd\x3E\s*\x3Ca\s+href\x3D[\x22\x27](?P<url>.*?)[\x22\x27]", rsp, re.IGNORECASE | re.DOTALL): if url_is_alive(match.group('url')): jubturl = match.group('url') break return _http(jubturl) except: xbmc.log(msg=format_exc(), level=xbmc.LOGERROR) return ''
def search(self, what, cat='all', sorttype='relevance', page='1'): result = {} result['state'] = False result['list'] = [] try: #searchurl='https://btsow.pw' pageresult = _http(self.url) match = re.search(r'<strong><a\x20href="(.*?)"', pageresult, re.DOTALL | re.MULTILINE) if match: searchurl = match.group(1) searchurl = searchurl + '/search/%s/page/%s' % (parse.quote(what), str(int(page))) pageresult = _http(searchurl) #xbmc.log(msg=pageresult) rmain = r'<div\x20class="row">.*?<a\x20href="(?P<href>.*?)"\x20title="(?P<title>.*?)">.*?Size:(?P<filesize>.*?)\x20/\x20Convert\x20Date:(?P<createtime>.*?)</div>' reobj = re.compile(rmain, re.DOTALL) for match in reobj.finditer(pageresult): title = match.group('title') filesize = match.group('filesize') createtime = match.group('createtime') magnet = match.group('href')[match.group('href').rfind('/') + 1:] magnet = 'magnet:?xt=urn:btih:' + magnet res_dict = dict() res_dict['name'] = title res_dict['size'] = filesize res_dict['seeds'] = '' res_dict['leech'] = '' res_dict['link'] = magnet res_dict['date'] = createtime res_dict['desc_link'] = '' res_dict['engine_url'] = self.url result['list'].append(res_dict) if len(result['list']) > 0: result['nextpage'] = True except: plugin.log.error(format_exc()) return result result['state'] = True return result
def dbtypetop(dbtype='1',start=0): url='https://movie.douban.com/j/chart/top_list?type=%s&interval_id=100:90&action=&start=%s&limit=20'%(dbtype,str(start)) try: rsp = _http(url) #plugin.notify('a') minfo = json.loads(rsp[rsp.index('['):]) menus =[] plugin.log.error(minfo) for m in minfo: #plugin.notify(m) menus.append({'label': '%s[%s]'%(m['title'],m['score']), 'path': plugin.url_for('dbsubject', subject=m['id']), 'thumbnail': m['cover_url'], 'context_menu':[('搜索'+colorize_label(m['title'], color='00FF00'), 'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt',sstr=six.ensure_binary(m['title']),modify='1',otherargs='{}')+')',)], }) if not len(menus)>1: return if len(menus)==20: menus.append({'label': '下一页', 'path': plugin.url_for('dbtypetop',dbtype=dbtype,start=int(start)+20), 'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'nextpage.png') )}) plugin.set_content('movies') setthumbnail['set']=True return menus except: xbmc.log(msg=format_exc(),level=xbmc.LOGERROR) return
def celephotos(cele,page=0): url='https://movie.douban.com/celebrity/%s/photos/?start=%d&sortby=like&size=a&subtype=a'%(cele,int(page)*30) #plugin.log.error(url) rsp = _http(url,referer='https://www.douban.com/link2/') rtxt=r'img\s+src\x3D\x22(?P<imgurl>[^\s]*?)\x22.*?\x22name\x22\x3E(?P<imgname>.*?)\x3C' menus=[] for photo in re.finditer(rtxt, rsp, re.DOTALL): resource_url='' limg=photo.group('imgurl') limg=limg.replace('/m/','/l/') imgname=html_parser.HTMLParser().unescape(photo.group('imgname').strip()) menus.append({'label':imgname, 'path': plugin.url_for('showpic', imageurl=limg), #'path':limg, #'is_playable':True, #'info_type':'video', 'properties':{'mimetype':'image/jpeg'}, 'thumbnail': photo.group('imgurl'), }) m = re.search("\x22count\x22.*?(?P<count>[0-9]+)", rsp, re.DOTALL) if m: count =int( m.group('count')) totalpage=int((count-1)/30) if int(page)<totalpage: menus.append({'label':'下一页','thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'nextpage.png') ), 'path': plugin.url_for('celephotos', cele=cele,page=int(page)+1)}) plugin.set_content('images') setthumbnail['set']=True return menus
def dbclips(subject): rsp = _http('https://movie.douban.com/subject/%s/trailer#trailer' % subject, referer='https://www.douban.com/link2/') rtxt = r'img\s+src\x3D\x22(?P<thumb>[^\s\x22\x3D]*?)\x22.*?\x3Cp\x3E\x3Ca\s+href\x3D\x22.*?trailer\x2F(?P<movid>.*?)\x2F.*?\x3E\s+(?P<movtitle>.*?)\s+\x3C\x2Fa' menus = [] for clip in re.finditer(rtxt, rsp, re.DOTALL): #plugin.log.error(clip.group('thumb')) movtitle = html_parser.HTMLParser().unescape(clip.group('movtitle')) menus.append({ 'label': movtitle, 'path': plugin.url_for('dbplaytrailer', movid=clip.group('movid')), 'thumbnail': clip.group('thumb'), 'is_playable': True, 'info_type': 'video', 'info': { 'title': movtitle } }) #plugin.set_content('movies') comm.setthumbnail = True return menus
def dbtop(page): page = int(page) pc = page * 25 try: rsp = _http('http://movie.douban.com/top250?start={0}'.format(pc)) mstr = r'class="item".*?href="(.*?)".*?alt="(.*?)" src="(.*?)".*?<p class="">\s+(.*?)</p>' mpatt = re.compile(mstr, re.S) mitems = mpatt.findall(rsp) menus = [{'label': '{0}. {1}[{2}]'.format(s+pc+1, i[1], ''.join( i[3].replace(' ', ' ').replace('<br>', ' ').replace( '\n', ' ').split(' '))), 'path': plugin.url_for('dbsubject', subject=i[0][i[0].find('subject')+7:].replace('/','')), 'thumbnail': i[2], 'context_menu':[('搜索'+colorize_label(i[1], color='00FF00'), 'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt',sstr=six.ensure_binary(i[1]),modify='1',otherargs='{}')+')',)], #'thumbnail': i[2].replace('ipst','lpst').replace('img3.douban.com','img4.douban.com'), } for s, i in enumerate(mitems)] if page <9 : menus.append({'label': '下一页', 'path': plugin.url_for('dbtop', page=page+1), 'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'nextpage.png') )}) plugin.set_content('movies') setthumbnail['set']=True return menus except: xbmc.log(msg=format_exc(),level=xbmc.LOGERROR) return
def javmagnet(qbbb='qb',gid='0',uc='0'): menus=[] baseurl=javbusurl['base'] if qbbb=='om': baseurl=javbusurl['om'] #try: rspmagnet=_http('%s/ajax/uncledatoolsbyajax.php?gid=%s&uc=%s&floor=1'%(baseurl,gid,uc),referer=baseurl) #xbmc.log(rspmagnet) leechmagnet = re.compile('onmouseover.*?href="(?P<magnet>magnet.*?)">\s*(?P<title>.*?)\s*</a>.*?href.*?">\s*(?P<filesize>.*?)\s*</a>.*?href.*?">\s*(?P<createdate>.*?)\s*</a>', re.S) #if qbbb=='om': # leechmagnet = re.compile(r'onmouseover.*?\x29">\s*(?P<title>.*?)\s*</td>.*?">\s*(?P<filesize>.*?)\s*</td>.*?">\s*(?P<createdate>.*?)\s*</td>.*?href="(?P<magnet>magnet.*?)">', re.S) for match in leechmagnet.finditer(rspmagnet): magnet=match.group('magnet') title=match.group('title') title = re.sub("<a\x20.*?>", "|", title) filesize=match.group('filesize') createdate=match.group('createdate') filemsg ='大小:'+filesize+' 创建时间:'+createdate listitem=ListItem(label=comm.colorize_label(title, 'bt'), label2=filesize, icon=None, thumbnail=xbmc.translatePath( os.path.join( IMAGES_PATH, 'magnet.jpg') ), path=plugin.url_for('execmagnet', url=six.ensure_binary(magnet),title=six.ensure_binary(title),msg=six.ensure_binary(filemsg))) menus.append(listitem) return menus #except: plugin.notify('自带磁力获取失败') return
def javgernefilter(qbbb='qb'): url=javbusurl[qbbb]+'/genre' try: rsp = _http(url) menus=[] #if qbbb!='om': releech='<h4>(?P<genregroup>.*?)</h4>.*?"row genre-box">(?P<genres>.*?)</div>' leech = re.compile(releech, re.S) genrelist={} genregrouplist=[] for match in leech.finditer(rsp): genrelist[match.group('genregroup')]= match.group('genres') genregrouplist.append(match.group('genregroup')) dialog = xbmcgui.Dialog() sel = dialog.select('类别模式', genregrouplist) if sel == -1: return genres=genrelist[genregrouplist[sel]] #else: # genres=rsp releech = 'href="%s/genre/(?P<genreid>.+?)">(?P<genrename>.+?)</a>'%(javbusurl[qbbb]) leech = re.compile(releech, re.S) for match in leech.finditer(genres): menus.append({'label':match.group('genrename'), 'path':plugin.url_for('javlist', qbbb=qbbb,filtertype='genre',filterkey=match.group('genreid'),page=1), }) return menus except: plugin.notify('类型列表获取失败') xbmc.log(msg=format_exc(),level=xbmc.LOGERROR) return
def javstarlist(qbbb='qb', page=1): filter = '/actresses' pagestr = '' if int(page) > 1: pagestr = '/' + str(page) url = '%s%s%s' % (javbusurl[qbbb], filter, pagestr) try: rsp = _http(url) releech = 'avatar-box.*?href="%s/star/(?P<starid>.*?)">.*?src="(?P<starimg>.*?)".*?<span>(?P<starname>.*?)</span>' % ( javbusurl[qbbb]) # if qbbb=='om': # releech=r'star-frame2.*?href="%s/star/(?P<starid>.*?)".*?src="(?P<starimg>.*?)".*?title="(?P<starname>.*?)"'%(javbusurl[qbbb]) leech = re.compile(releech, re.S) menus = [] for match in leech.finditer(rsp): context_menu_items = [] context_menu_items.append(( '搜索' + colorize_label(match.group('starname'), color='00FF00'), 'Container.update(' + plugin.url_for('searchinit', stypes='pan,bt', sstr=six.ensure_binary(match.group('starname')), modify='1', otherargs='{}') + ')', )) listitem = ListItem( label='优优:%s' % (match.group('starname')), thumbnail=parse.urljoin(javbusurl[qbbb], match.group('starimg')), path=plugin.url_for('javlist', qbbb=qbbb, filtertype='star', filterkey=match.group('starid'), page=1), ) if len(context_menu_items) > 0 and listitem != None: listitem.add_context_menu_items(context_menu_items) menus.append(listitem) strnextpage = str(int(page) + 1) strnextpage = '/' + strnextpage + '">' + strnextpage + '</a>' if rsp.find(strnextpage) >= 0: menus.append({ 'label': '下一页', 'path': plugin.url_for('javstarlist', qbbb=qbbb, page=int(page) + 1), 'thumbnail': xbmc.translatePath(os.path.join(IMAGES_PATH, 'nextpage.png')) }) comm.setthumbnail = True return menus except: notify('女优列表获取失败') xbmc.log(msg=format_exc(), level=xbmc.LOGERROR) return
def search(self, what, cat='all',sorttype='relevance',page='1'): result={} result['state']=False result['list']=[] try: # pageresult = _http(self.url) # match = re.search(r'<strong><a\x20href="(.*?)"', pageresult, re.DOTALL | re.MULTILINE) # baseurl='' # if match: # baseurl = match.group(1).rstrip('/') # if baseurl: magneturls=get_storage('magneturls') baseurl=magneturls[self.name] if sorttype=='addtime': sorttype='create_time' elif sorttype=='size': sorttype='length' else : sorttype='relavance' searchurl='%s/search/%s/?c=&s=%s&p=%s'%(baseurl,parse.quote(what),sorttype,str(int(page))) detailurl=[] pageresult = _http(searchurl) for match in re.finditer(r"title[\x22\x27]\s+href\x3D[\x22\x27]\x2Fwiki\x2F(?P<hashes>.*?)\x2Ehtml[\x22\x27]", pageresult, re.IGNORECASE | re.DOTALL): detailurl.append('%s/api/json_info?hashes=%s'%(baseurl,match.group('hashes'))) q = Queue.Queue() for u in detailurl: t = threading.Thread(target=get_url, args = (q,u)) t.daemon = True t.start() for u in detailurl: try: rsp = q.get(block=True, timeout=4) jsonrsp = json.loads(rsp[rsp.index('{'):]) #xbmcgui.Dialog().notification(heading='bthaha', message='aaa') for res in jsonrsp['result']: res_dict = dict() res_dict['name'] = res['name'] res_dict['size'] = strOfSize(int(res['length'])) res_dict['filecount'] = '' res_dict['seeds'] = '' res_dict['leech'] = '' res_dict['link'] = r'magnet:?xt=urn:btih:'+res['info_hash'] res_dict['date'] =res['create_time'] res_dict['desc_link'] = '' res_dict['engine_url'] = self.url result['list'].append(res_dict) except: xbmc.log(msg=format_exc(),level=xbmc.LOGERROR) break except: xbmc.log(msg=format_exc(),level=xbmc.LOGERROR) return result result['state']=True return result
def dbphotos(subject, pictype='S', page=0): pictypes = {'R': '海报', 'S': '剧照', 'W': '壁纸'} del pictypes[pictype] menus = [] for key in pictypes: menus.append({ 'label': comm.colorize_label(pictypes[key], None, color='32FF94'), 'path': plugin.url_for('dbphotos', subject=subject, pictype=key, page=0), 'thumbnail': xbmc.translatePath(os.path.join(IMAGES_PATH, 'picture.png')) }) url = 'https://movie.douban.com/subject/%s/photos?type=%s&start=%d' % ( subject, pictype, int(page) * 30) #plugin.log.error(url) rsp = _http(url, referer='https://www.douban.com/link2/') rtxt = r'\x3Cli.*?data\x2Did.*?img\s+src\x3D\x22(?P<imgurl>[^\s]*?)\x22.*?\x22name\x22\x3E(?P<imgname>.*?)\x3C' for photo in re.finditer(rtxt, rsp, re.DOTALL): resource_url = '' limg = photo.group('imgurl') limg = limg.replace('/m/', '/l/') imgname = html_parser.HTMLParser().unescape( photo.group('imgname').strip()) menus.append({ 'label': imgname, 'path': plugin.url_for('showpic', imageurl=limg), #'path':limg, #'is_playable':True, #'info_type':'video', 'properties': { 'mimetype': 'image/jpeg' }, 'thumbnail': photo.group('imgurl'), }) m = re.search("\x22count\x22.*?(?P<count>[0-9]+)", rsp, re.DOTALL) if m: count = int(m.group('count')) totalpage = int((count - 1) / 30) if int(page) < totalpage: menus.append({ 'label': '下一页', 'thumbnail': xbmc.translatePath(os.path.join(IMAGES_PATH, 'nextpage.png')), 'path': plugin.url_for('dbphotos', subject=subject, pictype=pictype, page=int(page) + 1) }) #plugin.set_content('images') comm.setthumbnail = True #notify('dbphotos:'+subject) return menus
def dbntop(): try: rsp = _http('http://movie.douban.com/chart') menus=rspmenus(rsp) setthumbnail['set']=True plugin.set_content('movies') return menus except: xbmc.log(msg=format_exc(),level=xbmc.LOGERROR) return
def dbtop(page): page = int(page) pc = page * 25 try: rsp = _http('http://movie.douban.com/top250?start={0}'.format(pc)) mstr = r'class="item".*?href="(.*?)".*?alt="(.*?)" src="(.*?)".*?<p class="">\s+(.*?)</p>' mpatt = re.compile(mstr, re.S) mitems = mpatt.findall(rsp) menus = [] for s, i in enumerate(mitems): searchtitle = i[1].replace('第一季','s01').replace('第二季','s02').replace('第三季','s03').replace('第四季','s04').replace('第五季','s05')\ .replace('第六季','s06').replace('第七季','s07').replace('第八季','s08').replace('第九季','s09').replace('第十季','s10')\ .replace('第十一季','s11').replace('第十二季','s12').replace('第十三季','s13').replace('第十四季','s14').replace('第十五季','s15')\ .replace('第十六季','s16').replace('第十七季','s17').replace('第十八季','s18').replace('第十九季','s19').replace('第二十季','s20') menus.append({ 'label': '{0}. {1}[{2}]'.format( s + pc + 1, i[1], ''.join(i[3].replace(' ', ' ').replace( '<br>', ' ').replace('\n', ' ').split(' '))), 'path': plugin.url_for('dbsubject', subject=i[0][i[0].find('subject') + 7:].replace( '/', '')), 'thumbnail': i[2], 'context_menu': [( '搜索' + colorize_label(searchtitle, color='00FF00'), 'Container.update(' + plugin.url_for('searchinit', stypes='pan,bt', sstr=six.ensure_binary(i[1]), modify='1', otherargs='{}') + ')', )], #'thumbnail': i[2].replace('ipst','lpst').replace('img3.douban.com','img4.douban.com'), }) if page < 9: menus.append({ 'label': '下一页', 'path': plugin.url_for('dbtop', page=page + 1), 'thumbnail': xbmc.translatePath(os.path.join(IMAGES_PATH, 'nextpage.png')) }) #plugin.set_content('movies') comm.setthumbnail = True return menus except: xbmc.log(msg=format_exc(), level=xbmc.LOGERROR) return
def search(self, what, cat='all', sorttype='relevance', page='1'): result = {} result['state'] = False result['list'] = [] result['sorttype'] = sorttype if sorttype == 'addtime': sorttype = '-time-' elif sorttype == 'size': sorttype = '-length-' elif sorttype == 'relevance': sorttype = '-' else: sorttype = '-requests-' try: #searchurl='https://btsow.pw' # pageresult = _http(self.url) # match = re.search(r'<strong><a\x20href="(.*?)"', pageresult, re.DOTALL | re.MULTILINE) # if match: # searchurl = match.group(1) magneturls = get_storage('magneturls') searchurl = magneturls[self.name] searchurl = searchurl + '/search/kw-%s%s%s.html' % ( parse.quote(what), str(sorttype), str(int(page))) pageresult = _http(searchurl) #xbmc.log(msg=pageresult) rmain = r'\x3Ca\s+title\x3D[\x22\x27](?P<title>.*?)[\x22\x27]\s+href\x3D[\x22\x27]\x2Fhash\x2F(?P<magnet>[a-z0-9]{40})\x2Ehtml[\x22\x27].*?文件大小.*?\x3Cb.*?\x3E(?P<filesize>.*?)\x3C\x2Fb\x3E.*?创建时间.*?\x3Cb.*?\x3E(?P<createtime>.*?)\x3C\x2Fb\x3E.*?下载热度.*?\x3Cb.*?\x3E(?P<pop>.*?)\x3C\x2Fb\x3E' reobj = re.compile(rmain, re.DOTALL) for match in reobj.finditer(pageresult): title = match.group('title') filesize = match.group('filesize') createtime = match.group('createtime') magnet = r'magnet:?xt=urn:btih:' + match.group('magnet') res_dict = dict() res_dict['name'] = title res_dict['size'] = filesize res_dict['seeds'] = '' res_dict['leech'] = '' res_dict['link'] = magnet res_dict['date'] = createtime res_dict['desc_link'] = '' res_dict['engine_url'] = self.url result['list'].append(res_dict) if len(result['list']) > 0: result['nextpage'] = True except: xbmc.log(msg=format_exc(), level=xbmc.LOGERROR) return result result['state'] = True return result
def getsearchurl(self): try: magneturls=get_storage('magneturls') pageresult = _http(self.url) match = re.search(r'<strong><a\x20href="(.*?)"', pageresult, re.DOTALL | re.MULTILINE) baseurl='' if match: magneturls[self.name]= match.group(1).rstrip('/') else: magneturls[self.name]= 'https://glz.bthaha.monster' magneturls.sync() except: xbmc.log(msg=format_exc(),level=xbmc.LOGERROR)
def dbplaytrailer(movid): videourl='' try: url='https://movie.douban.com/trailer/'+movid+'/#content' #xbmc.log(url) rsp= _http(url) match = re.search(r'video\s+id.*?source\s+src\x3D[\x27\x22](?P<videourl>.*?)[\x27\x22]', rsp, re.DOTALL | re.MULTILINE) if match: videourl = match.group('videourl') if videourl!='': plugin.set_resolved_url(videourl) except: xbmc.log(msg=format_exc(),level=xbmc.LOGERROR) return
def getsearchurl(self): try: magneturls = get_storage('magneturls') pageresult = _http(self.url) match = re.search( r'window\x2elocation\x2ehref\x3D[\x22\x27](.*?)[\x22\x27]', pageresult, re.DOTALL | re.MULTILINE) if match: magneturls[self.name] = match.group(1).rstrip('/') else: magneturls[self.name] = 'https://xccl.vip' magneturls.sync() except: xbmc.log(msg=format_exc(), level=xbmc.LOGERROR)
def search(self, what, cat='all',sorttype='popular',page='1'): result={} result['state']=False result['list']=[] result['sorttype']=sorttype if sorttype=='addtime': sorttype='age' elif sorttype=='size': sorttype='size' elif sorttype=='files': sorttype='files' else : sorttype='se' searchurl='%s/search/%s/%s/desc/%s/'%(self.url,parse.quote(what),str(sorttype),str(int(page))) #plugin.notify(searchurl) try: pageresult = _http(searchurl) #plugin.log.error(pageresult) rmain=r'a\s+href\x3D[\x22\x27](?P<magnet>magnet.*?)[\x22\x27].*?Direct\s+Download.*?title\x3D[\x22\x27](?P<title>.*?)[\x22\x27].*?\x3Ctd\x3E(?P<createtime>.*?)\x3C\x2Ftd\x3E.*?\x3Ctd\x3E(?P<filecount>.*?)\x3C\x2Ftd\x3E.*?\x3Ctd\x3E(?P<filesize>.*?)\x3C\x2Ftd\x3E' reobj = re.compile(rmain, re.IGNORECASE | re.DOTALL) for match in reobj.finditer(pageresult): title=match.group('title') filesize=match.group('filesize') filecount=match.group('filecount') createtime=match.group('createtime') magnet=match.group('magnet') res_dict = dict() res_dict['name'] = title res_dict['size'] = filesize res_dict['filecount'] = filecount res_dict['seeds'] = '' res_dict['leech'] = '' res_dict['link'] = magnet res_dict['date'] =createtime res_dict['desc_link'] = '' res_dict['engine_url'] = self.url plugin.log.error(title) result['list'].append(res_dict) if pageresult.find('.././%s/">Next Page'%(str(int(page)+1)))>=0: result['nextpage']=True except Exception as ex: plugin.log.error(name+' 失败'+str(ex)) return result result['state']=True return result
def search(self, what, cat='all', sorttype='relevance', page='1'): result = {} result['state'] = False result['list'] = [] result['sorttype'] = sorttype if sorttype == 'addtime': sorttype = 'A' elif sorttype == 'size': sorttype = 'S' elif sorttype == 'relevance': sorttype = 'N' else: sorttype = '' searchurl = '%s/search%s?f=%s&p=%s' % ( self.url, str(sorttype), parse.quote(what), str(int(page) - 1)) #plugin.notify(searchurl) try: pageresult = _http(searchurl) #plugin.log.error(pageresult) rmain = r'href\x3D\x2F(?P<magnet>[0-9a-f]{40})\x3E(?P<title>.*?)\x3C\x2Fa\x3E.*?span\s+title.*?\x3E(?P<createtime>.*?)\x3C\x2F.*?\x3Cspan\x3E(?P<filesize>.*?)\x3C\x2F' reobj = re.compile(rmain, re.IGNORECASE | re.DOTALL) for match in reobj.finditer(pageresult): title = match.group('title') filesize = match.group('filesize') createtime = match.group('createtime') magnet = r'magnet:?xt=urn:btih:' + match.group('magnet') res_dict = dict() res_dict['name'] = title res_dict['size'] = filesize res_dict['filecount'] = '' res_dict['seeds'] = '' res_dict['leech'] = '' res_dict['link'] = magnet res_dict['date'] = createtime res_dict['desc_link'] = '' res_dict['engine_url'] = self.url result['list'].append(res_dict) if pageresult.find('>»</a>') >= 0: result['nextpage'] = True except Exception as ex: plugin.log.error(format_exc()) return result result['state'] = True return result
def search(self, what, cat='all', sorttype='relevance', page='1'): result = {} result['state'] = False result['list'] = [] result['sorttype'] = sorttype if sorttype == 'addtime': sorttype = '2' elif sorttype == 'size': sorttype = '3' elif sorttype == 'files': sorttype = '4' else: sorttype = '0' searchurl = self.url + 'q=%s&p=%s&order=%s' % ( parse.quote(what), str(int(page) - 1), str(sorttype)) try: plugin.log.error(searchurl) pageresult = _http(searchurl, referer=searchurl) plugin.log.error(pageresult) rmain = r'torrent_name.*?href.*?\x3E(?P<title>.*?)\x3C\x2Fa\x3E.*?torrent_files.*?\x3E(?P<filecount>.*?)\x3C\x2Fspan\x3E.*?torrent_size.*?\x3e(?P<size>.*?)\x3C\x2Fspan\x3E.*?torrent_age.*?\s*found\s*(?P<date>.*?)\x3C\x2Fspan\x3E.*?torrent_magnet.*?href\x3D\x22(?P<link>.*?)\x22' reobj = re.compile(rmain, re.DOTALL) for match in reobj.finditer(pageresult): title = match.group('title') title = re.sub(r'\x3cb.*?\x3e(.*?)\x3c\x2Fb\x3E', r'\1', title, re.IGNORECASE | re.DOTALL) title = title.replace('<b>', '').replace('</b>', '') #plugin.notify(title) res_dict = dict() res_dict['name'] = title res_dict['size'] = match.group('size') res_dict['filecount'] = match.group('filecount') res_dict['seeds'] = '' res_dict['leech'] = '' res_dict['link'] = match.group('link') res_dict['date'] = match.group('date') res_dict['desc_link'] = '' res_dict['engine_url'] = self.url result['list'].append(res_dict) if pageresult.find('Next →</a>') >= 0: result['nextpage'] = True except: plugin.log.error(format_exc()) return result result['state'] = True return result
def dbsearch(sstr, page=0): if not sstr or sstr=='0': sstr = keyboard() if not sstr or sstr=='0': return try: sstr=re.sub(r'\s+','',sstr) url = 'https://www.douban.com/j/search?q=%s&start=%s&cat=1002' % (sstr, str(int(page)*20)) rsp = _http(url) minfo = json.loads(rsp[rsp.index('{'):]) menus =[] if 'items' in minfo: for item in minfo['items']: rtxt =r'subject%2F(.*?)%2F.*?<img\s+src="(.*?)">.*?}\s*\x29\s*"\s*>(.*?)\s*</a>.*?rating-info">(.*?)</div>' patt = re.compile(rtxt, re.S) m = patt.search(item) if m: rat='-' ratm = re.search(r'rating_nums">(.*?)</span>', m.group(4), re.DOTALL | re.IGNORECASE) if ratm: rat = ratm.group(1) menus.append({'label': '%s[%s]'%(m.group(3),rat), 'path': plugin.url_for('dbsubject', subject=m.group(1)), 'thumbnail': m.group(2), 'context_menu':[('搜索'+colorize_label(m.group(3), color='00FF00'), 'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt',sstr=six.ensure_binary(m.group(2)),modify='1',otherargs='{}')+')',)], }) else: plugin.log.error(item) except: xbmc.log(msg=format_exc(),level=xbmc.LOGERROR) return #try: if 'more' in minfo: if minfo['more']: menus.append({ 'label': '下一页', 'path': plugin.url_for('dbsearch', sstr=six.ensure_binary(sstr), page=str(int(page)+1)), 'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'nextpage.png') ), }) #except: pass setthumbnail['set']=True return menus
def dbsubject(subject): menus=[] try: rsp = _http('https://movie.douban.com/subject/'+subject+'/',referer='https://www.douban.com/link2/') #plugin.log.error(rsp) year=title=title2=thumb=summary='' m = re.search(r"title\x3E\s*(?P<title>.*?)\s*\x3C\x2Ftitle", rsp, re.DOTALL) if m: title = m.group("title") title=title[0:title.index('(')].strip() rtxt = r'dale_movie_subject_top_icon.*?itemreviewed\x22\x3E(?P<title>.*?)\x3C.*?\x22year\x22\x3E(?P<year>.*?)\x3C.*?mainpic.*?img\s+src\x3D\x22(?P<thumb>.*?)\x22' m = re.search(rtxt, rsp, re.DOTALL) if m: year=m.group('year').strip(')(') title2=html_parser.HTMLParser().unescape(m.group('title')) title2=title2.replace(title,'').strip() thumb=m.group('thumb') rtxt=r'summary.*?\x3E\s*(?P<summary>.*?)\s*\x3C' m = re.search(rtxt, rsp, re.DOTALL) if m: summary=m.group('summary') rtxt=r'div\s+id\x3D\x22info\x22\x3E\s+(?P<info>.*?)\s+\x3C\x2Fdiv' m = re.search(rtxt,rsp, re.DOTALL) genres=[] areas=[] names=[] if m: info=m.group('info') m = re.search(r'类型.*?(?P<strs>\x3Cspan.*?span\x3E\s*)\x3Cbr', info, re.DOTALL) if m: strs = m.group('strs') for m in re.finditer("\x3E(?P<gen>[^\x3E\x3C]+?)\x3C\x2Fspan", strs, re.DOTALL): genres.append(m.group('gen')) m = re.search(r'制片国家.*?span\x3E\s*(?P<strs>.*?)\x3Cbr', info, re.DOTALL) if m: strs = m.group('strs') for area in strs.split('/'): areas.append(area.strip()) m = re.search(r'又名.*?span\x3E\s*(?P<strs>.*?)\x3Cbr', info, re.DOTALL) if m: strs = html_parser.HTMLParser().unescape(m.group('strs')) for othtitle in strs.split('/'): names.append(othtitle.strip()) celes=[] rtxt=r"avatar[^\n]*?background\x2Dimage[^\n]*?url\x28(?P<img>[^\x2C\s]*?)\x29\x22\x3E.*?celebrity\x2F(?P<id>[0-9]+)\x2F.*?name\x22\x3E(?P<name>.*?)\x3C\x2Fa\x3E.*?title\x3D\x22(?P<role>.*?)\x22\x3E" for m in re.finditer(rtxt, rsp, re.DOTALL): celes.append({'id':m.group('id'),'name':m.group('name'),'img':m.group('img'),'role':m.group('role'),}) tags=[] m = re.search("\x22tags-body\x22\x3E.*?\x3C\x2Fdiv\x3E", rsp, re.DOTALL) if m: tagsg = m.group() for m in re.finditer("\x2Ftag\x2F.*?\x3E(?P<tag>.*?)\x3C", tagsg, re.DOTALL): tags.append(m.group('tag')) comm.moviepoint['group']='db' comm.moviepoint['title']=title comm.moviepoint['thumbnail']=thumb menus.append({'label':'[COLOR FFFF2222]简介:[/COLOR]%s'%summary, 'path': plugin.url_for('dbsummary', summary=six.ensure_binary(summary)), 'thumbnail':thumb}) menus.append({'label':comm.colorize_label('预告片',None,color='32FF94') , 'path': plugin.url_for('dbclips', subject=subject), 'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'movies.png') )}) menus.append({'label':comm.colorize_label('剧照',None,color='32FF94') , 'path': plugin.url_for('dbphotos', subject=subject,pictype='S',page=0), 'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'picture.png') )}) strlist=[] strlist.append(title) strlist.append(title+' '+year) if title2!='': strlist.append(title2+' '+year) for aka in names: if aka.find('(')>=0 and aka.find(')')>=0: aka=aka.replace(aka[ aka.find('('):aka.find(')')+1],'') strlist.append(aka+' '+year) #去重 news_strlist = list(set(strlist)) news_strlist.sort(key=strlist.index) for sstr in news_strlist: ''' context_menu_items=[] context_menu_items.append(('搜索'+colorize_label(sstr, color='00FF00'), 'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt',sstr=six.ensure_binary(sstr),modify='1',otherargs='{}')+')',)) listitem=ListItem(label='BT:[COLOR FF00FFFF]%s[/COLOR]' % (six.ensure_text(sstr)), label2=None, icon=None, thumbnail=xbmc.translatePath( os.path.join( IMAGES_PATH, 'magnet.png') ), path=plugin.url_for('btsearchInit', sstr=six.ensure_binary(sstr), modify='0',ext=comm.moviepoint)) if len(context_menu_items)>0 and listitem!=None: listitem.add_context_menu_items(context_menu_items) menus.append(listitem) ''' menus.append(ListItem(label='搜索:[COLOR FF00FFFF]%s[/COLOR]' % (six.ensure_text(sstr)), label2=None, icon=None, thumbnail=xbmc.translatePath( os.path.join( IMAGES_PATH, 'disksearch.png') ), path=plugin.url_for('searchinit',stypes='pan,bt',sstr=six.ensure_binary(sstr),modify='1',otherargs='{}'))) for cast in celes: thumb=cast['img'] cast['name']+' '+cast['role'] menus.append({'label': '[COLOR FFFF66AA]%s[/COLOR]%s' % (cast['name'],cast['role']), 'path': plugin.url_for('dbactor', sstr=six.ensure_binary(cast['id']),sort='time',page=0), 'context_menu':[('搜索'+colorize_label(cast['name'], color='00FF00'), 'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt,db',sstr=six.ensure_binary(cast['name']),modify='1',otherargs='{}')+')',)], 'thumbnail':thumb}) menus.append({'label': '年代:[COLOR FF00AAFF]%s[/COLOR]' % (year),'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'tag.png') ), 'path': plugin.url_for('dbmovie',tags=six.ensure_binary(year),sort='U',page='0',addtag='0',scorerange='0',year_range='0')}) for genre in genres: menus.append({'label': '类型:[COLOR FF00AAFF]%s[/COLOR]' % (genre),'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'tag.png') ), 'path': plugin.url_for('dbmovie',tags=six.ensure_binary(genre),sort='U',page='0',addtag='0',scorerange='0',year_range='0')}) for area in areas: menus.append({'label': '地区:[COLOR FF00AAFF]%s[/COLOR]' % (area),'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'tag.png') ), 'path': plugin.url_for('dbmovie',tags=six.ensure_binary(area),sort='U',page='0',addtag='0',scorerange='0',year_range='0')}) for tag in tags: menus.append({'label': '标签:[COLOR FF00AAFF]%s[/COLOR]' % (tag),'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'tag.png') ), 'path': plugin.url_for('dbmovie',tags=six.ensure_binary(tag),sort='U',page='0',addtag='0',scorerange='0',year_range='0')}) ''' rsp = _http('https://movie.douban.com/subject/'+subject+'/',referer='https://www.douban.com/link2/') for match in re.finditer('[\x22\x27]\x2Ftag\x2F(?P<tag>.*?)[\x22\x27]', rsp, re.DOTALL | re.IGNORECASE): menus.append({'label': '标签:[COLOR FF00AAFF]%s[/COLOR]' % (match.group('tag')), 'path': plugin.url_for('dbmovie',tags=match.group('tag'),sort='U',page='0',addtag='0',scorerange='0',year_range='0'), 'thumbnail':thumb}) ''' return menus except Exception as e: xbmc.log(msg=format_exc(),level=xbmc.LOGERROR) plugin.log.error(str(e)) return
def javdetail(qbbb='qb',movieno='0',id='0',title='0'): menus=[] url='%s/%s'%(javbusurl['base'],movieno) if qbbb=='om': url='%s/%s'%(javbusurl['om'],movieno) try: rsp = _http(url) match = re.search("var\x20gid\x20*=\x20*(?P<gid>.*?);.*?var\x20uc\x20=\x20(?P<uc>.*?);", rsp, re.DOTALL | re.MULTILINE) except: xbmc.log(msg=format_exc(),level=xbmc.LOGERROR) plugin.notify('片片信息获取失败') xbmc.log(msg=format_exc(),level=xbmc.LOGERROR) return if match: gid = match.group('gid') uc = match.group('uc') if qbbb!='om': if uc=='0':qbbb='qb' if uc=='1':qbbb='bb' menus.append({'label': '[COLOR FF00FFFF]自带磁力[/COLOR]', 'path': plugin.url_for('javmagnet', qbbb=qbbb, gid=gid,uc=uc), 'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'magnet.jpg') )}) context_menu_items=[] ''' context_menu_items.append(('搜索'+colorize_label(id, color='00FF00'), 'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt',sstr=six.ensure_binary(id),modify='1',otherargs='{}')+')',)) listitem=ListItem(label='BT:[COLOR FF00FFFF]%s[/COLOR]' % (id), thumbnail=xbmc.translatePath( os.path.join( IMAGES_PATH, 'magnet.jpg') ), path=plugin.url_for('btsearchInit', sstr=id, modify='0'),) if len(context_menu_items)>0 and listitem!=None: listitem.add_context_menu_items(context_menu_items) menus.append(listitem) title=six.ensure_text(title) context_menu_items=[] context_menu_items.append((six.ensure_binary('搜索'+colorize_label(title, color='00FF00')), 'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt',sstr=six.ensure_binary(title),modify='1',otherargs='{}')+')',)) listitem=ListItem(label='BT:[COLOR FF00FFFF]%s[/COLOR]' % (title), thumbnail=xbmc.translatePath( os.path.join( __cwd__, 'magnet.jpg') ), path=plugin.url_for('btsearchInit', sstr=six.ensure_binary(title), modify='0'),) if len(context_menu_items)>0 and listitem!=None: listitem.add_context_menu_items(context_menu_items) menus.append(listitem) ''' menus.append(ListItem(label='搜索:[COLOR FF00FFFF]%s[/COLOR]' % (id), thumbnail=xbmc.translatePath( os.path.join( IMAGES_PATH, 'disksearch.jpg') ), path=plugin.url_for('searchinit',stypes='pan,bt',sstr=six.ensure_binary(id),modify='1',otherargs='{}'),)) menus.append(ListItem(label='搜索:[COLOR FF00FFFF]%s[/COLOR]' % (six.ensure_text(title)), thumbnail=xbmc.translatePath( os.path.join( IMAGES_PATH, 'disksearch.jpg') ), path=plugin.url_for('searchinit',stypes='pan,bt',sstr=six.ensure_binary(title),modify='1',otherargs='{}'),)) releech='"bigImage"\x20href="(?P<mainimg>.*?)"><' leech = re.compile(releech, re.S) movieid='' movieid2='' for match in leech.finditer(rsp): if qbbb=='qb': if movieid=='': matchmovid = re.search(r'video/(?P<movieid>.*?)/', match.group('mainimg'), re.DOTALL | re.MULTILINE) if matchmovid: movieid = matchmovid.group('movieid') if movieid2=='': matchmovid2 = re.search(r'cover/(?P<movid2>.+?)_', match.group('mainimg'), re.DOTALL | re.MULTILINE) if matchmovid2: movieid2 = matchmovid2.group('movid2') menus.append({'label':'封面图', 'path': plugin.url_for('showpic', imageurl=match.group('mainimg')), 'thumbnail':match.group('mainimg'),}) comm.moviepoint['group']='javbus' comm.moviepoint['title']=title comm.moviepoint['thumbnail']=match.group('mainimg') #plugin.notify(movieid+','+movieid2) releech='</span>\x20<a\x20href="%s/(?P<filter_type>[a-z]+?)/(?P<filter_key>[0-9a-z]+?)">(?P<filter_name>.*?)</a>'%(javbusurl[qbbb]) leech = re.compile(releech, re.S) for match in leech.finditer(rsp): filtertype='' filterkey=match.group('filter_key') if filterkey and filterkey!='0': filtername=match.group('filter_name') if match.group('filter_type')=='director': filtertype= match.group('filter_type') filtertypename='导演' if match.group('filter_type')=='studio': filtertype= match.group('filter_type') filtertypename='制作商' #if filtername in ['HEYZO','一本道','カリビアンコム','天然むすめ','キャットウォーク']: if qbbb=='bb' and filtername not in ['熟女倶楽部','メス豚']: movieid='bb,'+filtername+','+movieno if match.group('filter_type')=='label': filtertype= match.group('filter_type') filtertypename='发行商' if match.group('filter_type')=='series': filtertype= match.group('filter_type') filtertypename='系列' if filtertype: menus.append({'label':'%s:%s'%(filtertypename,filtername), 'path':plugin.url_for('javlist', qbbb=qbbb,filtertype=filtertype,filterkey=filterkey,page=1), 'context_menu':[('搜索'+colorize_label(filtername, color='00FF00'), 'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt,jav',sstr=six.ensure_binary(filtername),modify='1',otherargs='{}')+')',)] }) releech='"genre"><a\x20href="%s/(?P<filter_type>[a-z]+?)/(?P<filter_key>[0-9a-z]+?)">(?P<filter_name>.*?)</a>'%(javbusurl[qbbb]) leech = re.compile(releech, re.S) for match in leech.finditer(rsp): filtertype='' filterkey=match.group('filter_key') if filterkey and filterkey!='0': filtername=match.group('filter_name') if match.group('filter_type')=='genre': filtertype= match.group('filter_type') filtertypename='类别' if filtertype: menus.append({'label':'%s:%s'%(filtertypename,filtername), 'path':plugin.url_for('javlist', qbbb=qbbb,filtertype=filtertype,filterkey=filterkey,page=1), 'context_menu':[('搜索'+colorize_label(filtername, color='00FF00'), 'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt,jav',sstr=six.ensure_binary(filtername),modify='1',otherargs='{}')+')',)] }) releech='avatar-box.*?href="%s/star/(?P<starid>.*?)">.*?src="(?P<starimg>.*?)".*?<span>(?P<starname>.*?)</span>'%(javbusurl[qbbb]) if qbbb=='om': releech='href="%s/star/(?P<starid>[0-9a-z]{1,10}?)"\s*?target="_blank"><img\s*?src="(?P<starimg>.*?)".*?title.*?title.*?_blank">(?P<starname>.*?)</a>'%(javbusurl[qbbb]) leech = re.compile(releech, re.S) for match in leech.finditer(rsp): context_menu_items=[] context_menu_items.append(('搜索'+colorize_label(match.group('starname'), color='00FF00'), 'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt,jav',sstr=six.ensure_binary(match.group('starname')),modify='1',otherargs='{}')+')',)) listitem=ListItem(label='优优:%s'%(match.group('starname')), thumbnail=match.group('starimg'), path= plugin.url_for('javlist', qbbb=qbbb,filtertype='star',filterkey=match.group('starid'),page=1),) if len(context_menu_items)>0 and listitem!=None: listitem.add_context_menu_items(context_menu_items) menus.append(listitem) releech='sample-box.*?href="(?P<sampleimg>.*?)">.*?src="(?P<thumbimg>.*?)"' if qbbb=='om': releech='href="(?P<sampleimg>[^"]*?.jpg)"><img\x20src="(?P<thumbimg>[^"]*?thumb.jpg)"' leech = re.compile(releech, re.S) for match in leech.finditer(rsp): if qbbb=='qb': if movieid=='': matchmovid = re.search(r'video/(?P<movieid>.*?)/', match.group('sampleimg'), re.DOTALL | re.MULTILINE) if matchmovid: movieid = matchmovid.group('movieid') menus.append({'label':'样品图', 'path': plugin.url_for('showpic', imageurl=match.group('sampleimg')), 'thumbnail':match.group('thumbimg'),}) #plugin.notify(movieid2) if movieid=='' and qbbb=='qb' and movieid2!='': cururl='https://javzoo.com' tellmeurl='https://tellme.pw/avmoo' try: rsp = _http(tellmeurl) matchcururl = re.search(r'strong\x3E\s*\x3Ca\s+href\x3D\x22(?P<cururl>http[s]*\x3A\x2f\x2f[a-zA-Z\x2E]+)\x22', rsp, re.IGNORECASE | re.DOTALL | re.MULTILINE) if matchcururl: cururl = matchcururl.group('cururl') except: xbmc.log(msg=format_exc(),level=xbmc.LOGERROR) cururl='https://javzoo.com' #url='%s/cn/search/%s'%(cururl,movieid2) url='%s/cn/search/%s'%(cururl,movieno) try: rsp = _http(url) #matchmovid = re.search(r'bigImage.*?video/(?P<movieid>.*?)/', rsp, re.DOTALL | re.MULTILINE) matchmovid = re.search(r'digital\x2Fvideo\x2F(?P<movieid>.*?)\x2F', rsp, re.DOTALL | re.MULTILINE) if matchmovid: movieid = matchmovid.group('movieid') #leech = re.compile(r'sample-box.*?href="(?P<sampleimg>[^"]*?.jpg)".*?src="(?P<thumbimg>[^"]*?.jpg)"', re.S) # for match in leech.finditer(rsp): # menus.append({'label':'样品图', # 'path': plugin.url_for('showpic', imageurl=match.group('sampleimg')), # 'thumbnail':match.group('thumbimg'),}) except: xbmc.log(msg=format_exc(),level=xbmc.LOGERROR) movieid='' if movieid=='' and qbbb=='qb': movieid=id.replace('-','00').lower() if movieid!='': menus.insert(1, {'label':'预告片', 'path': plugin.url_for('freepv', movieid=six.ensure_binary(movieid)), 'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'movies.png') ), 'is_playable':True, 'info_type':'video', 'info':{'title':six.ensure_text(title)} }) setthumbnail['set']=True return menus
def dbsearch(sstr, page=0): if not sstr or sstr == '0': sstr = keyboard() if not sstr or sstr == '0': return try: sstr = re.sub(r'\s+', '', sstr) url = 'https://www.douban.com/j/search?' + parse.urlencode( encode_obj({ 'q': sstr, 'start': int(page) * 20, 'cat': 1002 })) rsp = _http(url) minfo = json.loads(rsp[rsp.index('{'):]) menus = [] if 'items' in minfo: for item in minfo['items']: rtxt = r'subject%2F(.*?)%2F.*?<img\s+src="(.*?)">.*?}\s*\x29\s*"\s*>(.*?)\s*</a>.*?rating-info">(.*?)</div>' patt = re.compile(rtxt, re.S) m = patt.search(item) if m: rat = '-' ratm = re.search(r'rating_nums">(.*?)</span>', m.group(4), re.DOTALL | re.IGNORECASE) if ratm: rat = ratm.group(1) searchtitle = m.group(3).replace('第一季','s01').replace('第二季','s02').replace('第三季','s03').replace('第四季','s04').replace('第五季','s05')\ .replace('第六季','s06').replace('第七季','s07').replace('第八季','s08').replace('第九季','s09').replace('第十季','s10')\ .replace('第十一季','s11').replace('第十二季','s12').replace('第十三季','s13').replace('第十四季','s14').replace('第十五季','s15')\ .replace('第十六季','s16').replace('第十七季','s17').replace('第十八季','s18').replace('第十九季','s19').replace('第二十季','s20') menus.append({ 'label': '%s[[COLOR FFFF3333]%s[/COLOR]]' % (m.group(3), rat), 'path': plugin.url_for('dbsubject', subject=m.group(1)), 'thumbnail': m.group(2), 'context_menu': [( '搜索' + colorize_label(searchtitle, color='00FF00'), 'Container.update(' + plugin.url_for('searchinit', stypes='pan,bt', sstr=six.ensure_binary(m.group(2)), modify='1', otherargs='{}') + ')', )], }) else: plugin.log.error(item) except: xbmc.log(msg=format_exc(), level=xbmc.LOGERROR) return #try: if 'more' in minfo: if minfo['more']: menus.append({ 'label': '下一页', 'path': plugin.url_for('dbsearch', sstr=six.ensure_binary(sstr), page=str(int(page) + 1)), 'thumbnail': xbmc.translatePath(os.path.join(IMAGES_PATH, 'nextpage.png')), }) #except: pass comm.setthumbnail = True return menus
def dbactor(sstr,sort='time',page=0): try: url = 'https://movie.douban.com/celebrity/%s/' % (sstr) rsp = _http(url) celename=celeinfo=celeimg=summary='' m = re.search(r"\x22nbg\x22\s+title\x3D\x22(?P<celename>.*?)\x22\s+href\x3D\x22(?P<celeimg>.*?)\x22", rsp, re.DOTALL) if m: celename = m.group("celename") celeimg= m.group("celeimg") rtxt = r'(?P<celeinfo>\x3Cli\x3E\s+\x3Cspan\x3E性别.+?)\x3C\x2Ful\x3E' m = re.search(rtxt, rsp, re.DOTALL) if m: celeinfo=m.group('celeinfo') celeinfo=re.sub(r'\x3C.*?\x3E','',celeinfo) celeinfo=re.sub(r'\x3A\s+','\x3A',celeinfo, re.DOTALL) celeinfo=celeinfo.replace(' ','') celeinfo=re.sub(r'\s+','\r\n',celeinfo, re.DOTALL) #plugin.log.error(celename) m = re.search(r'影人简介.*?\x22bd\x22\x3E(?P<summary>.*?)\x3C', rsp, re.DOTALL) if m: summary = m.group("summary") m = re.search(r'\x22all\s+hidden\x22\x3E(?P<summary>.*?)\x3C', rsp, re.DOTALL) if m: summary = m.group("summary") menus =[] menus.append({'label':'简介:[COLOR FFFF2222]%s[/COLOR]'%celename, 'path': plugin.url_for('dbsummary', summary=six.ensure_binary(celename+celeinfo+summary)), 'thumbnail':celeimg}) menus.append({'label':comm.colorize_label('影人图片',None,color='32FF94') , 'path': plugin.url_for('celephotos', cele=six.ensure_binary(sstr),page=0), 'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'picture.png') )}) if sort=='time': menus.append({'label': '按[COLOR FFFF3333]评分[/COLOR]排序', 'path': plugin.url_for('dbactor',sstr=six.ensure_binary(sstr),sort='vote',page='0')}) else: menus.append({'label': '按[COLOR FFFF3333]时间[/COLOR]排序', 'path': plugin.url_for('dbactor',sstr=six.ensure_binary(sstr),sort='time',page='0')}) url = 'https://movie.douban.com/celebrity/%s/movies?start=%d&format=pic&sortby=%s&' % (sstr,int(page)*10,sort) rsp = _http(url) rtxt=r'subject\x2F(?P<id>[0-9]+)\x2F.*?img\ssrc\x3D\x22(?P<imgurl>.*?)\x22.*?title\x3D\x22(?P<title>.*?)\x22.*?\x22star\s.*?span\x3E(?P<rate>.*?)\x3C\x2Fdiv' for sub in re.finditer(rtxt, rsp, re.DOTALL): rate = '' mrate=re.search(r'\x3Cspan\x3E(?P<rate>[\x2E0-9]+?)\x3C',sub.group('rate').strip(), re.DOTALL) if mrate: rate=mrate.group('rate') context_menu_items=[] context_menu_items.append(('搜索'+colorize_label(sub.group('title'), color='00FF00'), 'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt,db',sstr=six.ensure_binary(sub.group('title')),modify='1',otherargs='{}')+')',)) listitem=ListItem(label='%s[[COLOR FFFF3333]%s[/COLOR]]'%(sub.group('title'),rate), thumbnail= sub.group('imgurl'), path = plugin.url_for('dbsubject', subject=sub.group('id')),) if len(context_menu_items)>0 and listitem!=None: listitem.add_context_menu_items(context_menu_items) menus.append(listitem) m = re.search("\x22count\x22.*?(?P<count>[0-9]+)", rsp, re.DOTALL) if m: count =int( m.group('count')) totalpage=int((count-1)/30) if int(page)<totalpage: menus.append({'label':'下一页','thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'nextpage.png') ), 'path': plugin.url_for('dbactor',sstr=six.ensure_binary(sstr),sort=sort,page=int(page)+1)}) plugin.set_content('images') setthumbnail['set']=True return menus return menus except Exception as e: plugin.notify(str(e)) xbmc.log(msg=format_exc(),level=xbmc.LOGERROR) return
def freepv(movieid=''): videourl='' subpath=xbmc.translatePath( os.path.join( __cwd__, 'sample.m3u8') ) if movieid[0:3]=='bb,': (bb,studio,movid)=six.ensure_text(movieid).split(',') if studio=='HEYZO': ''' (unuse,movid2)=movid.split('-') videourl=subpath videodata=_http('http://hls.heyzo.com/sample/3000/%s/ts.sample.mp4.m3u8'%(movid2),referer='http://www.heyzo.com/js_v2/vendor/jwplayer/7.12.8/jwplayer.flash.swf') with open(subpath, "wb") as sampleFile: for line in videodata.splitlines(): if line[0:1]=='/': sampleFile.write('http://hls.heyzo.com'+line+os.linesep) else: sampleFile.write(line+os.linesep) sampleFile.close() ''' (unuse,movid2)=movid.split('-') videourl='http://sample.heyzo.com/contents/3000/%s/sample.mp4'%(movid2) elif studio=='一本道': videourl='http://smovie.1pondo.tv/sample/movies/%s/1080p.mp4'%(movid) elif studio=='カリビアンコム': videourl='https://m.caribbeancom.com/samplemovies/%s/1080p.mp4'%(movid) elif studio=='天然むすめ': videourl='http://smovie.10musume.com/sample/movies/%s/1080p.mp4'%(movid) elif studio=='パコパコママ': videourl='http://smovie.pacopacomama.com/sample/movies/%s/1080p.mp4'%(movid) elif studio=='東京熱': videodata=_http('http://www.tokyo-hot.com/product/?q=%s'%(movid)) match = re.search(r'[\x22\x27]\x2Fproduct\x2F(?P<no>[^\s]+?)\x2F[\x22\x27]', videodata, re.DOTALL | re.MULTILINE) if match: movid2 = match.group('no') #plugin.notify(movid2) videodata=_http('http://www.tokyo-hot.com/product/%s/'%(movid2)) match2 = re.search(r'mp4[\x22\x27]\s+src\s*=\s*[\x22\x27](?P<src>.*?mp4)[\x22\x27]', videodata, re.DOTALL | re.MULTILINE) if match2: videourl = match2.group('src') #if studio=='キャットウォーク': else: videourl='http://www.aventertainments.com/newdlsample.aspx?site=ppv&whichone=ppv/mp4/DL%s.mp4|Referer=http://www.aventertainments.com/product_lists.aspx'%(movid) #if not comm.url_is_alive(videourl): # videourl='' else: for mid in [movieid,movieid[0:-5]+movieid[-3:]]: id1c=mid[0:1] id3c=mid[0:3] for stm in ['_dmb_w','_dm_w','_sm_w','_dmb_s','_dm_s','_sm_s']: videourltemp='http://cc3001.dmm.co.jp/litevideo/freepv/%s/%s/%s/%s%s.mp4'%(id1c,id3c,mid,mid,stm) #xbmc.log(videourltemp) if url_is_alive(videourltemp): videourl=videourltemp break if videourl!='': break; if videourl!='': plugin.set_resolved_url(videourl) else: plugin.notify('未找到预告片') return
def dbmovie(tags='',sort='U',page=0,addtag=0,scorerange='',year_range=''): sorttypes=[('近期热门','U'),('标记最多','T'),('评分最高','S'),('最新上映','R')] tags=six.ensure_text(tags) if tags=='0': tags='' if sort=='0': sort='U' if scorerange=='0': scorerange='0,10' curyear=int(time.strftime('%Y',time.localtime(time.time()))) if year_range=='0': year_range='%d,%d'%(1900,curyear) tag='' if int(addtag)==1: tag=dbgettag() taglist=[] if tags: taglist.extend(tags.split(',')) if tag: taglist.append(six.ensure_text(tag)) #plugin.log.error(str(taglist)) #if len(taglist)<1: return; tags='' for t in taglist: tags+=t.strip()+',' tags=tags.strip(' ,') if sort=='set': dialog = xbmcgui.Dialog() sel = dialog.select('排序类型', [q[0] for q in sorttypes]) if sel==-1: return sort=sorttypes[sel][1] sorttype='' for q in sorttypes: if sort==q[1]: sorttype=q[0] break if scorerange=='set': sellow=0 dialog = xbmcgui.Dialog() ranges=['0','1','2','3','4','5','6','7','8','9','10'] sellow = dialog.select('最低评分', ranges[:10]) if sellow==-1: return if sellow>=9: scorerange='9,10' else: selhigh = dialog.select('最高评分', ranges[sellow+1:]) if selhigh==-1: return scorerange='%d,%d'%(sellow,sellow+selhigh+1) if year_range=='set': sellow=0 dialog = xbmcgui.Dialog() ranges=['2010','2005','2000','1995','1990','1980','1970','1960','1900'] for intyear in range(2011,curyear+1): ranges.insert(0, str(intyear)) sellow = dialog.select('年代起', ranges) if sellow==-1: return if sellow==0: year_range='%d,%d'%(curyear,curyear) else: yearlow=ranges[sellow] ranges=ranges[:sellow+1] selhigh = dialog.select('年代止', ranges) if selhigh==-1: return yearhigh=ranges[selhigh] year_range='%s,%s'%(yearlow,yearhigh) #url='https://movie.douban.com/j/search_subjects?type=movie&tag=%s&sort=%s&page_limit=20&page_start=%s'%(tags.replace(' ','%20'),sort,str(page)) url='https://movie.douban.com/j/new_search_subjects?'+parse.urlencode(encode_obj({'tags':tags,'sort':sort,'range':scorerange,'genres':'','start':str(int(page)*20),'year_range':year_range})) try: rsp = _http(url) minfo = json.loads(rsp[rsp.index('{'):]) menus =[] for m in minfo['data']: context_menu_items=[] context_menu_items.append(('搜索'+colorize_label(m['title'], color='00FF00'), 'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt,db',sstr=six.ensure_binary(m['title']),modify='1',otherargs='{}')+')',)) listitem=ListItem(label='%s[[COLOR FFFF3333]%s[/COLOR]]'%(m['title'],m['rate']), thumbnail= m['cover'], path= plugin.url_for('dbsubject', subject=m['id']),) if len(context_menu_items)>0 and listitem!=None: listitem.add_context_menu_items(context_menu_items) menus.append(listitem) if len(menus)<=1: plugin.notify('豆瓣标签:无记录') return tags2='0' if tags: tags2=tags if len(menus)==20: menus.append({'label': '下一(第%d)页'%(int(page)+2), 'path': plugin.url_for('dbmovie',tags=six.ensure_binary(tags2),sort=sort,page=int(page)+1,addtag='0',scorerange=scorerange,year_range=year_range), 'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'nextpage.png') )}) menus.insert(0, {'label': '标签:[COLOR FFFF3333]%s[/COLOR]'%(tags), 'path': plugin.url_for('dbmovie',tags=six.ensure_binary(tags2),sort=sort,page='0',addtag='1',scorerange=scorerange,year_range=year_range)}) menus.insert(0, {'label': '年代:[COLOR FFFF3333]%s[/COLOR]'%(year_range), 'path': plugin.url_for('dbmovie',tags=six.ensure_binary(tags2),sort=sort,page='0',addtag='0',scorerange=scorerange,year_range='set')}) menus.insert(0, {'label': '评分:[COLOR FFFF3333]%s[/COLOR]'%(scorerange), 'path': plugin.url_for('dbmovie',tags=six.ensure_binary(tags2),sort=sort,page='0',addtag='0',scorerange='set',year_range=year_range)}) menus.insert(0, {'label': '排序:[COLOR FFFF3333]%s[/COLOR]'%(sorttype), 'path': plugin.url_for('dbmovie',tags=six.ensure_binary(tags2),sort='set',page='0',addtag='0',scorerange=scorerange,year_range=year_range)}) plugin.set_content('movies') setthumbnail['set']=True return menus except Exception as e: xbmc.log(msg=format_exc(),level=xbmc.LOGERROR) plugin.notify(str(e)) return
def javlist(qbbb='qb',filtertype='0',filterkey='0',page=1): if not 'base' in javbusurl.raw_dict(): getjavbusurl() if not 'existmag' in javbusurl.raw_dict(): javbusurl['existmag']='all' filterkey=filterkey.replace(' ','') filterkey=parse.quote(filterkey) filter='' if filtertype!='0': if filterkey!='0': filter='/%s/%s'%(filtertype,filterkey) else: if filtertype=='search': if not filterkey or filterkey=='0': filterkey = keyboard() if not filterkey or filterkey=='0': return filter='/%s/%s'%(filtertype,filterkey.replace(' ','')) else: filter='/'+filtertype pagestr='' if int(page)>1: if filter: pagestr='/'+str(page) else: pagestr='/page/'+str(page) url='%s%s%s'%(javbusurl[qbbb],filter,pagestr) if filtertype=='search': url=url+'&type=1' #xbmc.log(url) try: menus=[] if javbusurl['existmag']=='all': menus.append({'label':'已显示所有片片', 'path': plugin.url_for('chg_existmag',qbbb=qbbb,filtertype=filtertype,filterkey=filterkey), 'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'movies.png') )}) else: menus.append({'label':'已显示有磁片片', 'path': plugin.url_for('chg_existmag',qbbb=qbbb,filtertype=filtertype,filterkey=filterkey), 'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'magnet.png') )}) rsp = _http(url,cookie='existmag='+javbusurl['existmag']) releech='movie-box.*?href="(?P<detailurl>.*?)".*?src="(?P<imageurl>.*?)".*?title="(?P<title>.*?)".*?<date>(?P<id>.*?)</date>.*?<date>(?P<date>.*?)</date>' # if qbbb=='om': # releech='"item pull-left".*?href="(?P<detailurl>.*?)".*?src="(?P<imageurl>.*?)".*?"_blank">(?P<title>.*?)</a><br>.*?"item-title">(?P<id>.*?)</span>.*?"item-title">(?P<date>.*?)</span>' leech = re.compile(releech, re.S) for match in leech.finditer(rsp): detailurl=match.group('detailurl') movieno=detailurl[detailurl.rfind('/')+1:] context_menu_items=[] context_menu_items.append(('搜索'+colorize_label(match.group('id'), color='00FF00'), 'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt',sstr=match.group('id'),modify='1',otherargs='{}')+')',)) coverimg=match.group('imageurl').replace('thumb','cover').replace('.jpg','_b.jpg') listitem=ListItem(label='[[COLOR FFFFFF00]%s[/COLOR]]%s(%s)'%(match.group('id'), match.group('title'), match.group('date')), thumbnail=match.group('imageurl'), path= plugin.url_for('javdetail',qbbb=qbbb, movieno=movieno,id=match.group('id'), title=six.ensure_binary(match.group('title'))),) listitem.set_property("Fanart_Image", coverimg) #listitem.set_property("Landscape_Image", match.group('imageurl')) #listitem.set_property("Poster_Image", match.group('imageurl')) #listitem.set_property("Banner_Image", match.group('imageurl')) # menus.append({'label':'[[COLOR FFFFFF00]%s[/COLOR]]%s(%s)'%(match.group('id'), match.group('title'), match.group('date')), # 'path': plugin.url_for('javdetail',qbbb=qbbb, movieno=movieno,id=match.group('id'),title=match.group('title')), # 'thumbnail':match.group('imageurl'),}) if len(context_menu_items)>0 and listitem!=None: listitem.add_context_menu_items(context_menu_items) menus.append(listitem) strnextpage=str(int(page)+1) strnextpage='/'+strnextpage+'">'+strnextpage+'</a>' if rsp.find(strnextpage)>=0: menus.append({'label': '下一页', 'path':plugin.url_for('javlist', qbbb=qbbb,filtertype=filtertype,filterkey=filterkey,page=int(page)+1), 'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'nextpage.png') )}) setthumbnail['set']=True plugin.set_content('movies') return menus except Exception as ex: plugin.notify('片片列表获取失败'+str(ex)) xbmc.log(msg=format_exc(),level=xbmc.LOGERROR) return