From e03feaac89ead4dc136f79483f80cad0f72324d6 Mon Sep 17 00:00:00 2001 From: Scott Bahling Date: Sun, 7 Sep 2014 12:17:47 +0200 Subject: [PATCH 1/5] Fix url scraping in getStreamUrlNew() Seems a site update has changed from using double to single quotes which breaks the url scraper. Updated regex to catch both single and double quotes. --- default.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default.py b/default.py index 54667de..473d937 100644 --- a/default.py +++ b/default.py @@ -215,7 +215,7 @@ 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) From 21dcbbde99b976dbff35378683d67040b7d70d7b Mon Sep 17 00:00:00 2001 From: Scott Bahling Date: Fri, 24 Oct 2014 22:40:48 +0200 Subject: [PATCH 2/5] Fix URL for new episodes list. --- default.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default.py b/default.py index 473d937..3bb7689 100644 --- a/default.py +++ b/default.py @@ -39,7 +39,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", "") From 96286d2927c7cf31eba2d0dec543cc1e72edb92b Mon Sep 17 00:00:00 2001 From: Felix Gruber Date: Sat, 20 Sep 2014 09:57:46 +0200 Subject: [PATCH 3/5] changes from version 2.1.1 --- addon.xml | 2 +- changelog.txt | 4 ++++ default.py | 43 +++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 46 insertions(+), 3 deletions(-) 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..d38b43c 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" @@ -164,7 +166,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 +201,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 +213,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) @@ -221,10 +249,13 @@ def getStreamUrlNew(url): 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 +337,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 +349,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 +378,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': From 05ab260f012b77bf2463c6d170f427338f39019e Mon Sep 17 00:00:00 2001 From: Felix Gruber Date: Sat, 1 Nov 2014 19:39:53 +0100 Subject: [PATCH 4/5] Fix URL scraping in listCats(). Due to site changes, the regexps for category URLs didn't match anymore. With the updated regexps listing videos by date, genre or show works again. --- default.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/default.py b/default.py index de00983..c572cd8 100644 --- a/default.py +++ b/default.py @@ -140,9 +140,9 @@ def listSearchVideos(urlMain): def listCats(type, regionFilter): content = getUrl(baseUrl+"/guide/"+language+"/plus7") - content = content[content.find('
      '):] - content = content[:content.find('
    ')] - match = re.compile('(.+?)', re.DOTALL).findall(content) + content = content[content.find('
    '):] + content = content[:content.find('
    \n\n')] + match = re.compile('(.+?)', re.DOTALL).findall(content) for url, title in match: title = cleanTitle(title) url = baseUrl+url.replace("?", ".json?").replace("&", "&")+"®ions="+regionFilter From 0f1fe75fd1994cfe3c09f93cd440f84b2d8ea470 Mon Sep 17 00:00:00 2001 From: Felix Gruber Date: Sat, 1 Nov 2014 23:23:25 +0100 Subject: [PATCH 5/5] Adapt search to site changes --- default.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/default.py b/default.py index c572cd8..8603f3c 100644 --- a/default.py +++ b/default.py @@ -108,24 +108,27 @@ def listSearchVideos(urlMain): xbmcplugin.setContent(pluginhandle, "episodes") try: content = getUrl(urlMain) - spl = content.split('