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 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 btsearch(enginestr, sstr, sorttype): if not sstr or sstr == '0': return max = int(plugin.get_setting('btmaxresult')) max = (max + 1) * 20 items = [] if enginestr != 'all' and sorttype == '-1': engineinfo = nova2.getengineinfo(enginestr) supportsort = engineinfo['support_sort'] if len(supportsort) > 0: sortkeys = { 'relevance': '相关度', 'addtime': '创建时间', 'size': '文件大小', 'files': '文件数量', 'popular': '热度', } dialog = xbmcgui.Dialog() sortselectlist = [] for s in supportsort: sortselectlist.append(sortkeys[s]) sorttype = dialog.select(engineinfo['name'] + '选择排序类型', sortselectlist) if sorttype == -1: return None sorttype = supportsort[int(sorttype)] #plugin.notify(sorttype) result = nova2.search(enginestr, sstr, sorttype, maxresult=max) msg = '共找到%d条磁力链' % (len(result)) plugin.notify(msg) for res_dict in result: title = '[COLOR FF00FFFF]' + res_dict[ 'size'] + '[/COLOR]' + '[COLOR FFCCFFCC]' + res_dict[ 'date'][:10] + '[/COLOR]' + res_dict['name'].encode('UTF-8') filemsg = '大小:' + res_dict['size'].encode( 'UTF-8') + ' 创建时间:' + res_dict['date'].encode('UTF-8') listitem = ListItem(label=comm.colorize_label(title, 'bt'), label2=res_dict['size'], icon=None, thumbnail=None, path=plugin.url_for( 'execmagnet', url=res_dict['link'].encode('UTF-8'), title=title, msg=filemsg)) #listitem.set_info('picture', {'size': anySizeToBytes(res_dict['size'])}) context_menu_items = [] if (list == 'other'): titletype = title items.append(listitem) return items
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 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 dbsubject(subject): menus=[] try: rsp = _http('https://api.douban.com/v2/movie/subject/'+subject+'?apikey=0b2bdeda43b5688921839c8ecb20399b',referer='https://www.douban.com/link2/') #plugin.notify('ok') rsp=rsp[rsp.index('{'):] #plugin.log.error(rsp) minfo = json.loads(rsp[rsp.index('{'):]) year=minfo['year'] comm.moviepoint['group']='db' comm.moviepoint['title']=minfo['title'] comm.moviepoint['thumbnail']=minfo['images']['large'].decode('utf-8') #summary ='' #for s,i in enumerate(re.findall(ur'([^\n]{1,28})', minfo['summary'])): # summary=summary+i+'\r\n' #xbmc.log(plugin.url_for('dbsummary', summary=minfo['summary'].encode('utf-8'))) menus.append({'label':'[COLOR FFFF2222]简介:[/COLOR]%s'%minfo['summary'].encode('utf-8'), 'path': plugin.url_for('dbsummary', summary=minfo['summary'].encode('utf-8')), 'thumbnail':minfo['images']['large'].decode('utf-8')}) clipandphotos['clips']=[] clipandphotos['photos']=[] if minfo.has_key('clips'): clipandphotos['clips'].extend(minfo['clips']) if minfo.has_key('bloopers'): clipandphotos['clips'].extend(minfo['bloopers']) if minfo.has_key('photos'): clipandphotos['photos'].extend(minfo['photos']) menus.append({'label':comm.colorize_label('预告片和图片',None,color='32FF94') , 'path': plugin.url_for('dbtrailer'), 'thumbnail':xbmc.translatePath( os.path.join( __cwd__, 'movies.png') ).decode('utf-8')}) strlist=[] strlist.append(minfo['title']) strlist.append(minfo['title']+' '+year) if minfo.has_key('original_title'): #strlist.append(minfo['original_title']) strlist.append(minfo['original_title']+' '+year) if minfo.has_key('aka'): for aka in minfo['aka']: if aka.find('(')>=0 and aka.find(')')>=0: aka=aka.replace(aka[ aka.find('('):aka.find(')')+1],'') #strlist.append(aka) 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.encode('UTF-8'), color='00FF00'), 'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt',sstr=sstr.encode('UTF-8'),modify='1',otherargs='{}')+')',)) listitem=ListItem(label='BT:[COLOR FF00FFFF]%s[/COLOR]' % (sstr.encode('utf-8')), label2=None, icon=None, thumbnail=xbmc.translatePath( os.path.join( __cwd__, 'magnet.jpg') ).decode('utf-8'), path=plugin.url_for('btsearchInit', sstr=sstr.encode('utf-8'), modify='0',ext=comm.moviepoint)) if len(context_menu_items)>0 and listitem!=None: listitem.add_context_menu_items(context_menu_items,False) menus.append(listitem) if minfo.has_key('casts'): for cast in minfo['casts']: thumb=xbmc.translatePath( os.path.join( __cwd__, 'guest.png') ).decode('utf-8') if cast['avatars']: if cast['avatars']['medium']: thumb=cast['avatars']['medium'] castname=cast['name'].encode('utf-8') menus.append({'label': '演员:[COLOR FFFF66AA]%s[/COLOR]' % (castname), 'path': plugin.url_for('dbactor', sstr=castname, page=0), 'context_menu':[('搜索'+colorize_label(castname.encode('UTF-8'), color='00FF00'), 'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt,db',sstr=castname.encode('UTF-8'),modify='1',otherargs='{}')+')',)], 'thumbnail':thumb}) if minfo.has_key('directors'): for director in minfo['directors']: thumb=xbmc.translatePath( os.path.join( __cwd__, 'guest.png') ).decode('utf-8') if director['avatars']: if director['avatars']['medium']: thumb=director['avatars']['medium'] directorname=director['name'].encode('utf-8') menus.append({'label': '导演:[COLOR FFFFAA66]%s[/COLOR]' % (directorname), 'path': plugin.url_for('dbactor', sstr=directorname, page=0), 'context_menu':[('搜索'+colorize_label(directorname.encode('UTF-8'), color='00FF00'), 'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt,db',sstr=directorname.encode('UTF-8'),modify='1',otherargs='{}')+')',)], 'thumbnail':thumb}) if minfo.has_key('year'): menus.append({'label': '年代:[COLOR FF00AAFF]%s[/COLOR]' % (minfo['year']), 'path': plugin.url_for('dbmovie',tags=minfo['year'],sort='U',page='0',addtag='0',scorerange='0',year_range='0')}) if minfo.has_key('genres'): for genres in minfo['genres']: menus.append({'label': '类型:[COLOR FF00AAFF]%s[/COLOR]' % (str(genres)), 'path': plugin.url_for('dbmovie',tags=str(genres),sort='U',page='0',addtag='0',scorerange='0',year_range='0')}) if minfo.has_key('countries'): for country in minfo['countries']: menus.append({'label': '国家:[COLOR FF00AAFF]%s[/COLOR]' % (str(country)), 'path': plugin.url_for('dbmovie',tags=str(country),sort='U',page='0',addtag='0',scorerange='0',year_range='0')}) if minfo.has_key('tags'): for tag in minfo['tags']: menus.append({'label': '标签:[COLOR FF00AAFF]%s[/COLOR]' % (str(tag)), 'path': plugin.url_for('dbmovie',tags=str(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,e: plugin.log.error(str(e)) return