15__title__ =
"traileraddicts_api - XPath and XSLT functions for the TrailerAddicts.com grabber"
16__author__=
"R.D. Vaughan"
18This python script is intended to perform a variety of utility functions
19for the conversion of data to the MNV standard RSS output format.
20See this link for the specifications:
21http://www.mythtv.org/wiki/MythNetvision_Grabber_Script_Format
29__xpathClassList__ = [
'xpathFunctions', ]
33__xsltExtentionList__ = []
35import os, sys, re, time, datetime, shutil,
urllib.request, urllib.parse, urllib.error, string
36from copy
import deepcopy
40 """Wraps a stream with an encoder"""
49 """Wraps the output stream, encoding Unicode strings with the specified encoding"""
50 if isinstance(obj, str):
53 self.
out.buffer.write(obj)
58 """Delegate everything but write to the stream"""
59 return getattr(self.
out, attr)
61if isinstance(sys.stdout, io.TextIOWrapper):
66 from io
import StringIO
67 from lxml
import etree
69 sys.stderr.write(
'\n! Error - Importing the "lxml" and "StringIO" python libraries failed on error(%s)\n' % e)
74 """Functions specific extending XPath
77 self.
functList = [
'traileraddictsLinkGenerationMovie',
'traileraddictsLinkGenerationClip',
'traileraddictsCheckIfDBItem']
89 '''Generate a link for the TrailerAddicts.com site.
90 Call example: 'mnvXpath:traileraddictsLinkGenerationMovie(position(), link)'
93 webURL = args[1].strip()
96 if 'traileraddictsLinkGenerationMovie' in self.
persistence:
97 if args[0] == self.
persistence[
'traileraddictsLinkGenerationMovie'][
'position']:
98 return self.
persistence[
'traileraddictsLinkGenerationMovie'][
'link']
100 self.
persistence[
'traileraddictsLinkGenerationMovie'] = {}
101 self.
persistence[
'traileraddictsLinkGenerationMovie'][
'embedRSS'] = etree.parse(
'http://www.traileraddict.com/embedrss', common.parsers[
'xml'].
copy())
102 self.
persistence[
'traileraddictsLinkGenerationMovie'][
'matchlink'] = etree.XPath(
'//link[string()=$link]/..', namespaces=common.namespaces)
103 self.
persistence[
'traileraddictsLinkGenerationMovie'][
'description'] = etree.XPath(
'normalize-space(description)', namespaces=common.namespaces)
104 self.
persistence[
'traileraddictsLinkGenerationMovie'][
'embedded'] = etree.XPath(
'//embed/@src', namespaces=common.namespaces)
106 self.
persistence[
'traileraddictsLinkGenerationMovie'][
'position'] = args[0]
108 matchLink = self.
persistence[
'traileraddictsLinkGenerationMovie'][
'matchlink'](self.
persistence[
'traileraddictsLinkGenerationMovie'][
'embedRSS'], link=webURL)[0]
109 self.
persistence[
'traileraddictsLinkGenerationMovie'][
'link'] = self.
persistence[
'traileraddictsLinkGenerationMovie'][
'embedded'](common.getHtmlData(
'dummy',(self.
persistence[
'traileraddictsLinkGenerationMovie'][
'description'](matchLink))))[0]
111 return self.
persistence[
'traileraddictsLinkGenerationMovie'][
'link']
116 '''Generate a link for the TrailerAddicts.com site.
117 Call example: 'mnvXpath:traileraddictsLinkGenerationClip(position(), link)'
120 webURL = args[1].strip()
122 if 'traileraddictsLinkGenerationClip' in self.
persistence:
123 if args[0] == self.
persistence[
'traileraddictsLinkGenerationClip'][
'position']:
124 return self.
persistence[
'traileraddictsLinkGenerationClip'][
'link']
126 self.
persistence[
'traileraddictsLinkGenerationClip'] = {}
127 self.
persistence[
'traileraddictsLinkGenerationClip'][
'embedded'] = etree.XPath(
'//embed[@allowfullscreen="true"]/@src', namespaces=common.namespaces)
129 self.
persistence[
'traileraddictsLinkGenerationClip'][
'position'] = args[0]
131 tmpHTML = etree.parse(webURL, etree.HTMLParser())
132 self.
persistence[
'traileraddictsLinkGenerationClip'][
'link'] = self.
persistence[
'traileraddictsLinkGenerationClip'][
'embedded'](tmpHTML)[0]
133 return self.
persistence[
'traileraddictsLinkGenerationClip'][
'link']
137 '''Use a unique key value pairing to find out if the 'internetcontentarticles' table already
138 has a matching item. This is done to save accessing the Internet when
not required.
139 Call example:
'mnvXpath:traileraddictsCheckIfDBItem(.)'
140 return True if a match was found
141 return False if a match was
not found
143 return common.checkIfDBItem(
'dummy', {
'feedtitle':
'Movie Trailers',
'title': arg[0],
'author': arg[1],
'description': arg[2]})
def __getattr__(self, attr)
def __init__(self, outstream, encoding=None)
def traileraddictsLinkGenerationMovie(self, context, *args)
Start of XPath extension functions.
def traileraddictsLinkGenerationClip(self, context, *args)
def traileraddictsCheckIfDBItem(self, context, *arg)
MBASE_PUBLIC long long copy(QFile &dst, QFile &src, uint block_size=0)
Copies src file to dst file.