Release [Module] youtube-dl - multi-site playable URL resolver
#58
I am trying to make my first kodi addon using an example addon on Github (https://github.com/romanvm/plugin.video.example …) .. Its pretty basic stuff & I have my own addon working with files hosted on my own server but I cannot figure out how to add youtube videos. I guessing I need to import youtube-dl and have added this to my addon.xml but cannot figure out how to implement the second part of the code into my main.py

How do I add the first code below to the second ?
Code:
import YDStreamExtractor
YDStreamExtractor.disableDASHVideo(True) #Kodi (XBMC) only plays the video for DASH streams, so you don't want these normally. Of course these are the only 1080p streams on YouTube

url = "http://www.youtube.com/watch?v=_yVv9dx88x0" #a youtube ID will work as well and of course you could pass the url of another site
vid = YDStreamExtractor.getVideoInfo(url,quality=1) #quality is 0=SD, 1=720p, 2=1080p and is a maximum
stream_url = vid.streamURL() #This is what Kodi (XBMC) will play

Code:
# -*- coding: utf-8 -*-
# Module: default
# Author: Roman V. M.
# Created on: 28.11.2014
# License: GPL v.3 https://www.gnu.org/copyleft/gpl.html

import sys
from urlparse import parse_qsl
import xbmcgui
import xbmcplugin

# Get the plugin url in plugin:// notation.
__url__ = sys.argv[0]
# Get the plugin handle as an integer number.
__handle__ = int(sys.argv[1])

# Free sample videos are provided by www.vidsplay.com
# Here we use a fixed set of properties simply for demonstrating purposes
# In a "real life" plugin you will need to get info and links to video files/streams
# from some web-site or online service.
VIDEOS = {'Test Video': [{'name': 'Crab',
                       'thumb': 'http://www.vidsplay.com/vids/crab.jpg',
                       'video': 'https://www.youtube.com/watch?v=vrqJ89M7hxg',
                       'genre': 'Kodi'},
                    
                     ]}


def get_categories():
    """
    Get the list of video categories.
    Here you can insert some parsing code that retrieves
    the list of video categories (e.g. 'Movies', 'TV-shows', 'Documentaries' etc.)
    from some site or server.
    :return: list
    """
    return VIDEOS.keys()


def get_videos(category):
    """
    Get the list of videofiles/streams.
    Here you can insert some parsing code that retrieves
    the list of videostreams in a given category from some site or server.
    :param category: str
    :return: list
    """
    return VIDEOS[category]


def list_categories():
    """
    Create the list of video categories in the Kodi interface.
    :return: None
    """
    # Get video categories
    categories = get_categories()
    # Create a list for our items.
    listing = []
    # Iterate through categories
    for category in categories:
        # Create a list item with a text label and a thumbnail image.
        list_item = xbmcgui.ListItem(label=category, thumbnailImage=VIDEOS[category][0]['thumb'])
        # Set a fanart image for the list item.
        # Here we use the same image as the thumbnail for simplicity's sake.
        list_item.setProperty('fanart_image', 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.
        # 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, 'genre': category})
        # Create a URL for the plugin recursive callback.
        # Example: plugin://plugin.video.example/?action=listing&category=Animals
        url = '{0}?action=listing&category={1}'.format(__url__, category)
        # 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)
    # Finish creating a virtual folder.
    xbmcplugin.endOfDirectory(__handle__)


def list_videos(category):
    """
    Create the list of playable videos in the Kodi interface.
    :param category: str
    :return: None
    """
    # Get the list of videos in the category.
    videos = get_videos(category)
    # 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'], thumbnailImage=video['thumb'])
        # Set a fanart image for the list item.
        # Here we use the same image as the thumbnail for simplicity's sake.
        list_item.setProperty('fanart_image', video['thumb'])
        # Set additional info for the list item.
        list_item.setInfo('video', {'title': video['name'], 'genre': video['genre']})
        # 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)
    # Finish creating a virtual folder.
    xbmcplugin.endOfDirectory(__handle__)


def play_video(path):
    """
    Play a video by the provided path.
    :param path: str
    :return: None
    """
    # Create a playable item with a path to play.
    play_item = xbmcgui.ListItem(path=path)
    # Pass the item to the Kodi player.
    xbmcplugin.setResolvedUrl(__handle__, True, listitem=play_item)


def router(paramstring):
    """
    Router function that calls other functions
    depending on the provided paramstring
    :param paramstring:
    :return:
    """
    # Parse a URL-encoded paramstring to the dictionary of
    # {<parameter>: <value>} elements
    params = dict(parse_qsl(paramstring[1:]))
    # Check the parameters passed to the plugin
    if params:
        if params['action'] == 'listing':
            # Display the list of videos in a provided category.
            list_videos(params['category'])
        elif params['action'] == 'play':
            # Play a video from a provided URL.
            play_video(params['video'])
    else:
        # If the plugin is called from Kodi UI without any parameters,
        # display the list of video categories
        list_categories()


if __name__ == '__main__':
    # Call the router function and pass the plugin call parameters to it.
    router(sys.argv[2])
Reply


Messages In This Thread
v14.810.0 - by ruuk - 2014-08-11, 19:45
v14.925.0 - by ruuk - 2014-09-25, 17:49
v14.1026.0 - by ruuk - 2014-10-26, 21:53
v14.1210.0 - by ruuk - 2014-12-10, 23:32
v14.1210.1 - by ruuk - 2014-12-11, 21:17
v15.318.0 - by ruuk - 2015-04-02, 23:01
v15.1123.0 - by ruuk - 2015-11-23, 21:20
v15.1124.0 - by ruuk - 2015-11-24, 21:05
v15.1223.0 - by ruuk - 2015-12-23, 22:27
v16.306.0 - by ruuk - 2016-03-13, 19:05
v16.318.0 - by ruuk - 2016-03-21, 20:31
v16.327.0 - by ruuk - 2016-03-31, 01:12
v16.521.0 - by ruuk - 2016-05-22, 18:15
v16.627.0 - by ruuk - 2016-06-28, 20:38
v16.1026.0 - by ruuk - 2016-10-28, 18:32
v17.310.0 - by ruuk - 2017-03-11, 23:47
v17.518.0 - by ruuk - 2017-05-21, 08:53
v17.518.1 - by ruuk - 2017-05-25, 04:00
v17.709.0 - by ruuk - 2017-07-11, 03:00
v17.1228.0 - by ruuk - 2017-12-28, 22:46
v17.1231.0 - by ruuk - 2018-01-01, 05:46
v18.320.0 - by ruuk - 2018-03-25, 02:07
v18.425.0 - by ruuk - 2018-04-28, 02:53
v14.1217.0 - by ruuk - 2014-12-27, 21:12
RE: [Module] youtube-dl - multi-site playable URL resolver - by Jaxo - 2015-10-31, 18:46
RE: Script Error Message - by ruuk - 2016-04-14, 13:15
RE: v16.1026.0 - by Lunatixz - 2016-10-28, 20:25
L0RE - by L0RE - 2017-12-19, 14:34
Script Error Message - by eondesigns1138 - 2016-04-08, 10:46
Error python dependency 2.25.0 - by Alyy - 2016-05-21, 10:45


Logout Mark Read Team Forum Stats Members Help
[Module] youtube-dl - multi-site playable URL resolver2
This forum uses Lukasz Tkacz MyBB addons.