|
MythTV
0.26-pre
|
00001 #!/usr/bin/env python 00002 # -*- coding: UTF-8 -*- 00003 # ---------------------- 00004 # Name: dailymotion.py 00005 # Python Script 00006 # Author: R.D. Vaughan 00007 # Purpose: 00008 # This python script is intended to perform Dailymotion video lookups for the MythTV Netvision plugin 00009 # based on information found on the http://www.dailymotion.com website. It 00010 # follows the MythTV Netvision grabber standards. 00011 # This script uses the python module dailymotion_api.py which should be included 00012 # with this script. 00013 # The dailymotion.py module uses the full access API published by 00014 # http://www.dailymotion.com see: http://www.dailymotion.com/ca-en/doc/api/player 00015 # 00016 # Command example: 00017 # See help (-u and -h) options 00018 # 00019 # Design: 00020 # 1) Import the specific target site API library. 00021 # 2) Set the title for the scripts and the API optional key for the target video site 00022 # 3) Call the common processing routine 00023 # 00024 # 00025 # License:Creative Commons GNU GPL v2 00026 # (http://creativecommons.org/licenses/GPL/2.0/) 00027 #------------------------------------- 00028 __title__ ="Dailymotion"; 00029 __author__="R.D. Vaughan" 00030 __version__="0.23" 00031 # 0.1.0 Initial development 00032 # 0.1.1 Update documentation 00033 # 0.2.0 Public release 00034 # 0.2.1 Improved the diplayed messages when exception occur 00035 # 0.22 Change to support xml version information display 00036 # 0.23 Added the "command" tag to the xml version information display 00037 00038 00039 __usage_examples__ =''' 00040 (Option Help) 00041 > ./dailymotion.py -h 00042 Usage: ./dailymotion.py -hduvlST [parameters] <search text> 00043 Version: v0.2.0 Author: R.D.Vaughan 00044 00045 For details on the MythTV Netvision plugin see the wiki page at: 00046 http://www.mythtv.org/wiki/MythNetvision 00047 00048 Options: 00049 -h, --help show this help message and exit 00050 -d, --debug Show debugging info (URLs, raw XML ... etc, info 00051 varies per grabber) 00052 -u, --usage Display examples for executing the script 00053 -v, --version Display grabber name and supported options 00054 -l LANGUAGE, --language=LANGUAGE 00055 Select data that matches the specified language fall 00056 back to English if nothing found (e.g. 'es' Español, 00057 'de' Deutsch ... etc). Not all sites or grabbers 00058 support this option. 00059 -p PAGE NUMBER, --pagenumber=PAGE NUMBER 00060 Display specific page of the search results. Default 00061 is page 1. Page number is ignored with the Tree View 00062 option (-T). 00063 -S, --search Search for videos 00064 -T, --treeview Display a Tree View of a sites videos 00065 00066 00067 (Search dailymotion for videos matching search words) 00068 > ./dailymotion.py -S "Birds" 00069 <?xml version="1.0" encoding="UTF-8"?> 00070 <rss version="2.0" 00071 xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" 00072 xmlns:content="http://purl.org/rss/1.0/modules/content/" 00073 xmlns:cnettv="http://cnettv.com/mrss/" 00074 xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" 00075 xmlns:media="http://search.yahoo.com/mrss/" 00076 xmlns:atom="http://www.w3.org/2005/Atom" 00077 xmlns:amp="http://www.adobe.com/amp/1.0" 00078 xmlns:dc="http://purl.org/dc/elements/1.1/"> 00079 <channel> 00080 <title>Dailymotion</title> 00081 <link>http://www.dailymotion.com</link> 00082 <description>Dailymotion is about finding new ways to see, share and engage your world through the power of online video.</description> 00083 <numresults>16</numresults> 00084 <returned>15</returned> 00085 <startindex>15</startindex> 00086 <item> 00087 <title>Bob Marley - Three Little Birds</title> 00088 <author>hushhush112</author> 00089 <pubDate>Wed, 24 Jan 2007 04:29:56 +0100</pubDate> 00090 <description>"Three Little Birds" is a song by Bob Marley & The Wailers from their 1977 album Exodus. The single reached the Top 20 in England.</description> 00091 <link>http://www.dailymotion.com/swf/x11te1?autoPlay=1</link> 00092 <media:group> 00093 <media:thumbnail url='http://ak2.static.dailymotion.com/static/video/163/467/1764361:jpeg_preview_large.jpg?20090610235117'/> 00094 <media:content url='http://www.dailymotion.com/swf/x11te1?autoPlay=1' duration='204' width='320' height='240' lang='en'/> 00095 </media:group> 00096 <rating>5.0</rating> 00097 </item> 00098 ... 00099 <item> 00100 <title>Birds Eye View Film Festival 2006: Highlights (Part 1)</title> 00101 <author>BirdsEyeViewFilm</author> 00102 <pubDate>Wed, 11 Feb 2009 17:11:32 +0100</pubDate> 00103 <description>Highlights from the Birds Eye View International Women's Day Gala at the BFI Southbank - the opening event for Birds Eye View Film Festival 2006. Special guests included Gurinder Chadha, Arabella Weir, Jerry Hall and Jessica Stevenson (Hynes). Each year we showcase the very best in new features, documentaries and short films from women filmmakers from across the globe, alongside premiere screenings, special multi-media events, Q&As, panel discussions and parties. Birds Eye View celebrates international women filmmakers. http://www.birds-eye-view.co.uk</description> 00104 <link>http://www.dailymotion.com/swf/x8c61t?autoPlay=1</link> 00105 <media:group> 00106 <media:thumbnail url='http://ak2.static.dailymotion.com/static/video/146/400/14004641:jpeg_preview_large.jpg?20090416211915'/> 00107 <media:content url='http://www.dailymotion.com/swf/x8c61t?autoPlay=1' duration='199' width='320' height='240' lang='en'/> 00108 </media:group> 00109 <rating>5.0</rating> 00110 </item> 00111 </channel> 00112 </rss> 00113 00114 00115 (Retrieve a Tree View of the Dailymotion Video Categories) 00116 > ./dailymotion.py -T 00117 <?xml version="1.0" encoding="UTF-8"?> 00118 <rss version="2.0" 00119 xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" 00120 xmlns:content="http://purl.org/rss/1.0/modules/content/" 00121 xmlns:cnettv="http://cnettv.com/mrss/" 00122 xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" 00123 xmlns:media="http://search.yahoo.com/mrss/" 00124 xmlns:atom="http://www.w3.org/2005/Atom" 00125 xmlns:amp="http://www.adobe.com/amp/1.0" 00126 xmlns:dc="http://purl.org/dc/elements/1.1/"> 00127 <channel> 00128 <title>Dailymotion</title> 00129 <link>http://www.dailymotion.com</link> 00130 <description>Dailymotion is about finding new ways to see, share and engage your world through the power of online video.</description> 00131 <numresults>0</numresults> 00132 <returned>1</returned> 00133 <startindex>0</startindex> 00134 <directory name="Featured/Most/Best/Current ..." thumbnail="/usr/local/share/mythtv/mythnetvision/icons/dailymotion.jpg"> 00135 <directory name="Featured Videos" thumbnail="/usr/local/share/mythtv/mythnetvision/icons/directories/topics/featured.png"> 00136 <item> 00137 <title>Born of Hope - Full Movie</title> 00138 <author>BornofHope</author> 00139 <pubDate>Tue, 01 Dec 2009 09:49:05 +0100</pubDate> 00140 <description>This version of the film is not the best one to watch. Please select the Extended Version http://www.dailymotion.com/video/xbhonj_born-of-hope-extended-version_shortfilms Born of Hope is an independent feature film inspired by the Lord of the Rings and produced in the UK. www.bornofhope.comA scattered people, the descendents of storied sea kings of the ancient West, struggle to survive in a lonely wilderness as a dark force relentlessly bends its will toward their destruction. Yet amidst these valiant, desperate people, hope remains. A royal house endures unbroken from father to son.This 70 minute original drama is set in the time before the War of the Ring and tells the story of the Dúnedain, the Rangers of the North, before the return of the King. Inspired by only a couple of paragraphs written by Tolkien in the appendices of the Lord of the Rings we follow Arathorn and Gilraen, the parents of Aragorn, from their first meeting through a turbulent time in their people's history.</description> 00141 <link>http://www.dailymotion.com/swf/xbc5ut?autoPlay=1</link> 00142 <media:group> 00143 <media:thumbnail url='http://ak2.static.dailymotion.com/static/video/732/340/19043237:jpeg_preview_large.jpg?20091215100200'/> 00144 <media:content url='http://www.dailymotion.com/swf/xbc5ut?autoPlay=1' duration='4088' width='320' height='240' lang='en'/> 00145 </media:group> 00146 <rating>4.5</rating> 00147 </item> 00148 ... 00149 <item> 00150 <title>Rubik's Cube : un Français recordman du monde</title> 00151 <author>newzy-fr</author> 00152 <pubDate>Wed, 10 Oct 2007 21:02:52 +0200</pubDate> 00153 <description>Il s'appelle Thibaut Jacquinot, il a été champion de France 2006 de Rubik's Cube et il détient toujours le record du monde de la discipline. Démonstration réalisée sans trucages...Plus de vidéos rubik's Cube sur www.newzy.fr</description> 00154 <link>http://www.dailymotion.com/swf/x36jkt?autoPlay=1</link> 00155 <media:group> 00156 <media:thumbnail url='http://ak2.static.dailymotion.com/static/video/751/443/5344157:jpeg_preview_large.jpg?20090618140735'/> 00157 <media:content url='http://www.dailymotion.com/swf/x36jkt?autoPlay=1' duration='32' width='320' height='240' lang='en'/> 00158 </media:group> 00159 <rating>4.9</rating> 00160 </item> 00161 </directory> 00162 </directory> 00163 </directory> 00164 </channel> 00165 </rss> 00166 ''' 00167 __search_max_page_items__ = 10 00168 __tree_max_page_items__ = 20 00169 00170 import sys, os 00171 00172 class OutStreamEncoder(object): 00173 """Wraps a stream with an encoder""" 00174 def __init__(self, outstream, encoding=None): 00175 self.out = outstream 00176 if not encoding: 00177 self.encoding = sys.getfilesystemencoding() 00178 else: 00179 self.encoding = encoding 00180 00181 def write(self, obj): 00182 """Wraps the output stream, encoding Unicode strings with the specified encoding""" 00183 if isinstance(obj, unicode): 00184 try: 00185 self.out.write(obj.encode(self.encoding)) 00186 except IOError: 00187 pass 00188 else: 00189 try: 00190 self.out.write(obj) 00191 except IOError: 00192 pass 00193 00194 def __getattr__(self, attr): 00195 """Delegate everything but write to the stream""" 00196 return getattr(self.out, attr) 00197 sys.stdout = OutStreamEncoder(sys.stdout, 'utf8') 00198 sys.stderr = OutStreamEncoder(sys.stderr, 'utf8') 00199 00200 # Used for debugging normally commented out 00201 #import nv_python_libs.dailymotion.dailymotion_api as target 00202 00203 # Verify that the tmdb_api modules are installed and accessable 00204 try: 00205 import nv_python_libs.dailymotion.dailymotion_api as target 00206 except Exception, e: 00207 sys.stderr.write(''' 00208 The subdirectory "nv_python_libs/dailymotion" containing the modules dailymotion_api.py (v0.2.0 or greater), 00209 They should have been included with the distribution of dailymotion.py. 00210 Error(%s) 00211 ''' % e) 00212 sys.exit(1) 00213 00214 if target.__version__ < '0.2.0': 00215 sys.stderr.write("\n! Error: Your current installed dailymotion_api.py version is (%s)\nYou must at least have version (0.2.0) or higher.\n" % target.__version__) 00216 sys.exit(1) 00217 00218 00219 # Verify that the common process modules are installed and accessable 00220 try: 00221 import nv_python_libs.mainProcess as process 00222 except Exception, e: 00223 sys.stderr.write(''' 00224 The python script "nv_python_libs/mainProcess.py" must be present. 00225 Error(%s) 00226 ''' % e) 00227 sys.exit(1) 00228 00229 if process.__version__ < '0.2.0': 00230 sys.stderr.write("\n! Error: Your current installed mainProcess.py version is (%s)\nYou must at least have version (0.2.0) or higher.\n" % process.__version__) 00231 sys.exit(1) 00232 00233 if __name__ == '__main__': 00234 # No api key is required 00235 apikey = "" 00236 main = process.mainProcess(target, apikey, ) 00237 main.grabberInfo = {} 00238 main.grabberInfo['title'] = __title__ 00239 main.grabberInfo['command'] = u'dailymotion.py' 00240 main.grabberInfo['author'] = __author__ 00241 main.grabberInfo['thumbnail'] = 'dailymotion.png' 00242 main.grabberInfo['type'] = ['video'] 00243 main.grabberInfo['desc'] = u"Dailymotion is about finding new ways to see, share and engage your world through the power of online video." 00244 main.grabberInfo['version'] = __version__ 00245 main.grabberInfo['search'] = True 00246 main.grabberInfo['tree'] = True 00247 main.grabberInfo['html'] = False 00248 main.grabberInfo['usage'] = __usage_examples__ 00249 main.grabberInfo['SmaxPage'] = __search_max_page_items__ 00250 main.grabberInfo['TmaxPage'] = __tree_max_page_items__ 00251 main.main()
1.7.6.1