The branch, frodo has been updated
via b8d531f5c7202ecca26dea339351a604254aa971 (commit)
from 25272cbf02529593fe52ac576a8c4e7935e91d26 (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=b8d531f5c7202ecca26dea339351a604254aa971
commit b8d531f5c7202ecca26dea339351a604254aa971
Author: Martijn Kaijser <mcm.kaij...@gmail.com>
Date: Wed Nov 27 09:44:14 2013 +0100
[plugin.video.zapiks] 1.1.1
diff --git a/plugin.video.zapiks/addon.xml b/plugin.video.zapiks/addon.xml
index e1664d3..45390cd 100644
--- a/plugin.video.zapiks/addon.xml
+++ b/plugin.video.zapiks/addon.xml
@@ -1,20 +1,25 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="plugin.video.zapiks"
- name="Zapiks"
- version="1.0.1"
- provider-name="divingmule">
- <requires>
- <import addon="xbmc.python" version="2.0"/>
- <import addon="script.module.beautifulsoup" version="3.0.8"/>
- <import addon="script.common.plugin.cache" version="0.9.1"/>
- </requires>
- <extension point="xbmc.python.pluginsource"
- library="default.py">
- <provides>video</provides>
- </extension>
- <extension point="xbmc.addon.metadata">
- <summary>Videos from zapiks.com</summary>
- <description>Extreme sports videos from the French website
zapiks.com</description>
- <platform>all</platform>
- </extension>
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<addon id="plugin.video.zapiks"
+ name="Zapiks"
+ version="1.1.1"
+ provider-name="divingmule">
+ <requires>
+ <import addon="xbmc.python" version="2.1.0"/>
+ <import addon="script.module.beautifulsoup4" version="4.3.1"/>
+ <import addon="script.module.xmltodict" version="0.7.0"/>
+ <import addon="script.common.plugin.cache" version="2.5.2"/>
+ </requires>
+ <extension point="xbmc.python.pluginsource" library="default.py">
+ <provides>video</provides>
+ </extension>
+ <extension point="xbmc.addon.metadata">
+ <summary>Videos from zapiks.com</summary>
+ <description>Extreme sports videos from zapiks.com</description>
+ <platform>all</platform>
+ <language>en</language>
+ <license>GNU GENERAL PUBLIC LICENSE. Version 2, June 1991</license>
+ <source>https://github.com/divingmule/plugin.video.zapiks</source>
+ <forum>http://forum.xbmc.org/showthread.php?tid=178992</forum>
+ <website>http://www.zapiks.com</website>
+ </extension>
</addon>
\ No newline at end of file
diff --git a/plugin.video.zapiks/changelog.txt
b/plugin.video.zapiks/changelog.txt
index d4b9c4e..3f9fa81 100644
--- a/plugin.video.zapiks/changelog.txt
+++ b/plugin.video.zapiks/changelog.txt
@@ -1,23 +1,32 @@
-Version 1.0.1
-bug fixes
-added new categories
-
-Version 1.0.0
-new for eden-pre
-
-Version 0.0.6
-fix website changed from .fr to .com
-
-Version 0.0.5
-fix for pagenation
-
-Version 0.0.4
-added sorting of videos with addon settings
-cleaned up names a bit
-
-
-Version 0.0.3
-new icon thanks freezy
-
-Version 0.0.2
+Version 1.1.1
+update fanart
+
+Version 1.1.0
+added setting "Enable HD" default is True
+moved video filter setting to a list item
+update partner vidoes, now "Zapiks Pro"
+change python api for gotham compatibility
+
+Version 1.0.1
+bug fixes
+added new categories
+
+Version 1.0.0
+new for eden-pre
+
+Version 0.0.6
+fix website changed from .fr to .com
+
+Version 0.0.5
+fix for pagenation
+
+Version 0.0.4
+added sorting of videos with addon settings
+cleaned up names a bit
+
+
+Version 0.0.3
+new icon thanks freezy
+
+Version 0.0.2
initial
\ No newline at end of file
diff --git a/plugin.video.zapiks/default.py b/plugin.video.zapiks/default.py
index 68dbdbf..e8677b7 100644
--- a/plugin.video.zapiks/default.py
+++ b/plugin.video.zapiks/default.py
@@ -1,173 +1,217 @@
-import urllib
-import urllib2
-import re
-import os
-import xbmcplugin
-import xbmcgui
-import xbmcaddon
-import StorageServer
-from BeautifulSoup import BeautifulSoup
-
-__settings__ = xbmcaddon.Addon(id='plugin.video.zapiks')
-__language__ = __settings__.getLocalizedString
-sort = __settings__.getSetting('sort_method')
-home = __settings__.getAddonInfo('path')
-cache = StorageServer.StorageServer("zapiks", 24)
-base = 'http://www.zapiks.com'
-icon_path = 'http://zapiks-xbmc.googlecode.com/svn/images/'
-fanart = icon_path+'fanart.jpg'
-
-
-def getRequest(url):
- headers = {'User-agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64;
rv:10.0.2) Gecko/20100101 Firefox/10.0.2',
- 'Referer' : base}
- req = urllib2.Request(url,None,headers)
- response = urllib2.urlopen(req)
- data = response.read()
- response.close()
- return data
-
-
-def cache_base():
- data = getRequest(base)
- return(data, 200)
-
-
-def categories():
- soup = BeautifulSoup(cache.cacheFunction(cache_base)[0],
convertEntities=BeautifulSoup.HTML_ENTITIES)
- items = soup('ul', attrs={'id' : "sports_navigation"})[0]('a')
- for i in items:
- href = i['href']
- if not href == '#':
- href = i['href'][:-1]
- if sort == '0':
- href = href+'1'
- if sort == '1':
- href = href+'/popular_1.php'
- if sort == '2':
- href = href+'/alltimebuzzed_1.php'
- if sort == '3':
- href = '/_'+href[1:]+'/premium_1.php'
- title = i.string
- thumb = icon_path+i.string+'.png'
- addDir(title, base+href, 1, thumb)
- addDir(__language__(30000), 'getPartners', 3, icon_path+'partner.png')
-
-
-def getPartners():
- soup = BeautifulSoup(cache.cacheFunction(cache_base)[0],
convertEntities=BeautifulSoup.HTML_ENTITIES)
- partners_items = soup('div', attrs={'id' : "partners"})[0]('a')
- pro_items = soup('div', attrs={'id' : "pro_all"})[0]('a')
- for i in pro_items:
- items = partners_items.append(i)
- for i in partners_items:
- href = i['href']
- title = i['title']
- thumb = i.img['src']
- addDir(title, base+href, 1, thumb)
-
-
-def indexPage(url):
- soup = BeautifulSoup(getRequest(url),
convertEntities=BeautifulSoup.HTML_ENTITIES)
- videos = soup.findAll('div', attrs={'class' : "media_thumbnail
medium"})
- for i in videos:
- try:
- url = i('a')[0]['href']
- name = i('a')[0]['title']
- thumb = i('img')[0]['src']
- addLink(name, base+url, 2, thumb)
- except:
- continue
- try:
- nextPage = soup.find('span', attrs={'class' :
"next"})('a')[1]['href']
- addDir(__language__(30001), base+nextPage, 1, os.path.join(home,
'resources', 'images', 'next.png'))
- except:
- pass
-
-
-def videoLinks(url):
- soup = BeautifulSoup(getRequest(url))
- vid = soup.find('link', attrs={'rel' : "video_src"})['href']
- new_soup =
BeautifulSoup(getRequest('http://www.zapiks.com/view/index.php?file='+vid[-5:]+'&lang=fr'))
- item = xbmcgui.ListItem(path = new_soup.file.string)
- xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, item)
-
-
-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 addLink(name,url,mode,iconimage):
-
u=sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode="+str(mode)+"&name="+urllib.quote_plus(name)
- ok=True
- liz=xbmcgui.ListItem(name, iconImage="DefaultVideo.png",
thumbnailImage=iconimage)
- liz.setInfo( type="Video", infoLabels={ "Title": name } )
- liz.setProperty("IsPlayable","true")
- liz.setProperty("Fanart_Image", fanart)
-
ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=False)
- return ok
-
-
-def addDir(name,url,mode,iconimage):
-
u=sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode="+str(mode)+"&name="+urllib.quote_plus(name)
- ok=True
- liz=xbmcgui.ListItem(name, iconImage="DefaultVideo.png",
thumbnailImage=iconimage)
- liz.setInfo( type="Video", infoLabels={ "Title": name } )
- liz.setProperty("Fanart_Image", fanart)
-
ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=True)
- return ok
-
-
-params=get_params()
-url=None
-name=None
-mode=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
-
-print "Mode: "+str(mode)
-print "URL: "+str(url)
-print "Name: "+str(name)
-
-if mode==None or url==None or len(url)<1:
- print ""
- categories()
-
-elif mode==1:
- print ""
- indexPage(url)
-
-elif mode==2:
- print ""
- videoLinks(url)
-
-elif mode==3:
- print ""
- getPartners()
-
-xbmcplugin.endOfDirectory(int(sys.argv[1]))
\ No newline at end of file
+import urllib
+import urllib2
+from urlparse import urlparse, parse_qs
+from traceback import format_exc
+
+import StorageServer
+import xmltodict
+from bs4 import BeautifulSoup
+
+import xbmcplugin
+import xbmcgui
+import xbmcaddon
+
+addon = xbmcaddon.Addon()
+addon_version = addon.getAddonInfo('version')
+addon_id = addon.getAddonInfo('id')
+cache = StorageServer.StorageServer("zapiks", 24)
+icon = addon.getAddonInfo('icon')
+fanart = addon.getAddonInfo('fanart')
+language = addon.getLocalizedString
+base_url = 'http://www.zapiks.com'
+
+
+def addon_log(string):
+ try:
+ log_message = string.encode('utf-8', 'ignore')
+ except:
+ log_message = 'addonException: addon_log'
+ xbmc.log("[%s-%s]: %s" %(addon_id, addon_version, log_message),
level=xbmc.LOGDEBUG)
+
+
+def make_request(url, post_data=None):
+ addon_log('Request URL: %s' %url)
+ headers = {
+ 'User-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0)
Gecko/20100101 Firefox/24.0',
+ 'Referer': base_url
+ }
+ try:
+ req = urllib2.Request(url, post_data, headers)
+ response = urllib2.urlopen(req)
+ data = response.read()
+ response.close()
+ return data
+ except urllib2.URLError, e:
+ addon_log( 'We failed to open "%s".' % url)
+ if hasattr(e, 'reason'):
+ addon_log('We failed to reach a server.')
+ addon_log('Reason: %s' %e.reason)
+ if hasattr(e, 'code'):
+ addon_log('We failed with error code - %s.' %e.code)
+
+
+def cache_categories():
+ soup = BeautifulSoup(make_request(base_url), 'html.parser')
+ items = soup('ul', attrs={'id' : "sports_navigation"})[0]('a')
+ cats = [{'name': i.string.encode('utf-8'), 'url': i['href']} for i in
items]
+ return cats
+
+
+def cache_pro_categories():
+ label_list = ['marques', 'events', 'prods', 'riders', 'crews', 'media']
+ label_dict = {}
+ index = 30001
+ for i in range(len(label_list)):
+ index += 1
+ label_dict[label_list[i]] = language(index)
+ soup = BeautifulSoup(make_request('http://www.zapiks.com/pro/'),
'html.parser')
+ pro_list = [{'label': label_dict[i.h2['class'][1].split('-')[1]],
+ 'items': [{'title': x.a['title'].encode('utf-8'),
+ 'url': x.a['href'],
+ 'thumb': x.img['src']} for
+ x in i('div')]} for i in soup('div', class_='pro-type-bloc')]
+ return pro_list
+
+
+def display_pro_categories():
+ for i in range(30002, 30008):
+ add_dir(language(i), 'pro_cat', icon, 'get_pro_cat')
+
+
+def display_pro_category(cat_name):
+ cat_list = cache.cacheFunction(cache_pro_categories)
+ items = [i['items'] for i in cat_list if i['label'] == cat_name][0]
+ for i in items:
+ add_dir(i['title'], i['url'], i['thumb'], 'get_category')
+
+
+def display_categories():
+ add_dir(language(30000), None, icon, 'get_partners')
+ items = cache.cacheFunction(cache_categories)
+ for i in items:
+ if i['name'] == 'more sports': continue
+ add_dir(i['name'].title(), i['url'], icon, 'get_category')
+
+
+def display_category(url):
+ if url.endswith('_/'):
+ nav = get_navigation(base_url + url)
+ dir_name = 'Filters - '
+ for i in nav['filters']:
+ dir_name += '%s | ' %i['name']
+ add_dir(dir_name, 'filter', icon, 'select_filter')
+ soup = BeautifulSoup(make_request(base_url + nav['url']),
'html.parser')
+ else:
+ soup = BeautifulSoup(make_request(base_url + url), 'html.parser')
+ if '/pro/' in url:
+ items = soup.find('div', attrs={'id': 'content'})('div',
class_='media_thumbnail')
+ else:
+ items = soup.find('div', class_='col wrapper')('div',
class_='media_thumbnail')
+ for i in items:
+ title = i.a['title'].encode('utf-8')
+ add_dir(title, base_url + i.a['href'], i.img['src'], 'resolve_url')
+
+ try:
+ page_url = soup.find('h4', class_='page_navigator')('a',
class_='next')[0]['href']
+ if page_url and page_url != url:
+ add_dir(language(30001), page_url, icon, 'get_category')
+ except:
+ pass
+
+
+def get_navigation(url):
+ soup = BeautifulSoup(make_request(url), 'html.parser')
+ nav_tags = soup.find('div', attrs={'id': 'content'})('div',
class_='col')[:3]
+ page_url = soup.find('div', attrs={'id': 'central_block'}).a['href']
+ nav = {'url': page_url,
+ 'filters': [{'name': i.a['title'].encode('utf-8').title(),
+ 'url': i.a['href']} for
+ i in nav_tags]}
+ cache.set('navigation', repr(nav))
+ addon_log(repr(nav))
+ return nav
+
+
+def select_filter():
+ nav = eval(cache.get('navigation'))
+ dialog = xbmcgui.Dialog()
+ ret = dialog.select(language(30009), [i['name'] for i in nav['filters']])
+ if ret > -1:
+ return display_category(nav['filters'][ret]['url'])
+
+
+def resolve_url(url, thumb):
+ video_id = thumb.split('/')[-1].split('-')[0]
+ data_url = 'http://www.zapiks.fr/view/index.php'
+ params = {
+ 'file': video_id,
+ 'lang': 'en',
+ 'referer': urllib.quote(url)
+ }
+ data = xmltodict.parse(make_request(data_url, urllib.urlencode(params)))
+ if addon.getSetting('enable_hd') == 'true':
+ try:
+ return data['config']['hd.file']
+ except:
+ addon_log('addonException: hd.file: %s' %format_exc())
+ pass
+ return data['config']['file']
+
+
+def add_dir(name, url, iconimage, mode):
+ params = {'name': name, 'url': url, 'mode': mode, 'thumb': iconimage}
+ url = '%s?%s' %(sys.argv[0], urllib.urlencode(params))
+ listitem = xbmcgui.ListItem(name, iconImage="DefaultFolder.png",
thumbnailImage=iconimage)
+ isfolder = True
+ if mode == 'resolve_url':
+ isfolder = False
+ listitem.setProperty('IsPlayable', 'true')
+ listitem.setProperty("Fanart_Image", fanart)
+ listitem.setInfo(type="Video", infoLabels={'Title': name})
+ xbmcplugin.addDirectoryItem(int(sys.argv[1]), url, listitem, isfolder)
+
+
+def get_params():
+ p = parse_qs(sys.argv[2][1:])
+ for i in p.keys():
+ p[i] = p[i][0]
+ return p
+
+
+params = get_params()
+addon_log(repr(params))
+
+try:
+ mode = params['mode']
+except:
+ mode = None
+
+if mode == None:
+ display_categories()
+ xbmcplugin.endOfDirectory(int(sys.argv[1]))
+
+elif mode == 'get_category':
+ display_category(params['url'])
+ xbmcplugin.endOfDirectory(int(sys.argv[1]))
+
+elif mode == 'resolve_url':
+ success = False
+ resolved_url = resolve_url(params['url'], params['thumb'])
+ if resolved_url:
+ success = True
+ else:
+ resolved_url = ''
+ item = xbmcgui.ListItem(path=resolved_url)
+ xbmcplugin.setResolvedUrl(int(sys.argv[1]), success, item)
+
+elif mode == 'select_filter':
+ select_filter()
+ xbmcplugin.endOfDirectory(int(sys.argv[1]))
+
+elif mode == 'get_partners':
+ display_pro_categories()
+ xbmcplugin.endOfDirectory(int(sys.argv[1]))
+
+elif mode == 'get_pro_cat':
+ display_pro_category(params['name'])
+ xbmcplugin.endOfDirectory(int(sys.argv[1]))
\ No newline at end of file
diff --git a/plugin.video.zapiks/fanart.jpg b/plugin.video.zapiks/fanart.jpg
index 2775bc3..60e1d11 100644
Binary files a/plugin.video.zapiks/fanart.jpg and
b/plugin.video.zapiks/fanart.jpg differ
diff --git a/plugin.video.zapiks/resources/language/English/strings.xml
b/plugin.video.zapiks/resources/language/English/strings.xml
index 75c8a87..14cc5e5 100644
--- a/plugin.video.zapiks/resources/language/English/strings.xml
+++ b/plugin.video.zapiks/resources/language/English/strings.xml
@@ -1,10 +1,13 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<strings>
- <string id="30000">Partner Videos</string>
- <string id="30001">Next Page</string>
- <string id="30002">Most Recent</string>
- <string id="30003">Most Viewed</string>
- <string id="30004">Most Buzzed</string>
- <string id="30005">Staff Picks</string>
- <string id="30006">Sort Videos by</string>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<strings>
+ <string id="30000">Zapiks Pro</string>
+ <string id="30001">Next Page</string>
+ <string id="30002">Brands</string>
+ <string id="30003">Events</string>
+ <string id="30004">Productions</string>
+ <string id="30005">Athletes</string>
+ <string id="30006">Crews</string>
+ <string id="30007">Media</string>
+ <string id="30008">Enable HD</string>
+ <string id="30009">Choose Filter</string>
</strings>
\ No newline at end of file
diff --git a/plugin.video.zapiks/resources/settings.xml
b/plugin.video.zapiks/resources/settings.xml
index 85430f1..59cef38 100644
--- a/plugin.video.zapiks/resources/settings.xml
+++ b/plugin.video.zapiks/resources/settings.xml
@@ -1,3 +1,4 @@
-<settings>
- <setting id="sort_method" type="enum" lvalues="30002|30003|30004|30005"
label="30006" default="0"/>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<settings>
+ <setting id="enable_hd" type="bool" label="30008" default="true"/>
</settings>
\ No newline at end of file
-----------------------------------------------------------------------
Summary of changes:
plugin.video.zapiks/addon.xml | 43 ++-
plugin.video.zapiks/changelog.txt | 53 ++--
plugin.video.zapiks/default.py | 390 +++++++++++---------
plugin.video.zapiks/fanart.jpg | Bin 117915 -> 335591
bytes
plugin.video.zapiks/resources/images/next.png | Bin 18680 -> 0 bytes
.../resources/language/English/strings.xml | 21 +-
plugin.video.zapiks/resources/settings.xml | 5 +-
7 files changed, 287 insertions(+), 225 deletions(-)
delete mode 100644 plugin.video.zapiks/resources/images/next.png
hooks/post-receive
--
Plugins
------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT
organizations don't have a clear picture of how application performance
affects their revenue. With AppDynamics, you get 100% visibility into your
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
_______________________________________________
Xbmc-addons mailing list
Xbmc-addons@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xbmc-addons