diff --git a/addons.xml b/addons.xml index 597f899..be78e4b 100644 --- a/addons.xml +++ b/addons.xml @@ -39,6 +39,25 @@ + + + + + + + video + + + alBernameg.com + الحلقات الكاملة من برنامج البرنامج مع باسم يوسف + all + + + + + + + + + + video + + + alBernameg.com + الحلقات الكاملة من برنامج البرنامج مع باسم يوسف + all + + diff --git a/plugin.video.albernameg/changelog.txt b/plugin.video.albernameg/changelog.txt new file mode 100644 index 0000000..959aae7 --- /dev/null +++ b/plugin.video.albernameg/changelog.txt @@ -0,0 +1,2 @@ +[B]Version 1.0.0[/B] +- Initial version \ No newline at end of file diff --git a/plugin.video.albernameg/default.py b/plugin.video.albernameg/default.py new file mode 100644 index 0000000..e76928f --- /dev/null +++ b/plugin.video.albernameg/default.py @@ -0,0 +1,283 @@ +# -*- coding: utf-8 -*- +import xbmc, xbmcgui, xbmcplugin +import urllib2, urllib, cgi, re +import HTMLParser +import xbmcaddon +import traceback +import os +import sys +import json + +addon_id = 'plugin.video.albernameg' +__settings__ = xbmcaddon.Addon(id=addon_id) +__addonname__ = __settings__.getAddonInfo('name') +__icon__ = __settings__.getAddonInfo('icon') +__fanart__ = __settings__.getAddonInfo('fanart') + +selfAddon = xbmcaddon.Addon(id=addon_id) +addonPath = xbmcaddon.Addon().getAddonInfo("path") +addonArt = os.path.join(addonPath, 'resources/images') +communityStreamPath = os.path.join(addonPath, 'resources/community') + +mainurl = 'http://www.albernameg.com/' +apikey = 'AIzaSyBI4me7Tk-7MU5AwLEXUqJXoB24TvUtRcU' + + + + +def addDir(name, url, mode, iconimage, showContext=False, isItFolder=True, pageNumber="", isHTML=True, + addIconForPlaylist=False): + # print name + # name=name.decode('utf-8','replace') + if isHTML: + h = HTMLParser.HTMLParser() + name = h.unescape(name).decode("utf-8") + rname = name.encode("utf-8") + else: + #h = HTMLParser.HTMLParser() + #name =h.unescape(name).decode("utf-8") + rname = name.encode("utf-8") + # url= url.encode("utf-8") + # url= url.encode('ascii','ignore') + #print rname + #print iconimage + u = sys.argv[0] + "?url=" + urllib.quote_plus(url) + "&mode=" + str(mode) + "&name=" + urllib.quote_plus(rname) + if len(pageNumber): + u += "&pagenum=" + pageNumber + if addIconForPlaylist: + u += "&addIconForPlaylist=yes" + ok = True + # print iconimage + liz = xbmcgui.ListItem(rname, iconImage="DefaultFolder.png", thumbnailImage=iconimage) + #liz.setInfo( type="Video", infoLabels={ "Title": name } ) + if showContext == True: + cmd1 = "XBMC.RunPlugin(%s&cdnType=%s)" % (u, "l3") + cmd2 = "XBMC.RunPlugin(%s&cdnType=%s)" % (u, "xdn") + cmd3 = "XBMC.RunPlugin(%s&cdnType=%s)" % (u, "ak") + liz.addContextMenuItems( + [('Play using L3 Cdn', cmd1), ('Play using XDN Cdn', cmd2), ('Play using AK Cdn', cmd3)]) + + ok = xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=u, listitem=liz, isFolder=isItFolder) + return ok + + +def get_params(): + param = [] + paramstring = sys.argv[2] + if len(paramstring) >= 2: + params = sys.argv[2] + cleanedparams = params.replace('?', '') + if (params[len(params) - 1] == '/'): + params = params[0:len(params) - 2] + pairsofparams = cleanedparams.split('&') + param = {} + for i in range(len(pairsofparams)): + splitparams = {} + splitparams = pairsofparams[i].split('=') + if (len(splitparams)) == 2: + param[splitparams[0]] = splitparams[1] + + return param + + + + +def PlayYoutube(url): + uurl = 'plugin://plugin.video.youtube/?action=play_video&videoid=%s' % url + xbmc.executebuiltin("xbmc.PlayMedia(" + uurl + ")") + + +def AddYoutubePlaylists(channelId): + print 'in AddYoutubePlaylists(channelId)' + #if not username.startswith('https://www.googleapis'): + # channelId=getChannelIdByUserName(username)#passusername + #else: + # channelId=username + #channelId=username + playlists, next_page = getYouTubePlayList(channelId); + for playList in playlists: + print playList + addDir(playList[0], playList[1], 3, playList[2], isItFolder=True, isHTML=False) #name,url,mode,icon + if next_page: + addDir('Next', next_page, 2, addonArt + '/next.png', isItFolder=True) #name,url,mode,icon + + +def getYouTubePlayList(channelId): + print 'in getYouTubePlayList(channelId)' + if not channelId.startswith('https://www.googleapis'): + u_url = 'https://www.googleapis.com/youtube/v3/playlists?part=snippet&channelId=%s&maxResults=50&key=%s' % ( + channelId, apikey) + else: + u_url = channelId + doc = getJson(u_url) + ret = [] + for playlist_item in doc['items']: + title = playlist_item["snippet"]["title"] + id = playlist_item["id"] + if not title == 'Private video' and type(title) != type(object) and str(title.encode('utf8', 'ignore')).__contains__('كامل'): + imgurl = '' + try: + imgurl = playlist_item["snippet"]["thumbnails"]["high"]["url"] + except: + pass + if imgurl == '': + try: + imgurl = playlist_item["snippet"]["thumbnails"]["default"]["url"] + except: + pass + ret.append([title, id, imgurl]) + nextItem = None + if 'nextPageToken' in doc: + nextItem = doc["nextPageToken"] + else: + nextItem = None + + nextUrl = None + if nextItem: + if not '&pageToken' in u_url: + nextUrl = u_url + '&pageToken=' + nextItem + else: + nextUrl = u_url.split('&pageToken=')[0] + '&pageToken=' + nextItem + + return ret, nextUrl; + + +def AddYoutubeVideosByPlaylist(playListId, AddPlayListIcon=False, channelid=None): + print 'AddYoutube', url + videos, next_page = getYoutubeVideosByPlaylist(playListId); + if AddPlayListIcon: + addDir('Playists', channelid, 2, addonArt + '/playlist.png', isHTML=False) + + for video in videos: + #print chName + print video + addDir(video[0], video[1], 1, video[2], isItFolder=False, isHTML=False) #name,url,mode,icon + if next_page: + addDir('Next', next_page, 3, addonArt + '/next.png', isItFolder=True) #name,url,mode,icon + + +def getJson(url): + req = urllib2.Request(url) + req.add_header('User-Agent', + 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36') + response = urllib2.urlopen(req) + #link=response.read() + #response.close() + decoded = json.load(response) + return decoded + + +def getChannelIdByUserName(username): + u_url = 'https://www.googleapis.com/youtube/v3/channels?part=id&forUsername=%s&key=%s' % (username, apikey) + channelData = getJson(u_url) + return channelData['items'][0]['id'] + + +def getYoutubeVideosByPlaylist(playlistId): + if playlistId.startswith('https://www'): + #nextpage + u_url = playlistId + else: + u_url = 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=50&playlistId=%s&key=%s' % ( + playlistId, apikey) + videos = getJson(u_url) + return prepareYoutubeVideoItems(videos, u_url) + + +def prepareYoutubeVideoItems(videos, urlUsed): + print 'urlUsed', urlUsed + if 'nextPageToken' in videos: + nextItem = videos["nextPageToken"] + else: + nextItem = None + ret = [] + for playlist_item in videos["items"]: + title = playlist_item["snippet"]["title"] + print 'urlUsed', urlUsed + if not 'search?part=snippet' in urlUsed: + video_id = playlist_item["snippet"]["resourceId"]["videoId"] + else: + video_id = playlist_item["id"]["videoId"] + if not title == 'Private video': + imgurl = '' + try: + imgurl = playlist_item["snippet"]["thumbnails"]["high"]["url"] + except: + pass + if imgurl == '': + try: + imgurl = playlist_item["snippet"]["thumbnails"]["default"]["url"] + except: + pass + #print "%s (%s)" % (title, video_id) + ret.append([title, video_id, imgurl]) + nextUrl = None + if nextItem: + if not '&pageToken' in urlUsed: + nextUrl = urlUsed + '&pageToken=' + nextItem + else: + nextUrl = urlUsed.split('&pageToken=')[0] + '&pageToken=' + nextItem + return ret, nextUrl; + +#print "i am here" +params = get_params() +url = None +name = None +mode = None +linkType = None +pageNumber = None + +try: + url = urllib.unquote_plus(params["url"]) +except: + pass +try: + name = urllib.unquote_plus(params["name"]) +except: + pass +try: + mode = int(params["mode"]) +except: + pass + +try: + pageNumber = params["pagenum"] +except: + pageNumber = ""; + +args = cgi.parse_qs(sys.argv[2][1:]) +cdnType = '' +try: + cdnType = args.get('cdnType', '')[0] +except: + pass + +addIconForPlaylist = "" +try: + addIconForPlaylist = args.get('addIconForPlaylist', '')[0] +except: + pass + +print mode, pageNumber + +try: + if mode == None or url == None or len(url) < 1: + print "Entered Get channel and add playlists" + chId = getChannelIdByUserName('albernameg') + AddYoutubePlaylists(chId) + elif mode == 1: #add communutycats + print "play youtube url is " + url, mode + PlayYoutube(url); + elif mode == 2: #add communutycats + print "play youtube url is " + url, mode + AddYoutubePlaylists(url); + elif mode == 3: #add communutycats + print "play youtube url is " + url, mode + AddYoutubeVideosByPlaylist(url); +except: + print 'somethingwrong' + traceback.print_exc(file=sys.stdout) + + +xbmcplugin.endOfDirectory(int(sys.argv[1])) + diff --git a/plugin.video.albernameg/fanart.jpg b/plugin.video.albernameg/fanart.jpg new file mode 100644 index 0000000..55fa23e Binary files /dev/null and b/plugin.video.albernameg/fanart.jpg differ diff --git a/plugin.video.albernameg/icon.png b/plugin.video.albernameg/icon.png new file mode 100644 index 0000000..12ff11f Binary files /dev/null and b/plugin.video.albernameg/icon.png differ diff --git a/plugin.video.albernameg/resources/images/next.png b/plugin.video.albernameg/resources/images/next.png new file mode 100644 index 0000000..67aafb8 Binary files /dev/null and b/plugin.video.albernameg/resources/images/next.png differ