def showShows(category_url):
"""Display all shows under a sub category
params:
category_url: a sub category is a unique id
"""
showListData = get_show_list(category_url)
if showListData is None:
xbmcplugin.endOfDirectory(thisPlugin)
return
for show_id, (title, thumbnail) in showListData.iteritems():
addDir(title, str(show_id), Mode.SHOW_INFO, thumbnail)
xbmcplugin.addSortMethod(thisPlugin, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
xbmcplugin.endOfDirectory(thisPlugin)
python类SORT_METHOD_LABEL_IGNORE_THE的实例源码
def show_listing(self, list_items, sort=None):
listing = []
for title_item in list_items:
list_item = xbmcgui.ListItem(label=title_item.title)
url = self._url + '?' + urlencode(title_item.url_dictionary)
list_item.setProperty('IsPlayable', str(title_item.is_playable))
if title_item.thumbnail is not None:
list_item.setArt({'thumb': title_item.thumbnail})
list_item.setInfo('video', title_item.video_dictionary)
listing.append((url, list_item, not title_item.is_playable))
xbmcplugin.addDirectoryItems(self._handle, listing, len(listing))
if sort is not None:
kodi_sorts = {sortmethod.ALPHABET: xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE}
kodi_sortmethod = kodi_sorts.get(sort)
xbmcplugin.addSortMethod(self._handle, kodi_sortmethod)
xbmcplugin.endOfDirectory(self._handle)
def router(paramstring):
"""Decides what to do based on script parameters"""
check_settings()
params = dict(parse_qsl(paramstring))
# Nothing to do yet with those
if not params:
# Demo channel list
channels = map_channels(filter_channels(get_tv_channels()))
xbmcplugin.addDirectoryItems(plugin_handle, channels, len(channels))
xbmcplugin.addSortMethod(
plugin_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
xbmcplugin.endOfDirectory(plugin_handle)
elif params['action'] == 'play':
play_channel(params['channel'])
elif params['action'] == 'get_user_id':
get_user_id()
def list_categories():
listing=[]
list_item = xbmcgui.ListItem(label='??', thumbnailImage='')
url='{0}?action=game_list'.format(_url)
is_folder=True
listing.append((url, list_item, is_folder))
list_item = xbmcgui.ListItem(label='Lyingman', thumbnailImage='')
url='{0}?action=lyingman'.format(_url)
is_folder=True
listing.append((url, list_item, is_folder))
xbmcplugin.addDirectoryItems(_handle,listing,len(listing))
#xbmcplugin.addSortMethod(_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
# Finish creating a virtual folder.
xbmcplugin.endOfDirectory(_handle)
def game_list():
f = urllib2.urlopen('http://www.zhanqi.tv/api/static/game.lists/100-1.json?rand={ts}'.format(ts=time.time()))
obj = json.loads(f.read())
listing=[]
for game in obj['data']['games']:
list_item = xbmcgui.ListItem(label=game['name'], thumbnailImage=game['bpic'])
list_item.setProperty('fanart_image', game['bpic'])
url='{0}?action=room_list&game_id={1}'.format(_url, game['id'])
#xbmc.log(url, 1)
is_folder=True
listing.append((url, list_item, is_folder))
xbmcplugin.addDirectoryItems(_handle,listing,len(listing))
#xbmcplugin.addSortMethod(_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
# Finish creating a virtual folder.
xbmcplugin.endOfDirectory(_handle)
def room_list(game_id):
f = urllib2.urlopen('http://www.zhanqi.tv/api/static/game.lives/{game_id}/100-1.json?rand={ts}'.format(game_id=game_id, ts=time.time()))
obj = json.loads(f.read())
listing=[]
for room in obj['data']['rooms']:
list_item = xbmcgui.ListItem(label=room['title'], thumbnailImage=room['bpic'])
list_item.setProperty('fanart_image', room['bpic'])
url='{0}?action=play&room_id={1}'.format(_url, room['id'])
is_folder=False
listing.append((url, list_item, is_folder))
xbmcplugin.addDirectoryItems(_handle, listing, len(listing))
#xbmcplugin.addSortMethod(_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
# Finish creating a virtual folder.
xbmcplugin.endOfDirectory(_handle)
def SelectHost():
for host in HostsList:
if ADDON.getSetting(host[0]) == 'true':
hostName = host[1].replace("https:",'').replace("http:",'').replace("/",'').replace("www.",'')
hostImage = '%s/icons/%s.png' % (ADDON.getSetting("kodiIPTVpath"), host[0])
list_item = xbmcgui.ListItem(label = hostName)
list_item.setArt({'thumb': hostImage,})
list_item.setInfo('video', {'title': hostName, 'genre': hostName})
url = get_url(action='startHost', host=host[0])
myLog(url)
is_folder = True
# Add our item to the Kodi virtual folder listing.
xbmcplugin.addDirectoryItem(ADDON_handle, url, list_item, is_folder)
# Add a sort method for the virtual folder items (alphabetically, ignore articles)
xbmcplugin.addSortMethod(ADDON_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
# Finish creating a virtual folder.
xbmcplugin.endOfDirectory(ADDON_handle)
return
def list_categories(offset):
#f=urllib2.urlopen('http://www.douyutv.com/directory')
#rr=BeautifulSoup(f.read())
rr=BeautifulSoup(requests.get('http://www.douyutv.com/directory',headers=headers).text)
catel=rr.findAll('a',{'class':'thumb'},limit=offset+PAGE_LIMIT+1)
rrr=[(x['href'], x.p.text,x.img['data-original']) for x in catel]
offset=int(offset)
if offset+PAGE_LIMIT<len(rrr):
rrr=rrr[offset:offset+PAGE_LIMIT]
nextpageflag=True
else:
rrr=rrr[offset:]
nextpageflag=False
listing=[]
for classname,textinfo,img in rrr:
list_item=xbmcgui.ListItem(label=textinfo,thumbnailImage=img)
#list_item.setProperty('fanart_image',img)
url=u'{0}?action=listing&category={1}&offset=0'.format(_url,classname)
is_folder=True
listing.append((url,list_item,is_folder))
if nextpageflag==True:
list_item=xbmcgui.ListItem(label=NEXT_PAGE)
url=u'{0}?offset={1}'.format(_url,str(offset+PAGE_LIMIT))
is_folder=True
listing.append((url,list_item,is_folder))
xbmcplugin.addDirectoryItems(_handle,listing,len(listing))
#xbmcplugin.addSortMethod(_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
# Finish creating a virtual folder.
xbmcplugin.endOfDirectory(_handle)
def list_videos(category,offset=0):
#request=urllib2.Request('http://www.douyu.com'+category,headers=headers)
#f=urllib2.urlopen(request)
#f=urllib2.urlopen('http://www.douyu.com'+category)
#r=f.read()
#rr=BeautifulSoup(r)
rr=BeautifulSoup(requests.get('http://www.douyu.com'+category,headers=headers).text)
videol=rr.findAll('a',{'class':'list'},limit=offset+PAGE_LIMIT+1)
listing=[]
#with open('rooml.dat','w') as f:
# f.writelines([str(x) for x in videol])
if offset+PAGE_LIMIT<len(videol):
videol=videol[offset:offset+PAGE_LIMIT]
nextpageflag=True
else:
videol=videol[offset:]
nextpageflag=False
for x in videol:
roomid=x['href'][1:]
img=x.img['data-original']
title=x['title']
nickname=x.find('span',{'class':'nnt'}).text
view=x.find('span',{'class':'view'}).text
liveinfo=u'{0}:{1}:{2}'.format(nickname,title,view)
list_item=xbmcgui.ListItem(label=liveinfo,thumbnailImage=img)
#list_item.setProperty('fanart_image',img)
url='{0}?action=play&video={1}'.format(_url,roomid)
is_folder=False
listing.append((url,list_item,is_folder))
if nextpageflag==True:
list_item=xbmcgui.ListItem(label=NEXT_PAGE)
url='{0}?action=listing&category={1}&offset={2}'.format(_url,category,offset+PAGE_LIMIT)
is_folder=True
listing.append((url,list_item,is_folder))
xbmcplugin.addDirectoryItems(_handle,listing,len(listing))
#xbmcplugin.addSortMethod(_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
# Finish creating a virtual folder.
xbmcplugin.endOfDirectory(_handle)
def list_categories(base_category):
"""
Create the list of the categories in the Kodi interface.
:param base_category: the parent category to require from all categories
:return: None
"""
listing = list_sub_categories(base_category)
# Add our listing to Kodi.
# Large lists and/or slower systems benefit from adding all items at once via addDirectoryItems
# instead of adding one by ove via addDirectoryItem.
xbmcplugin.addDirectoryItems(_handle, listing, len(listing))
# Add a sort method for the virtual folder items (alphabetically, ignore articles)
xbmcplugin.addSortMethod(_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
# Finish creating a virtual folder.
xbmcplugin.endOfDirectory(_handle)
def list_streams(listing, streams, offset_url, item_limit=25):
"""
Create the list of playable streams in the Kodi interface.
:param listing: list for the streams. Can include some fixed elements
:param streams: json of streams to list
:param offset_url: url that opens next page of streams
:param item_limit: maximum number of items per page
:return: None
"""
# Iterate through the streams.
for stream in streams:
list_item = create_list_item_from_stream(stream)
if list_item is None:
continue
# Create a URL for the plugin recursive callback.
# Example: plugin://plugin.video.example/?action=play&video=http://www.vidsplay.com/vids/crab.mp4
url = '{0}?action=play&stream={1}'.format(_url, stream['id'])
# Add the list item to a virtual Kodi folder.
# is_folder = False means that this item won't open any sub-list.
is_folder = False
# Add our item to the listing as a 3-element tuple.
listing.append((url, list_item, is_folder))
if len(listing) >= item_limit:
list_item = xbmcgui.ListItem(label='[COLOR {0}]{1}[/COLOR]'.format(
get_color('menuItemColor'), get_translation(32008)))
listing.append((offset_url, list_item, True))
# Add our listing to Kodi.
# Large lists and/or slower systems benefit from adding all items at once via addDirectoryItems
# instead of adding one by ove via addDirectoryItem.
xbmcplugin.addDirectoryItems(_handle, listing, len(listing))
# Add a sort method for the virtual folder items (alphabetically, ignore articles)
# xbmcplugin.addSortMethod(_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
# Finish creating a virtual folder.
xbmcplugin.endOfDirectory(_handle)
xbmcplugin.setContent(_handle, 'movies')
def prepareKODIurlsList(urlsList, videoName):
exec(urlsList)
for item in UrlsList:
list_item = xbmcgui.ListItem(label = item['name'])
#list_item.setArt({'thumb': VIDEOS[category][0]['thumb'],
# 'icon': VIDEOS[category][0]['thumb'],
# 'fanart': VIDEOS[category][0]['thumb']})
# Set additional info for the list item.
# Here we use a category name for both properties for for simplicity's sake.
list_item.setInfo('video', {'title': videoName}) # http://mirrors.xbmc.org/docs/python-docs/15.x-isengard/xbmcgui.html#ListItem-setInfo
list_item.setProperty('IsPlayable', 'true')
myID = item['id']
myUrl = item['url']
myLevel = ADDON.getSetting("currenLevel")
is_folder = False
url = get_url(action = 'playUrl',
id = myID,
level = myLevel,
urlNeedsResolve=item['urlNeedsResolve'],
url=myUrl,
name=videoName) # Create a URL for a plugin recursive call.
if ADDON.getSetting("PlayerMode") == "2":
list_item.setArt({'thumb': xbmc.translatePath('special://home/addons/plugin.video.IPTVplayer/resources/icons/download.png')})
xbmcplugin.addDirectoryItem(ADDON_handle, url, list_item, is_folder)
myLog('action=playUrl id=%s level=%s' % (myID,myLevel))
# Add a sort method for the virtual folder items (alphabetically, ignore articles)
#xbmcplugin.addSortMethod(ADDON_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
# Finish creating a virtual folder.
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ### MAIN FUNCTION ###
def list_videos(category):
"""
Create the list of playable videos in the Kodi interface.
:param category: str
"""
# Get the list of videos in the category.
videos = get_videos(category)
# Create a list for our items.
listing = []
# create playlists button to link to youtube playlist functionality
listing.append(createButton(action=('channelPlaylists&channel='+category),\
title='Playlists',thumb=(_resdir+'/media/playlist.png'),icon='',fanart=''))
# show related channels button
listing.append(createButton(action=('relatedChannels&value='+category),\
title='Related Channels',thumb=(_basedir+'/icon.png'),icon='',fanart=''))
# Iterate through videos.
for video in videos:
# Create a list item with a text label and a thumbnail image.
list_item = xbmcgui.ListItem(label=video['name'])
# Set additional info for the list item.
list_item.setInfo('video', {'title': video['name'], 'genre': video['genre']})
# Set graphics (thumbnail, fanart, banner, poster, landscape etc.) for the list item.
# Here we use the same image for all items for simplicity's sake.
# In a real-life plugin you need to set each image accordingly.
list_item.setArt({'thumb': video['thumb'], 'icon': video['thumb'], 'fanart': video['thumb']})
# Set 'IsPlayable' property to 'true'.
# This is mandatory for playable items!
list_item.setProperty('IsPlayable', 'true')
# Create a URL for the plugin recursive callback.
# Example: plugin://plugin.video.example/?action=play&video=http://www.vidsplay.com/vids/crab.mp4
url = '{0}?action=play&video={1}'.format(_url, video['video'])
# Add the list item to a virtual Kodi folder.
# is_folder = False means that this item won't open any sub-list.
is_folder = False
# Add our item to the listing as a 3-element tuple.
listing.append((url, list_item, is_folder))
# Add our listing to Kodi.
# Large lists and/or slower systems benefit from adding all items at once via addDirectoryItems
# instead of adding one by ove via addDirectoryItem.
xbmcplugin.addDirectoryItems(_handle, listing, len(listing))
# Add a sort method for the virtual folder items (alphabetically, ignore articles)
#xbmcplugin.addSortMethod(_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
# change the default view to thumbnails
xbmc.executebuiltin('Container.SetViewMode(%d)' % 500)
# Finish creating a virtual folder.
xbmcplugin.endOfDirectory(_handle)
def list_categories():
"""
Create the list of video categories in the Kodi interface.
"""
# Get video categories
categories = get_categories()
# Create a list for our items.
listing = []
# Iterate through categories
for category in categories:
category_name = category['name']
category_url = category['url']
# Create a list item with a text label and a thumbnail image.
list_item = xbmcgui.ListItem(label=category_name, thumbnailImage=THUMBNAIL)
# Set graphics (thumbnail, fanart, banner, poster, landscape etc.) for the list item.
# Here we use the same image for all items for simplicity's sake.
# In a real-life plugin you need to set each image accordingly.
list_item.setArt({'thumb': THUMBNAIL,
'icon': THUMBNAIL,
'fanart': THUMBNAIL})
# Set additional info for the list item.
# Here we use a category name for both properties for for simplicity's sake.
# setInfo allows to set various information for an item.
# For available properties see the following link:
# http://mirrors.xbmc.org/docs/python-docs/15.x-isengard/xbmcgui.html#ListItem-setInfo
list_item.setInfo('video', {'title': category_name, 'genre': category_name})
# Create a URL for the plugin recursive callback.
# Example: plugin://plugin.video.example/?action=listing&category=Animals
url = '{0}?action=list&category_name={1}&category_url={2}'.format(_url, category_name, category_url)
# is_folder = True means that this item opens a sub-list of lower level items.
is_folder = True
# Add our item to the listing as a 3-element tuple.
listing.append((url, list_item, is_folder))
# Add our listing to Kodi.
# Large lists and/or slower systems benefit from adding all items at once via addDirectoryItems
# instead of adding one by ove via addDirectoryItem.
xbmcplugin.addDirectoryItems(_handle, listing, len(listing))
# Add a sort method for the virtual folder items (alphabetically, ignore articles)
#xbmcplugin.addSortMethod(_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
xbmcplugin.addSortMethod(_handle, xbmcplugin.SORT_METHOD_NONE)
# Finish creating a virtual folder.
xbmcplugin.endOfDirectory(_handle)
def list_matches(videos):
"""
Create the list of matches in the Kodi interface.
"""
print("=====list_matches()")
# Create a list for our items.
listing = []
# Iterate through videos.
for video in videos:
# Create a list item with a text label and a thumbnail image.
list_item = xbmcgui.ListItem(label=video['name'])
if video['video'] == None:
# Non-video item: next page
url = video['url']
list_item.setProperty('IsPlayable', 'false')
# Add the list item to a virtual Kodi folder.
is_folder = True
else:
# Set additional info for the list item.
list_item.setInfo('video', {'title': video['name'], 'genre': video['genre']})
# Set graphics (thumbnail, fanart, banner, poster, landscape etc.) for the list item.
# Here we use the same image for all items for simplicity's sake.
# In a real-life plugin you need to set each image accordingly.
list_item.setArt({'thumb': video['thumb'], 'icon': video['thumb'], 'fanart': video['thumb']})
# Create a URL for the plugin recursive callback.
url = u'{0}?action=view&match={1}'.format(_url, video['video'])
# Set 'IsPlayable' property to 'true'.
# This is mandatory for playable items!
list_item.setProperty('IsPlayable', 'true')
# Add the list item to a virtual Kodi folder.
# is_folder = False means that this item won't open any sub-list.
is_folder = False
# Add our item to the listing as a 3-element tuple.
listing.append((url, list_item, is_folder))
# Add our listing to Kodi.
# Large lists and/or slower systems benefit from adding all items at once via addDirectoryItems
# instead of adding one by ove via addDirectoryItem.
xbmcplugin.addDirectoryItems(_handle, listing, len(listing))
# Add a sort method for the virtual folder items (alphabetically, ignore articles)
#xbmcplugin.addSortMethod(_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
xbmcplugin.addSortMethod(_handle, xbmcplugin.SORT_METHOD_NONE)
# Finish creating a virtual folder.
xbmcplugin.endOfDirectory(_handle)
def lyingman():
f = urllib2.urlopen('http://www.zhanqi.tv/topic/lyingman')
html = f.read()
html = html.replace("\n", '')
review = re.compile('<div class="review-area">.*').findall(html)
review = review[0];
li_list = review.split('<li class="js-carousel-item">')
listing=[]
for li in li_list:
title = re.compile('<span class="name">([^"]*)</span>').findall(li)
if len(title) > 0:
title = title[0]
img = re.compile('<img src="([^"]*)"[^>]*>').findall(li)
if len(img) > 0:
img = img[0]
else:
img = ''
link = re.compile('<a href="/videos/([^"]*)"[^>]*>').findall(li)
if len(link) > 0:
link = link[0]
link = link.split('/')
link = link[len(link) - 1]
link = link.split('.')
link = link[0]
during = re.compile('<p><i class="dv iconClock png"></i><span class="dv">([^"]*)</span></p>').findall(li)
if len(during) > 0:
during = during[0]
else:
during = 'unknow'
list_item = xbmcgui.ListItem(label=title + '[' + during + ']', thumbnailImage=img)
list_item.setProperty('fanart_image', img)
url='{0}?action=playvod&video_id={1}'.format(_url, link)
is_folder=False
listing.append((url, list_item, is_folder))
xbmcplugin.addDirectoryItems(_handle, listing, len(listing))
#xbmcplugin.addSortMethod(_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
# Finish creating a virtual folder.
xbmcplugin.endOfDirectory(_handle)