diff --git a/addon.xml b/addon.xml index fccd4f1..fd2f30d 100644 --- a/addon.xml +++ b/addon.xml @@ -1,5 +1,5 @@ - + diff --git a/changelog.txt b/changelog.txt index de60c5f..25a30cb 100644 --- a/changelog.txt +++ b/changelog.txt @@ -22,3 +22,7 @@ - Fixed site changes (concerts) 2.0.9 - Fixed geoblocking filter +2.1.0 +- Fixed concert livestreams +2.1.1 +- Added support for concert collections diff --git a/default.py b/default.py index 54667de..8603f3c 100644 --- a/default.py +++ b/default.py @@ -20,6 +20,8 @@ forceViewMode = addon.getSetting("forceView") == "true" useThumbAsFanart = addon.getSetting("useThumbAsFanart") == "true" viewMode = str(addon.getSetting("viewIDNew")) +addonDir = xbmc.translatePath(addon.getAddonInfo('path')) +defaultFanart = os.path.join(addonDir ,'fanart.png') icon = xbmc.translatePath('special://home/addons/'+addonID+'/icon.png') baseUrl = "http://www.arte.tv" baseUrlConcert = "http://concert.arte.tv" @@ -39,7 +41,7 @@ def index(): for filter in regionFilters: regionFilter += filter.replace("'","").strip()+"%2C" regionFilter = regionFilter[:-3] - addDir(translation(30001), baseUrl+"/guide/"+language+"/plus7/plus_recentes.json?regions="+regionFilter, "listVideosNew", "") + addDir(translation(30001), baseUrl+"/guide/"+language+"/plus7.json", "listVideosNew", "") addDir(translation(30002), baseUrl+"/guide/"+language+"/plus7/selection.json?regions="+regionFilter, "listVideosNew", "") addDir(translation(30003), baseUrl+"/guide/"+language+"/plus7/plus_vues.json?regions="+regionFilter, "listVideosNew", "") addDir(translation(30004), baseUrl+"/guide/"+language+"/plus7/derniere_chance.json?regions="+regionFilter, "listVideosNew", "") @@ -106,24 +108,27 @@ def listSearchVideos(urlMain): xbmcplugin.setContent(pluginhandle, "episodes") try: content = getUrl(urlMain) - spl = content.split('\n')] + match = re.compile('(.+?)', re.DOTALL).findall(content) for url, title in match: title = cleanTitle(title) url = baseUrl+url.replace("?", ".json?").replace("&", "&")+"®ions="+regionFilter @@ -164,7 +169,7 @@ def search(): def listConcertsMain(): addDir(translation(30002), "", "listConcerts", "") - addDir(translation(30003), baseUrlConcert+"/"+language+"/videos/all?sort=mostviewed", "listConcerts", "") + addDir("Collections", "", "listCollections", "") addDir(translation(30011), baseUrlConcert+"/"+language+"/videos/all", "listConcerts", "") addDir(translation(30013), baseUrlConcert+"/"+language+"/videos/rockpop", "listConcerts", "") if language=="de": @@ -199,7 +204,10 @@ def listConcerts(url=""): url = baseUrlConcert+match[0] match = re.compile('src="(.+?)"', re.DOTALL).findall(entry) thumb = match[0].replace("/alw_rectangle_376/","/alw_rectangle_690/").replace("/alw_highlight_480/","/alw_rectangle_690/") - addLink(title, url, 'playVideoNew', thumb, "") + if "node-eventp" in entry: + addDir(title, url, "listConcerts", thumb) + elif "node-videop" in entry: + addLink(title, url, 'playVideoNew', thumb, "") match = re.compile('
  • .+?href="(.+?)"', re.DOTALL).findall(content) if match: addDir(translation(30010), baseUrlConcert+match[0], "listConcerts", "") @@ -208,6 +216,29 @@ def listConcerts(url=""): xbmc.executebuiltin('Container.SetViewMode('+viewMode+')') +def listCollections(): + content = getUrl("http://concert.arte.tv/"+language+"/collections.xml") + spl = content.split('') + for i in range(1, len(spl), 1): + entry = spl[i] + match = re.compile('(.+?)', re.DOTALL).findall(entry) + title = cleanTitle(match[0]) + match = re.compile('field-name-eventp-videos-count.*?>(.+?)<', re.DOTALL).findall(entry) + if match: + count = match[0].strip() + if language=="de": + count = count.replace("vidéos","Videos") + title += " ("+count+")" + match = re.compile('(.+?)', re.DOTALL).findall(entry) + url = match[0] + match = re.compile('data-src="(.+?)"', re.DOTALL).findall(entry) + thumb = match[0].replace("/alw_rectangle_376/","/alw_rectangle_690/").replace("/alw_highlight_480/","/alw_rectangle_690/") + addDir(title, url, "listConcerts", thumb) + xbmcplugin.endOfDirectory(pluginhandle) + if forceViewMode: + xbmc.executebuiltin('Container.SetViewMode('+viewMode+')') + + def playVideoNew(url): listitem = xbmcgui.ListItem(path=getStreamUrlNew(url)) xbmcplugin.setResolvedUrl(pluginhandle, True, listitem) @@ -215,16 +246,19 @@ def playVideoNew(url): def getStreamUrlNew(url): content = getUrl(url) - match = re.compile('arte_vp_url="(.+?)"', re.DOTALL).findall(content) + match = re.compile('arte_vp_url=[\'"](.+?)[\'"]', re.DOTALL).findall(content) if "concert.arte.tv" in url: url = match[0] content = getUrl(url) match1 = re.compile('"HTTP_SQ_1":.+?"url":"(.+?)"', re.DOTALL).findall(content) match2 = re.compile('"HTTP_EQ_1":.+?"url":"(.+?)"', re.DOTALL).findall(content) + match3 = re.compile('"RMTP_HQ":.*?"streamer":"(.+?)","url":"(.+?)"', re.DOTALL).findall(content) if match1 and maxVideoQuality == "720p": return match1[0].replace("\\","") elif match2: return match2[0].replace("\\","") + elif match3: + return match3[0][0].replace("\\","")+match3[0][1].replace("\\","")+" swfUrl=http://www.arte.tv/flash/mediaplayer/mediaplayer.swf live=1 swfVfy=1" elif streamingType=="HTTP": url = match[0].replace("/player/","/") content = getUrl(url) @@ -306,6 +340,8 @@ def addLink(name, url, mode, iconimage, desc="", duration=""): liz.setProperty('IsPlayable', 'true') if useThumbAsFanart and iconimage!=icon: liz.setProperty("fanart_image", iconimage) + else: + liz.setProperty("fanart_image", defaultFanart) liz.addContextMenuItems([(translation(30020), 'RunPlugin(plugin://'+addonID+'/?mode=queueVideo&url='+urllib.quote_plus(u)+'&name='+urllib.quote_plus(name)+')',)]) ok = xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=u, listitem=liz) return ok @@ -316,6 +352,10 @@ def addDir(name, url, mode, iconimage, regionFilter=""): ok = True liz = xbmcgui.ListItem(name, iconImage=icon, thumbnailImage=iconimage) liz.setInfo(type="Video", infoLabels={"Title": name}) + if useThumbAsFanart and iconimage and iconimage!=icon: + liz.setProperty("fanart_image", iconimage) + else: + liz.setProperty("fanart_image", defaultFanart) ok = xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=u, listitem=liz, isFolder=True) return ok @@ -341,6 +381,8 @@ def addDir(name, url, mode, iconimage, regionFilter=""): playLiveStream() elif mode == 'listConcerts': listConcerts(url) +elif mode == 'listCollections': + listCollections() elif mode == 'listConcertsMain': listConcertsMain() elif mode == 'search':