MythTV  0.26-pre
bliptv.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 # -*- coding: UTF-8 -*-
00003 # ----------------------
00004 # Name: bliptv.py
00005 # Python Script
00006 # Author: R.D. Vaughan
00007 # Purpose:
00008 #   This python script is intended to perform blip.tv lookups for the MythTV Netvision plugin
00009 #   based on information found on the http://blip.tv/ website. It
00010 #   follows the MythTV Netvision grabber standards.
00011 #   This script uses the python module bliptv_api.py which should be included
00012 #   with this script.
00013 #   The bliptv.py module uses the full access API 2.0 api published by
00014 #   http://blip.tv/ see: http://blip.tv/about/api/
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 key (optional) 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__ ="blip.tv";
00029 __author__="R.D. Vaughan"
00030 __version__="0.23"
00031 # 0.1.0 Initial development
00032 # 0.1.1 Add tree view
00033 # 0.1.2 Documentation review
00034 # 0.2.0 Public release
00035 # 0.2.1 Improve the information displayed by trapped aborts
00036 # 0.22  Change to support xml version information display
00037 # 0.23  Added the "command" tag to the xml version information display
00038 
00039 __usage_examples__ ='''
00040 > ./bliptv.py -h
00041 Usage: ./bliptv.py -hduvlST [parameters] <search text>
00042 
00043 For details on the MythTV Netvision plugin see the wiki page at:
00044 http://www.mythtv.org/wiki/MythNetvision
00045 Version: v0.22 Author: R.D.Vaughan
00046 
00047 Options:
00048   -h, --help            show this help message and exit
00049   -d, --debug           Show debugging info (URLs, raw XML ... etc, info
00050                         varies per grabber)
00051   -u, --usage           Display examples for executing the script
00052   -v, --version         Display grabber name and supported options
00053   -l LANGUAGE, --language=LANGUAGE
00054                         Select data that matches the specified language fall
00055                         back to English if nothing found (e.g. 'es' Español,
00056                         'de' Deutsch ... etc). Not all sites or grabbers
00057                         support this option.
00058   -p PAGE NUMBER, --pagenumber=PAGE NUMBER
00059                         Display specific page of the search results. Default
00060                         is page 1. Page number is ignored with the Tree
00061                         View option (-T).
00062   -S, --search          Search for videos
00063   -T, --treeview        Display a Tree View of a sites videos
00064 
00065 
00066 (Search for all videos identified with the word "flute")
00067 >./bliptv.py -p 1 -S "flute"
00068 <?xml version="1.0" encoding="UTF-8"?>
00069 <rss version="2.0"
00070 xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
00071 xmlns:content="http://purl.org/rss/1.0/modules/content/"
00072 xmlns:cnettv="http://cnettv.com/mrss/"
00073 xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
00074 xmlns:media="http://search.yahoo.com/mrss/"
00075 xmlns:atom="http://www.w3.org/2005/Atom"
00076 xmlns:amp="http://www.adobe.com/amp/1.0"
00077 xmlns:dc="http://purl.org/dc/elements/1.1/">
00078     <channel>
00079         <title>blip.tv</title>
00080         <link>http://blip.tv</link>
00081         <description>We're the next generation television network</description>
00082         <numresults>21</numresults>
00083         <returned>20</returned>
00084         <startindex>20</startindex>
00085         <item>
00086             <title>空中散歩</title>
00087             <author>flute</author>
00088             <pubDate>Sun, 25 May 2008 02:39:49 +0000</pubDate>
00089             <description>test</description>
00090             <link>http://blip.tv/file/933615</link>
00091             <media:group>
00092                 <media:thumbnail url='http://a.images.blip.tv/Flute-416-140-781.jpg'/>
00093                 <media:content url='http://blip.tv/file/get/Flute-416.avi' duration='30' width='' height='' lang='en'/>
00094             </media:group>
00095             <rating>0.0</rating>
00096         </item>
00097 ...
00098         <item>
00099             <title>Bright Sunny Place (music video excerpt)</title>
00100             <author>tokyosax</author>
00101             <pubDate>Mon, 24 Sep 2007 11:05:46 +0000</pubDate>
00102             <description>A brief snippet of my flute work from a larger video composition viewable at http://www.youtube.com/profile?user=japanjazzman. Original tune, original forehead.</description>
00103             <link>http://blip.tv/file/394159</link>
00104             <media:group>
00105                 <media:thumbnail url='http://a.images.blip.tv/Arnoldbaruch-BrightSunnyPlace503-931.jpg'/>
00106                 <media:content url='http://blip.tv/file/get/Arnoldbaruch-BrightSunnyPlace310.mov' duration='45' width='' height='' lang='en'/>
00107             </media:group>
00108             <rating>0.0</rating>
00109         </item>
00110     </channel>
00111 </rss>
00112 
00113 (Create a Blip.tv Tree view)
00114 >./bliptv.py -T
00115 <?xml version="1.0" encoding="UTF-8"?>
00116 <rss version="2.0"
00117 xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
00118 xmlns:content="http://purl.org/rss/1.0/modules/content/"
00119 xmlns:cnettv="http://cnettv.com/mrss/"
00120 xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
00121 xmlns:media="http://search.yahoo.com/mrss/"
00122 xmlns:atom="http://www.w3.org/2005/Atom"
00123 xmlns:amp="http://www.adobe.com/amp/1.0"
00124 xmlns:dc="http://purl.org/dc/elements/1.1/">
00125     <channel>
00126         <title>blip.tv</title>
00127         <link>http://blip.tv</link>
00128         <description>We're the next generation television network</description>
00129         <numresults>0</numresults>
00130         <returned>1</returned>
00131         <startindex>0</startindex>
00132             <directory name="Popular/Recent/Features/Random ..." thumbnail="/usr/local/share/mythtv//mythnetvision/icons/bliptv.png">
00133             <directory name="Most Comments" thumbnail="/usr/local/share/mythtv//mythnetvision/icons/directories/topics/most_comments.png">
00134                 <item>
00135                     <title>VIDEO: Eritrea Movie Timali (Part 24)</title>
00136                     <author>asmarino5</author>
00137                     <pubDate>Mon, 04 Jan 2010 05:30:21 +0000</pubDate>
00138                     <description>VIDEO: Eritrea Movie Timali (Part 24)</description>
00139                     <link>http://blip.tv/file/3043223</link>
00140                     <media:group>
00141                         <media:thumbnail url='http://a.images.blip.tv/Asmarino5-VIDEOEritreaMovieTimaliPart24121-227.jpg'/>
00142                         <media:content url='http://blip.tv/file/get/Asmarino5-VIDEOEritreaMovieTimaliPart24121.wmv' duration='2216' width='320' height='240' lang='en'/>
00143                     </media:group>
00144                     <rating>0.0</rating>
00145                 </item>
00146 ...
00147                 <item>
00148                     <title>informest</title>
00149                     <author>fluido</author>
00150                     <pubDate>Sun, 03 Jan 2010 22:23:56 +0000</pubDate>
00151                     <description>informest</description>
00152                     <link>http://blip.tv/file/3042202</link>
00153                     <media:group>
00154                         <media:thumbnail url='http://a.images.blip.tv/Fluido-informest458-244.jpg'/>
00155                         <media:content url='http://blip.tv/file/get/Fluido-informest458.mp4' duration='310' width='720' height='576' lang='en'/>
00156                     </media:group>
00157                     <rating>0.0</rating>
00158                 </item>
00159             </directory>
00160             </directory>
00161     </channel>
00162 </rss>
00163 '''
00164 
00165 __max_page_items__ = 20
00166 
00167 import sys, os
00168 
00169 class OutStreamEncoder(object):
00170     """Wraps a stream with an encoder"""
00171     def __init__(self, outstream, encoding=None):
00172         self.out = outstream
00173         if not encoding:
00174             self.encoding = sys.getfilesystemencoding()
00175         else:
00176             self.encoding = encoding
00177 
00178     def write(self, obj):
00179         """Wraps the output stream, encoding Unicode strings with the specified encoding"""
00180         if isinstance(obj, unicode):
00181             try:
00182                 self.out.write(obj.encode(self.encoding))
00183             except IOError:
00184                 pass
00185         else:
00186             try:
00187                 self.out.write(obj)
00188             except IOError:
00189                 pass
00190 
00191     def __getattr__(self, attr):
00192         """Delegate everything but write to the stream"""
00193         return getattr(self.out, attr)
00194 sys.stdout = OutStreamEncoder(sys.stdout, 'utf8')
00195 sys.stderr = OutStreamEncoder(sys.stderr, 'utf8')
00196 
00197 
00198 # Used for debugging - usually commented out
00199 #import nv_python_libs.bliptv.bliptv_api as target
00200 
00201 # Verify that the tmdb_api modules are installed and accessable
00202 try:
00203     import nv_python_libs.bliptv.bliptv_api as target
00204 except Exception, e:
00205     sys.stderr.write('''
00206 The subdirectory "nv_python_libs/bliptv" containing the modules bliptv_api.py (v0.2.0 or greater),
00207 They should have been included with the distribution of bliptv.py.
00208 Error(%s)
00209 ''' % e)
00210     sys.exit(1)
00211 
00212 if target.__version__ < '0.2.0':
00213     sys.stderr.write("\n! Error: Your current installed bliptv_api.py version is (%s)\nYou must at least have version (0.2.0) or higher.\n" % target.__version__)
00214     sys.exit(1)
00215 
00216 
00217 # Verify that the common process modules are installed and accessable
00218 try:
00219     import nv_python_libs.mainProcess as process
00220 except Exception, e:
00221     sys.stderr.write('''
00222 The python script "nv_python_libs/mainProcess.py" must be present.
00223 Error(%s)
00224 ''' % e)
00225     sys.exit(1)
00226 
00227 if process.__version__ < '0.2.0':
00228     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__)
00229     sys.exit(1)
00230 
00231 if __name__ == '__main__':
00232     # No api key is required
00233     apikey = ""
00234     main = process.mainProcess(target, apikey, )
00235     main.grabberInfo = {}
00236     main.grabberInfo['title'] = __title__
00237     main.grabberInfo['command'] = u'bliptv.py'
00238     main.grabberInfo['author'] = __author__
00239     main.grabberInfo['thumbnail'] = 'bliptv.png'
00240     main.grabberInfo['type'] = ['video']
00241     main.grabberInfo['desc'] = u"We're the next generation television network."
00242     main.grabberInfo['version'] = __version__
00243     main.grabberInfo['search'] = True
00244     main.grabberInfo['tree'] = True
00245     main.grabberInfo['html'] = False
00246     main.grabberInfo['usage'] = __usage_examples__
00247     main.grabberInfo['SmaxPage'] = __max_page_items__
00248     main.grabberInfo['TmaxPage'] = __max_page_items__
00249     main.main()
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends