MythTV  master
technology.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 # -*- coding: UTF-8 -*-
3 # ----------------------
4 # Name: technology.py
5 # Python Script
6 # Author: R.D. Vaughan
7 # Purpose:
8 # This python script is intended to perform a mashup of various Technology 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/technologyMashup.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__ ="Technology";
24 __mashup_title__ = "technologyMashup"
25 __author__="R.D. Vaughan"
26 __version__="0.10"
27 # 0.10 Initial development
28 
29 __usage_examples__ ='''
30 (Option Help)
31 > ./technology.py -h
32 Usage: ./technology.py -hduvlST [parameters] <search text>
33 Version: v0.XX 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 > ./technology.py -v
56 <grabber>
57  <name>Technology</name>
58  <author>R.D. Vaughan</author>
59  <thumbnail>technology.png</thumbnail>
60  <command>technology.py</command>
61  <type>video</type>
62  <description>Mashups combines media from multiple sources to create a new work</description>
63  <version>0.XX</version>
64  <search>true</search>
65  <tree>true</tree>
66 </grabber>
67 
68 Search:
69 > ./technology.py -S "Video"
70 
71 Treeview:
72 > ./technology.py -T
73 '''
74 __search_max_page_items__ = 20
75 __tree_max_page_items__ = 20
76 
77 import sys, os
78 import io
79 
80 class OutStreamEncoder(object):
81  """Wraps a stream with an encoder"""
82  def __init__(self, outstream, encoding=None):
83  self.out = outstream
84  if not encoding:
85  self.encoding = sys.getfilesystemencoding()
86  else:
87  self.encoding = encoding
88 
89  def write(self, obj):
90  """Wraps the output stream, encoding Unicode strings with the specified encoding"""
91  if isinstance(obj, str):
92  obj = obj.encode(self.encoding)
93  self.out.buffer.write(obj)
94 
95  def __getattr__(self, attr):
96  """Delegate everything but write to the stream"""
97  return getattr(self.out, attr)
98 
99 if isinstance(sys.stdout, io.TextIOWrapper):
100  sys.stdout = OutStreamEncoder(sys.stdout, 'utf8')
101  sys.stderr = OutStreamEncoder(sys.stderr, 'utf8')
102 
103 
104 # Used for debugging
105 #import nv_python_libs.common.common_api
106 try:
107  '''Import the common python class
108  '''
109  import nv_python_libs.common.common_api as common_api
110 except Exception as e:
111  sys.stderr.write('''
112 The subdirectory "nv_python_libs/common" containing the modules common_api.py and
113 common_exceptions.py (v0.1.3 or greater),
114 They should have been included with the distribution of MythNetvision
115 Error(%s)
116 ''' % e)
117  sys.exit(1)
118 if common_api.__version__ < '0.1.3':
119  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__)
120  sys.exit(1)
121 
122 
123 # Used for debugging
124 #import nv_python_libs.mashups.mashups_api as target
125 try:
126  '''Import the python mashups support classes
127  '''
128  import nv_python_libs.mashups.mashups_api as target
129 except Exception as e:
130  sys.stderr.write('''
131 The subdirectory "nv_python_libs/mashups" containing the modules mashups_api and
132 mashups_exceptions.py (v0.1.0 or greater),
133 They should have been included with the distribution of technology.py.
134 Error(%s)
135 ''' % e)
136  sys.exit(1)
137 if target.__version__ < '0.1.0':
138  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__)
139  sys.exit(1)
140 
141 # Verify that the main process modules are installed and accessible
142 try:
143  import nv_python_libs.mainProcess as process
144 except Exception as e:
145  sys.stderr.write('''
146 The python script "nv_python_libs/mainProcess.py" must be present.
147 Error(%s)
148 ''' % e)
149  sys.exit(1)
150 
151 if process.__version__ < '0.2.0':
152  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__)
153  sys.exit(1)
154 
155 if __name__ == '__main__':
156  # No api key is required
157  apikey = ""
158  # Set the base processing directory that the grabber is installed
159  target.baseProcessingDir = os.path.dirname( os.path.realpath( __file__ ))
160  # Make sure the target functions have an instance of the common routines
161  target.common = common_api.Common()
162  main = process.mainProcess(target, apikey, )
163  main.grabberInfo = {}
164  main.grabberInfo['enabled'] = True
165  main.grabberInfo['title'] = __title__
166  main.grabberInfo['command'] = 'technology.py'
167  main.grabberInfo['mashup_title'] = __mashup_title__
168  main.grabberInfo['author'] = __author__
169  main.grabberInfo['thumbnail'] = 'technology.png'
170  main.grabberInfo['type'] = ['video', ]
171  main.grabberInfo['desc'] = "Mashups combines media from multiple sources to create a new work"
172  main.grabberInfo['version'] = __version__
173  # Check if there are any Nature items in the DB to to actually search
174  main.grabberInfo['search'] = target.common.checkIfDBItem('dummy', {'feedtitle': __title__, })
175  main.grabberInfo['tree'] = True
176  main.grabberInfo['html'] = False
177  main.grabberInfo['usage'] = __usage_examples__
178  main.grabberInfo['SmaxPage'] = __search_max_page_items__
179  main.grabberInfo['TmaxPage'] = __tree_max_page_items__
180  main.main()
technology.OutStreamEncoder.write
def write(self, obj)
Definition: technology.py:89
technology.OutStreamEncoder.out
out
Definition: technology.py:83
technology.OutStreamEncoder.__init__
def __init__(self, outstream, encoding=None)
Definition: technology.py:82
technology.OutStreamEncoder.encoding
encoding
Definition: technology.py:85
nv_python_libs.mashups.mashups_api
Definition: mashups_api.py:1
technology.OutStreamEncoder.__getattr__
def __getattr__(self, attr)
Definition: technology.py:95
nv_python_libs.mainProcess
Definition: mainProcess.py:1
nv_python_libs.common.common_api
Definition: common_api.py:1
technology.OutStreamEncoder
Definition: technology.py:80