The branch, eden has been updated
via 18fd739fc1beae457b5d85dfac52ef7426b2eab9 (commit)
via 214066f0fa185ef0726c4d176e26fdd60c38d35d (commit)
from 588df9e1aa128182266f1dc58aed781d1b84d104 (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=18fd739fc1beae457b5d85dfac52ef7426b2eab9
commit 18fd739fc1beae457b5d85dfac52ef7426b2eab9
Author: Martijn Kaijser <[email protected]>
Date: Tue Sep 4 13:11:16 2012 +0200
[plugin.video.funny.or.die] -v1.0.2
diff --git a/plugin.video.funny.or.die/addon.xml
b/plugin.video.funny.or.die/addon.xml
index ea4887d..1274753 100644
--- a/plugin.video.funny.or.die/addon.xml
+++ b/plugin.video.funny.or.die/addon.xml
@@ -1,11 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.funny.or.die"
name="Funny or Die"
- version="1.0.1"
+ version="1.0.2"
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="1.0.0"/>
</requires>
<extension point="xbmc.python.pluginsource"
library="default.py">
@@ -15,5 +16,6 @@
<summary>funnyordie.com Videos</summary>
<description>Funny Or Die is a comedy video website that combines
user-generated content with original, exclusive content. The site is a place
where celebrities, established and up-and-coming comedians and regular users
can all put up stuff they think is funny.</description>
<platform>all</platform>
+ <language>en</language>
</extension>
</addon>
diff --git a/plugin.video.funny.or.die/changelog.txt
b/plugin.video.funny.or.die/changelog.txt
index d484775..d4e7551 100644
--- a/plugin.video.funny.or.die/changelog.txt
+++ b/plugin.video.funny.or.die/changelog.txt
@@ -1,3 +1,6 @@
+Version 1.0.2
+fix for getting video url
+
Version 1.0.1
fix pagenation
added new categories
diff --git a/plugin.video.funny.or.die/default.py
b/plugin.video.funny.or.die/default.py
index 6613a00..312f247 100644
--- a/plugin.video.funny.or.die/default.py
+++ b/plugin.video.funny.or.die/default.py
@@ -2,10 +2,12 @@ import urllib
import urllib2
import re
import os
+import htmlentitydefs
import xbmcplugin
import xbmcgui
import xbmcaddon
from BeautifulSoup import BeautifulSoup
+import StorageServer
__settings__ = xbmcaddon.Addon(id='plugin.video.funny.or.die')
__language__ = __settings__.getLocalizedString
@@ -13,114 +15,111 @@ sort = __settings__.getSetting('sort_by').replace('
','_').lower()
sort_time = __settings__.getSetting('sort_time').replace(' ','_').lower()
home = __settings__.getAddonInfo('path')
icon = xbmc.translatePath( os.path.join( home, 'icon.png' ) )
+cache = StorageServer.StorageServer("FunnyOrDie", 24)
-def categories():
-
addDir(__language__(30000),'http://www.funnyordie.com/browse/videos/all/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30001),'http://www.funnyordie.com/browse/videos/all/exclusives/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30002),'http://www.funnyordie.com/browse/videos/all/immortal/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30003),'http://www.funnyordie.com/browse/videos/animation/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30004),'http://www.funnyordie.com/browse/videos/animals/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30005),'http://www.funnyordie.com/browse/videos/clean_comedy/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30006),'http://www.funnyordie.com/browse/videos/dumb_people/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30007),'http://www.funnyordie.com/browse/videos/fails/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30008),'http://www.funnyordie.com/browse/videos/memes/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30009),'http://www.funnyordie.com/browse/videos/kids/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30010),'http://www.funnyordie.com/browse/videos/mashups/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30011),'http://www.funnyordie.com/browse/videos/music/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30012),'http://www.funnyordie.com/browse/videos/news_fails/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30013),'http://www.funnyordie.com/browse/videos/nostalgia/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30014),'http://www.funnyordie.com/browse/videos/nsfw/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30015),'http://www.funnyordie.com/browse/videos/parody/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30016),'http://www.funnyordie.com/browse/videos/politics/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30017),'http://www.funnyordie.com/browse/videos/rants/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30018),'http://www.funnyordie.com/browse/videos/real_life/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30019),'http://www.funnyordie.com/browse/videos/recaps/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30020),'http://www.funnyordie.com/browse/videos/sketch/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30021),'http://www.funnyordie.com/browse/videos/sports/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30022),'http://www.funnyordie.com/browse/videos/stand_up/all/'+sort+'/'+sort_time,1,icon)
-
addDir(__language__(30023),'http://www.funnyordie.com/browse/videos/web_series/all/'+sort+'/'+sort_time,1,icon)
-
-
-def getRequest(url):
- headers = {'User-agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64;
rv:9.0.1) Gecko/20100101 Firefox/9.0.1',
- 'Referer' : 'http://www.funnyordie.com/browse/videos'}
- req = urllib2.Request(url, None, headers)
- response = urllib2.urlopen(req)
- link = response.read()
- response.close()
- return link
-
-
-def index(url, play=False):
- if play == True:
- playlist = xbmc.PlayList(1)
- playlist.clear()
- link = getRequest(url)
- link = link.replace("\\",'').replace('\n','').replace("\'",'')
- items = re.compile('<div
class="detailed_vp">(.+?)</a></div></div>').findall(link)
+def make_request(url, headers=None):
+ try:
+ if headers is None:
+ headers = {'User-agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64;
rv:14.0) Gecko/20100101 Firefox/14.0.1',
+ 'Referer' : 'http://www.funnyordie.com/videos'}
+ req = urllib2.Request(url,None,headers)
+ response = urllib2.urlopen(req)
+ data = response.read()
+ response.close()
+ return data
+ except urllib2.URLError, e:
+ print 'We failed to open "%s".' % url
+ if hasattr(e, 'reason'):
+ print 'We failed to reach a server.'
+ print 'Reason: ', e.reason
+ if hasattr(e, 'code'):
+ print 'We failed with error code - %s.' % e.code
+ xbmc.executebuiltin("XBMC.Notification(FunnyOrDie,HTTP ERROR:
"+str(e.code)+",5000,"+icon+")")
+
+
+def cache_categories():
+ soup =
BeautifulSoup(make_request('http://www.funnyordie.com/browse/videos/all/all/most_buzz'))
+ items = soup('div', attrs={'class' : 'dropdown'})[0]('a')
+ cat_list = []
+ for i in items:
+ cat_list.append((i.string, i['href']))
+ return cat_list
+
+
+def get_categories():
+ for i in cache.cacheFunction(cache_categories):
+ url = 'http://www.funnyordie.com/'
+ url += '%s/%s/%s' %(i[1].rsplit('/', 1)[0], sort, sort_time)
+ addDir(i[0],url,1,icon)
+
+
+## Thanks to Fredrik Lundh for this function -
http://effbot.org/zone/re-sub.htm#unescape-html
+def unescape(text):
+ def fixup(m):
+ text = m.group(0)
+ if text[:2] == "&#":
+ # character reference
+ try:
+ if text[:3] == "&#x":
+ return unichr(int(text[3:-1], 16))
+ else:
+ return unichr(int(text[2:-1]))
+ except ValueError:
+ pass
+ else:
+ # named entity
+ try:
+ text = unichr(htmlentitydefs.name2codepoint[text[1:-1]])
+ except KeyError:
+ pass
+ return text # leave as is
+ return re.sub("&#?\w+;", fixup, text)
+
+
+def index(url):
+ data =
make_request(url).replace("\\",'').replace('\n','').replace("\'",'')
+ items = re.compile('<div
class="detailed_vp">(.+?)</a>n</div></div>').findall(data)
if len(items) < 1:
- items = re.compile('<div
class="detailed_vp">(.+?)</a>n</div></div>').findall(link)
+ items = re.compile('<div
class="detailed_vp">(.+?)</a></div></div>').findall(data)
for i in items:
- name =
re.compile('title="(.+?)"').findall(i)[0].replace('&','&').replace('"','"').replace(''',"'")
try:
- thumb = re.compile('class="thumbnail" height="90"
src="(.+?)"').findall(i)[0].replace('medium','fullsize')
+ desc = unescape(re.findall('class="title" title="(.+?)"',
i)[0])
except:
- try:
- thumb = re.compile('class="thumbnail"
src="(.+?)"').findall(i)[0]
- except:
- thumb = ''
- vid_id = re.compile('data-viewkey="(.+?)"').findall(i)[0][1:]
+ print '--desc exception--'
+ name = desc.split(' from')[0]
+ vid_id = re.findall('data-viewkey="(.+?)"', i)[0][1:]
try:
- duration = re.compile('<span
class="duration">(.+?)</span>').findall(i)[0]
+ thumb = re.findall('class="thumbnail" src="(.+?)"', i)[0]
+ except:
+ thumb = ''
+ try:
+ duration = re.findall('<span class="duration">(.+?)</span>',
i)[0]
except:
duration = ''
- if not play == True:
- addLink(name, vid_id, duration, 2, thumb)
- else:
- url = get_smil(vid_id)
- info = xbmcgui.ListItem(name, iconImage="DefaultVideo.png",
thumbnailImage=thumb)
- playlist.add(url, info)
+
u=sys.argv[0]+"?url="+urllib.quote_plus(vid_id)+"&mode=2&name="+urllib.quote_plus(name)
+ liz=xbmcgui.ListItem(name, iconImage="DefaultVideo.png",
thumbnailImage=thumb)
+ liz.setInfo(type="Video", infoLabels={"Title": name, "Duration":
duration, "Plot": desc})
+ liz.setProperty('IsPlayable', 'true')
+
xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,totalItems=20)
+
try:
- page_num = re.compile('next_page = (.+?);').findall(link)[0]
+ page_num = re.findall('next_page = (.+?);', data)[0]
page = '?page='+page_num
if not 'more' in url:
url = url.replace('videos','more/videos')
url = url.split('?page')[0]+page
- addDir(__language__(30031), url, 1, xbmc.translatePath(
os.path.join( home, 'resources', 'next.png' ) ))
- except: pass
- if play == True:
- xbmc.executebuiltin('playlist.playoffset(video,0)')
+ addDir(__language__(30031), url, 1,
xbmc.translatePath(os.path.join(home, 'resources', 'next.png')))
+ except:
+ print '--- nextpage exception ---'
def playVid(url):
- url = get_smil(url)
+ url = 'http://vo.fod4.com/v/%s/v600.mp4' %url
item = xbmcgui.ListItem(path=url)
xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, item)
-def addToPlayList(name, url, iconimage):
- url = get_smil(url)
- info = xbmcgui.ListItem(name, iconImage="DefaultVideo.png",
thumbnailImage=iconimage)
- playlist = xbmc.PlayList(1)
- playlist.add(url, info)
-
-
-def get_smil(id):
- link = getRequest("http://www.funnyordie.com/player/"+id+"?v=3")
- soup = BeautifulSoup(link)
- title = soup.find('title').string
- stream_list = soup.findAll('stream')
- if len(stream_list) < 1:
- stream = soup.find('location').contents[0]
- return stream
- else:
- if __settings__.getSetting('video_quality') == '0':
- return stream_list[0].file.contents[0]
- if __settings__.getSetting('video_quality') == '1':
- return stream_list[1].file.contents[0]
-
-
def get_params():
param=[]
paramstring=sys.argv[2]
@@ -140,27 +139,11 @@ def get_params():
return param
-def addLink(name,url,duration,mode,iconimage,showcontext=True):
-
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, "Duration":
duration } )
- liz.setProperty('IsPlayable', 'true')
- if showcontext:
- contextMenu =
[(__language__(30033),'XBMC.Container.Update(%s?url=%s&mode=3&name=%s&iconimage=%s)'
%(sys.argv[0], urllib.quote_plus(url), urllib.quote_plus(name),
urllib.quote_plus(iconimage)))]
- liz.addContextMenuItems(contextMenu)
-
ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,totalItems=20)
- return ok
-
-
-def addDir(name,url,mode,iconimage,showcontext=True):
+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="DefaultFolder.png",
thumbnailImage=iconimage)
liz.setInfo( type="Video", infoLabels={ "Title": name } )
- if showcontext:
- contextMenu =
[(__language__(30032),'XBMC.Container.Update(%s?url=%s&mode=4)' %(sys.argv[0],
urllib.quote_plus(url)))]
- liz.addContextMenuItems(contextMenu)
ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=True)
return ok
@@ -191,9 +174,9 @@ print "Mode: "+str(mode)
print "URL: "+str(url)
print "Name: "+str(name)
-if mode==None or url==None or len(url)<1:
+if mode==None:
print ""
- categories()
+ get_categories()
elif mode==1:
print ""+url
@@ -203,12 +186,4 @@ elif mode==2:
print ""
playVid(url)
-elif mode==3:
- print ""
- addToPlayList(name, url, iconimage)
-
-elif mode==4:
- print ""
- index(url, True)
-
xbmcplugin.endOfDirectory(handle=int(sys.argv[1]))
\ No newline at end of file
diff --git a/plugin.video.funny.or.die/resources/settings.xml
b/plugin.video.funny.or.die/resources/settings.xml
index 72f65d1..5ae67b6 100644
--- a/plugin.video.funny.or.die/resources/settings.xml
+++ b/plugin.video.funny.or.die/resources/settings.xml
@@ -1,5 +1,4 @@
<settings>
<setting id="sort_by" type="select" lvalues="30025|30026|30027|30028|30029"
label="30030" default="highest_rated"/>
<setting id="sort_time" type="select" lvalues="30038|30039|30040"
label="30037" default="all_time"/>
- <setting id="video_quality" type="enum" lvalues="30034|30035" label="30036"
default="0"/>
</settings>
\ No newline at end of file
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=214066f0fa185ef0726c4d176e26fdd60c38d35d
-----------------------------------------------------------------------
Summary of changes:
plugin.video.funny.or.die/addon.xml | 4 +-
plugin.video.funny.or.die/changelog.txt | 3 +
plugin.video.funny.or.die/default.py | 203 ++++++-------
plugin.video.funny.or.die/resources/settings.xml | 1 -
.../LICENSE.txt | 0
plugin.video.hollywoodreporter/addon.py | 312 ++++++++++++++++++++
plugin.video.hollywoodreporter/addon.xml | 19 ++
plugin.video.hollywoodreporter/changelog.txt | 9 +
plugin.video.hollywoodreporter/icon.png | Bin 0 -> 11092 bytes
.../resources/language/English/strings.xml | 6 +
.../resources/language/German/strings.xml | 6 +
11 files changed, 447 insertions(+), 116 deletions(-)
copy {plugin.audio.einslive_de => plugin.video.hollywoodreporter}/LICENSE.txt
(100%)
create mode 100644 plugin.video.hollywoodreporter/addon.py
create mode 100644 plugin.video.hollywoodreporter/addon.xml
create mode 100644 plugin.video.hollywoodreporter/changelog.txt
create mode 100644 plugin.video.hollywoodreporter/icon.png
create mode 100644
plugin.video.hollywoodreporter/resources/language/English/strings.xml
create mode 100644
plugin.video.hollywoodreporter/resources/language/German/strings.xml
hooks/post-receive
--
Plugins
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons