MythTV  master
comedycentral.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 # -*- coding: UTF-8 -*-
3 # ----------------------
4 # Name: comedycentral.py
5 # Python Script
6 # Author: R.D. Vaughan
7 # Purpose:
8 # This python script is intended to perform a mashup of various Comedy Central Internet media sources
9 # for the MythTV Netvision plugin. It follows the MythTV Netvision grabber standards.
10 #
11 # Command example:
12 # See help (-u and -h) options
13 #
14 # Design:
15 # 1) Read "~/.mythtv/MythNetvision/userGrabberPrefs/spaceMashup.xml" configuration file
16 # 2) Input the sources that are marked as enabled
17 # 3) Process the results and display to stdout
18 #
19 #
20 # License:Creative Commons GNU GPL v2
21 # (http://creativecommons.org/licenses/GPL/2.0/)
22 #-------------------------------------
23 __title__ ="Comedy Central";
24 __mashup_title__ = "comedycentralMashup"
25 __author__="R.D. Vaughan"
26 __version__="v0.10"
27 # 0.10 Initial development
28 
29 __usage_examples__ ='''
30 (Option Help)
31 > ./comedycentral.py -h
32 Usage: ./comedycentral.py -hduvlST [parameters] <search text>
33 Version: v0.1.0 Author: R.D.Vaughan
34 
35 For details on the MythTV Netvision plugin see the wiki page at:
36 http://www.mythtv.org/wiki/MythNetvision
37 
38 Options:
39  -h, --help show this help message and exit
40  -d, --debug Show debugging info (URLs, raw XML ... etc, info
41  varies per grabber)
42  -u, --usage Display examples for executing the script
43  -v, --version Display grabber name and supported options
44  -l LANGUAGE, --language=LANGUAGE
45  Select data that matches the specified language fall
46  back to English if nothing found (e.g. 'es' EspaƱol,
47  'de' Deutsch ... etc). Not all sites or grabbers
48  support this option.
49  -p PAGE NUMBER, --pagenumber=PAGE NUMBER
50  Display specific page of the search results. Default
51  is page 1. Page number is ignored with the Tree View
52  option (-T).
53  -T, --treeview Display a Tree View of a sites videos
54 
55 > ./comedycentral.py -v
56 
57 > ./comedycentral.py -T
58 '''
59 __search_max_page_items__ = 20
60 __tree_max_page_items__ = 20
61 
62 import sys, os
63 
64 
65 class OutStreamEncoder(object):
66  """Wraps a stream with an encoder"""
67  def __init__(self, outstream, encoding=None):
68  self.out = outstream
69  if not encoding:
70  self.encoding = sys.getfilesystemencoding()
71  else:
72  self.encoding = encoding
73 
74  def write(self, obj):
75  """Wraps the output stream, encoding Unicode strings with the specified encoding"""
76  if isinstance(obj, unicode):
77  try:
78  self.out.write(obj.encode(self.encoding))
79  except IOError:
80  pass
81  else:
82  try:
83  self.out.write(obj)
84  except IOError:
85  pass
86 
87  def __getattr__(self, attr):
88  """Delegate everything but write to the stream"""
89  return getattr(self.out, attr)
90 sys.stdout = OutStreamEncoder(sys.stdout, 'utf8')
91 sys.stderr = OutStreamEncoder(sys.stderr, 'utf8')
92 
93 
94 # Used for debugging
95 #import nv_python_libs.common.common_api
96 
97 try:
98  '''Import the common python class
99  '''
100  import nv_python_libs.common.common_api as common_api
101 except Exception, e:
102  sys.stderr.write('''
103 The subdirectory "nv_python_libs/common" containing the modules mashups_api.py and
104 mashups_exceptions.py (v0.1.3 or greater),
105 They should have been included with the distribution of MythNetvision
106 Error(%s)
107 ''' % e)
108  sys.exit(1)
109 
110 if common_api.__version__ < '0.1.3':
111  sys.stderr.write("\n! Error: Your current installed common_api.py version is (%s)\nYou must at least have version (0.1.3) or higher.\n" % target.__version__)
112  sys.exit(1)
113 
114 # Used for debugging
115 #import nv_python_libs.mashups.mashups_api as target
116 try:
117  '''Import the python mashups support classes
118  '''
119  import nv_python_libs.mashups.mashups_api as target
120 except Exception, e:
121  sys.stderr.write('''
122 The subdirectory "nv_python_libs/mashups" containing the modules mashups_api and
123 mashups_exceptions.py (v0.1.0 or greater),
124 They should have been included with the distribution of comedycentral.py.
125 Error(%s)
126 ''' % e)
127  sys.exit(1)
128 if target.__version__ < '0.1.0':
129  sys.stderr.write("\n! Error: Your current installed mashups_api.py version is (%s)\nYou must at least have version (0.1.0) or higher.\n" % target.__version__)
130  sys.exit(1)
131 
132 # Verify that the main process modules are installed and accessible
133 try:
134  import nv_python_libs.mainProcess as process
135 except Exception, e:
136  sys.stderr.write('''
137 The python script "nv_python_libs/mainProcess.py" must be present.
138 Error(%s)
139 ''' % e)
140  sys.exit(1)
141 
142 if process.__version__ < '0.2.0':
143  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__)
144  sys.exit(1)
145 
146 if __name__ == '__main__':
147  # No api key is required
148  apikey = ""
149  # Set the base processing directory that the grabber is installed
150  target.baseProcessingDir = os.path.dirname( os.path.realpath( __file__ ))
151  # Make sure the target functions have an instance of the common routines
152  target.common = common_api.Common()
153  main = process.mainProcess(target, apikey, )
154  main.grabberInfo = {}
155  main.grabberInfo['title'] = __title__
156  main.grabberInfo['command'] = u'comedycentral.py'
157  main.grabberInfo['mashup_title'] = __mashup_title__
158  main.grabberInfo['author'] = __author__
159  main.grabberInfo['thumbnail'] = 'comedycentral.png'
160  main.grabberInfo['type'] = ['video', ]
161  main.grabberInfo['desc'] = u"Videos of your favorite shows, whenever you want them!"
162  main.grabberInfo['version'] = __version__
163  main.grabberInfo['search'] = False
164  main.grabberInfo['tree'] = True
165  main.grabberInfo['html'] = False
166  main.grabberInfo['usage'] = __usage_examples__
167  main.grabberInfo['SmaxPage'] = __search_max_page_items__
168  main.grabberInfo['TmaxPage'] = __tree_max_page_items__
169  main.main()
def __init__(self, outstream, encoding=None)