MythTV master
mtv.py
Go to the documentation of this file.
1#!/usr/bin/env python3
2# -*- coding: UTF-8 -*-
3# ----------------------
4# Name: mtv.py
5# Python Script
6# Author: R.D. Vaughan
7# Purpose:
8# This python script is intended to perform MTV video lookups for the MythTV Netvision plugin
9# based on information found on the http://www.mtv.com/ website. It
10# follows the MythTV Netvision grabber standards.
11# This script uses the python module mtv_api.py which should be included
12# with this script.
13# The mtv.py module uses the full access API published by
14# http://www.mtv.com/ see: http://developer.mtvnservices.com/docs
15#
16# Command example:
17# See help (-u and -h) options
18#
19# Design:
20# 1) Import the specific target site API library.
21# 2) Set the title for the scrips and the API optional key for the target video site
22# 3) Call the common processing routine
23#
24#
25# License:Creative Commons GNU GPL v2
26# (http://creativecommons.org/licenses/GPL/2.0/)
27#-------------------------------------
28__title__ ="MTV";
29__author__="R.D. Vaughan"
30__version__="0.23"
31# 0.1.0 Initial development
32# 0.1.1 Added Tree View processing
33# 0.1.2 Documentation review
34# 0.2.0 Public release
35# 0.2.1 Improve error message display when there is an abort condition
36# 0.22 Change to support xml version information display
37# 0.23 Added the "command" tag to the xml version information display
38
39__usage_examples__ ='''
40(Option Help)
41> ./mtv.py -h
42Usage: ./mtv.py -hduvlST [parameters] <search text>
43Version: v0.2.0 Author: R.D.Vaughan
44
45For details on the MythTV Netvision plugin see the wiki page at:
46http://www.mythtv.org/wiki/MythNetvision
47
48Options:
49 -h, --help show this help message and exit
50 -d, --debug Show debugging info (URLs, raw XML ... etc, info
51 varies per grabber)
52 -u, --usage Display examples for executing the script
53 -v, --version Display grabber name and supported options
54 -l LANGUAGE, --language=LANGUAGE
55 Select data that matches the specified language fall
56 back to English if nothing found (e.g. 'es' EspaƱol,
57 'de' Deutsch ... etc). Not all sites or grabbers
58 support this option.
59 -p PAGE NUMBER, --pagenumber=PAGE NUMBER
60 Display specific page of the search results. Default
61 is page 1. Page number is ignored with the Tree View
62 option (-T).
63 -S, --search Search for videos
64 -T, --treeview Display a Tree View of a sites videos
65
66
67(Search MTV for videos matching search words)
68> ./mtv.py -S "Sleeping" -p 2
69<?xml version="1.0" encoding="UTF-8"?>
70<rss version="2.0"
71xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
72xmlns:content="http://purl.org/rss/1.0/modules/content/"
73xmlns:cnettv="http://cnettv.com/mrss/"
74xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
75xmlns:media="http://search.yahoo.com/mrss/"
76xmlns:atom="http://www.w3.org/2005/Atom"
77xmlns:amp="http://www.adobe.com/amp/1.0"
78xmlns:dc="http://purl.org/dc/elements/1.1/">
79 <channel>
80 <title>MTV</title>
81 <link>http://www.mtv.com</link>
82 <description>Visit MTV (Music Television) for TV shows, music videos, celebrity photos, news.</description>
83 <numresults>41</numresults>
84 <returned>20</returned>
85 <startindex>40</startindex>
86 <item>
87 <title>While You Were Sleeping</title>
88 <author>Elvis Perkins</author>
89 <pubDate>Tue, 20 Feb 2007 00:00:00 GMT</pubDate>
90 <description>Elvis Perkins - While You Were Sleeping - XL Recordings</description>
91 <link>http://media.mtvnservices.com/mgid:uma:video:api.mtvnservices.com:170754</link>
92 <media:group>
93 <media:thumbnail url='http://www.mtv.com/shared/promoimages/bands/p/perkins_elvis/while_you_were_sleeping/281x211.jpg'/>
94 <media:content url='http://media.mtvnservices.com/mgid:uma:video:api.mtvnservices.com:170754' duration='229' width='' height='' lang=''/>
95 </media:group>
96 <rating></rating>
97 </item>
98...
99 <item>
100 <title>She is Love</title>
101 <author>Parachute</author>
102 <pubDate>Mon, 16 Mar 2009 00:00:00 GMT</pubDate>
103 <description>Parachute - She is Love - Mercury</description>
104 <link>http://media.mtvnservices.com/mgid:uma:video:api.mtvnservices.com:353524</link>
105 <media:group>
106 <media:thumbnail url='http://www.mtv.com/shared/promoimages/bands/p/parachute/she_is_love/281x211.jpg'/>
107 <media:content url='http://media.mtvnservices.com/mgid:uma:video:api.mtvnservices.com:353524' duration='226.76' width='' height='' lang=''/>
108 </media:group>
109 <rating></rating>
110 </item>
111 </channel>
112</rss>
113
114
115(Option Tree view)
116> ./mtv.py -T
117<?xml version="1.0" encoding="UTF-8"?>
118<rss version="2.0"
119xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
120xmlns:content="http://purl.org/rss/1.0/modules/content/"
121xmlns:cnettv="http://cnettv.com/mrss/"
122xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
123xmlns:media="http://search.yahoo.com/mrss/"
124xmlns:atom="http://www.w3.org/2005/Atom"
125xmlns:amp="http://www.adobe.com/amp/1.0"
126xmlns:dc="http://purl.org/dc/elements/1.1/">
127 <channel>
128 <title>MTV</title>
129 <link>http://www.mtv.com</link>
130 <description>Visit MTV (Music Television) for TV shows, music videos, celebrity photos, news.</description>
131 <numresults>5050</numresults>
132 <returned>20</returned>
133 <startindex>20</startindex>
134 <directory name="New over the last 3 months" thumbnail="/usr/local/share/mythtv/mythnetvision/icons/directories/topics/recent.png">
135 <directory name="Rock" thumbnail="/usr/local/share/mythtv/mythnetvision/icons/directories/music_genres/rock.png">
136 <item>
137 <title>Useless</title>
138 <author>Tiny Animals</author>
139 <pubDate>Thu, 17 Dec 2009 00:00:00 GMT</pubDate>
140 <description></description>
141 <link>http://media.mtvnservices.com/mgid:uma:video:api.mtvnservices.com:444694</link>
142 <media:group>
143 <media:thumbnail url='http://www.mtv.com/shared/promoimages/bands/t/tiny_animals/useless/281x211.jpg'/>
144 <media:content url='http://media.mtvnservices.com/mgid:uma:video:api.mtvnservices.com:444694' duration='212.88' width='' height='' lang='en'/>
145 </media:group>
146 <rating></rating>
147 </item>
148...
149 <item>
150 <title>Our Velocity</title>
151 <author>Maximo Park</author>
152 <pubDate>Mon, 02 Apr 2007 00:00:00 GMT</pubDate>
153 <description></description>
154 <link>http://media.mtvnservices.com/mgid:uma:video:api.mtvnservices.com:149873</link>
155 <media:group>
156 <media:thumbnail url='http://www.mtv.com/shared/promoimages/bands/m/maximo_park/our_velocity/281x211.jpg'/>
157 <media:content url='http://media.mtvnservices.com/mgid:uma:video:api.mtvnservices.com:149873' duration='218' width='' height='' lang='en'/>
158 </media:group>
159 <rating></rating>
160 </item>
161 </directory>
162 </directory>
163 </channel>
164</rss>
165'''
166__search_max_page_items__ = 10
167__tree_max_page_items__ = 20
168
169import sys, os
170import io
171
172class OutStreamEncoder(object):
173 """Wraps a stream with an encoder"""
174 def __init__(self, outstream, encoding=None):
175 self.out = outstream
176 if not encoding:
177 self.encoding = sys.getfilesystemencoding()
178 else:
179 self.encoding = encoding
180
181 def write(self, obj):
182 """Wraps the output stream, encoding Unicode strings with the specified encoding"""
183 if isinstance(obj, str):
184 obj = obj.encode(self.encoding)
185 self.out.buffer.write(obj)
186
187 def __getattr__(self, attr):
188 """Delegate everything but write to the stream"""
189 return getattr(self.out, attr)
190
191if isinstance(sys.stdout, io.TextIOWrapper):
192 sys.stdout = OutStreamEncoder(sys.stdout, 'utf8')
193 sys.stderr = OutStreamEncoder(sys.stderr, 'utf8')
194
195
196# Used for debugging
197#import nv_python_libs.mtv.mtv_api as target
198
199# Verify that the tmdb_api modules are installed and accessible
200try:
201 import nv_python_libs.mtv.mtv_api as target
202except Exception as e:
203 sys.stderr.write('''
204The subdirectory "nv_python_libs/mtv" containing the modules mtv_api.py (v0.2.0 or greater),
205They should have been included with the distribution of mtv.py.
206Error(%s)
207''' % e)
208 sys.exit(1)
209
210if target.__version__ < '0.2.0':
211 sys.stderr.write("\n! Error: Your current installed mtv_api.py version is (%s)\nYou must at least have version (0.2.0) or higher.\n" % target.__version__)
212 sys.exit(1)
213
214
215# Verify that the common process modules are installed and accessible
216try:
217 import nv_python_libs.mainProcess as process
218except Exception as e:
219 sys.stderr.write('''
220The python script "nv_python_libs/mainProcess.py" must be present.
221Error(%s)
222''' % e)
223 sys.exit(1)
224
225if process.__version__ < '0.2.0':
226 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__)
227 sys.exit(1)
228
229if __name__ == '__main__':
230 # No api key is required
231 apikey = ""
232 main = process.mainProcess(target, apikey, )
233 main.grabberInfo = {}
234 main.grabberInfo['enabled'] = True
235 main.grabberInfo['title'] = __title__
236 main.grabberInfo['command'] = 'mtv.py'
237 main.grabberInfo['author'] = __author__
238 main.grabberInfo['thumbnail'] = 'mtv.png'
239 main.grabberInfo['type'] = ['video']
240 main.grabberInfo['desc'] = "Visit MTV (Music Television) for TV shows, music videos, celebrity photos, and news."
241 main.grabberInfo['version'] = __version__
242 main.grabberInfo['search'] = True
243 main.grabberInfo['tree'] = True
244 main.grabberInfo['html'] = False
245 main.grabberInfo['usage'] = __usage_examples__
246 main.grabberInfo['SmaxPage'] = __search_max_page_items__
247 main.grabberInfo['TmaxPage'] = __tree_max_page_items__
248 main.main()
def __init__(self, outstream, encoding=None)
Definition: mtv.py:174
def __getattr__(self, attr)
Definition: mtv.py:187
def write(self, obj)
Definition: mtv.py:181