diff options
-rw-r--r-- | abs/extra-testing/mythappletrailers/PKGBUILD | 8 | ||||
-rwxr-xr-x | abs/extra-testing/mythappletrailers/myth_trailers_grabber | 214 |
2 files changed, 218 insertions, 4 deletions
diff --git a/abs/extra-testing/mythappletrailers/PKGBUILD b/abs/extra-testing/mythappletrailers/PKGBUILD index 3fb2819..6541b25 100644 --- a/abs/extra-testing/mythappletrailers/PKGBUILD +++ b/abs/extra-testing/mythappletrailers/PKGBUILD @@ -3,14 +3,14 @@ pkgname=mythappletrailers pkgver=0.04.3 -pkgrel=9 +pkgrel=10 pkgdesc="Unofficial Add-on for MythTV to get Apple.com Movie Trailers." arch=('i686' 'x86_64') license=('GPL2') url="http://www.mythtv.org/wiki/index.php/Myth_Apple_Trailers" depends=('php') install=mythappletrailers.install -source=('http://colt45.chemlab.org/misc_scripts/mythtrailer/0.4/mythappletrailer-0.04.3.tar' +source=('myth_trailers_grabber' 'trailers') build() { @@ -21,7 +21,7 @@ build() { touch $startdir/pkg/home/mythtv/appletrailer.xml chown 1000:1000 $startdir/pkg/home/mythtv/appletrailer.xml chmod 755 trailers - chmod 755 mythtraler/myth* - cp mythtraler/myth_trailers_grabber $startdir/pkg/usr/bin/ + chmod 755 myth_trailers_grabber + cp myth_trailers_grabber $startdir/pkg/usr/bin/ cp trailers $startdir/pkg/etc/cron.daily/ } diff --git a/abs/extra-testing/mythappletrailers/myth_trailers_grabber b/abs/extra-testing/mythappletrailers/myth_trailers_grabber new file mode 100755 index 0000000..1d686aa --- /dev/null +++ b/abs/extra-testing/mythappletrailers/myth_trailers_grabber @@ -0,0 +1,214 @@ +<?php +/** + * Copyright (C) 2007 Ben Leto <undertoe@chemlab.org> + * + * Description: Apple Trailer Grabber for mythtv + * + * Version 0.4.3 + * + * Apple Trailer Grabber is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Apple Trailer Grabber is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Usage: read the INSTALL file + * Setup as a cron script to run as frequently as you want + * + * + */ + +/************************************************************************/ +// CONFIGURATION + +// command to use when streaming content from the internet - cache 50% before displaying and use 32MB of memory +$STREAMING_EXEC_CMD = '/usr/bin/mplayer -fs -zoom -really-quiet -user-agent NSPlayer -cache 16000'; +$APPLE_FEED = 'http://www.apple.com/trailers/home/xml/current.xml'; +/************************************************************************/ +// Shouldn't Need To modify anything beyond here + + +define("PLAYERCMD", $STREAMING_EXEC_CMD); +define("XMLFEED", $APPLE_FEED); + +/************************************************************************/ + +init_main(); + +// Function: returns null | init_main () +// Description: Outputs Apple Trailer XML feed to watchable movie urls in MythTV menu XML format +function init_main() +{ + + print "<mythmenu name=\"TRAILERS\">\n"; + + if(valid_url(XMLFEED)){ + + // Gather Array of Current Movie Trailers + //XML Data + $xml_data = url_to_string(XMLFEED); + //Creating Instance of the Class + $xmlObj = new XmlToArray($xml_data); + $arrayData = $xmlObj->createArray(); + + foreach($arrayData['records']['movieinfo'] as $Row){ + + $MovieTitle = $Row['info'][0]['title']; + $MovieLink = $Row['preview'][0]['large']; + $VideoPlayCMD = PLAYERCMD . ' ' . $MovieLink; + + if(!valid_url($MovieLink)){ + $MovieTitle = $MovieTitle . '*VIDEO ERROR*'; + $VideoPlayCMD = ''; + } + + print "\t<button>\n"; + print "\t\t<type>VIDEO_BROWSER</type>\n"; + $MovieTitle = preg_replace('/ & /', ' & ', $MovieTitle); + print "\t\t<text>$MovieTitle</text>\n"; + print "\t\t<action>EXEC $VideoPlayCMD</action>\n"; + print "\t</button>\n\n"; + + } + }else{ + print "\t<button>\n"; + print "\t\t<type>VIDEO_BROWSER</type>\n"; + print "\t\t<text>Error Grabbing XML Feed</text>\n"; + print "\t\t<action></action>\n"; + print "\t</button>\n\n"; + } + + print "</mythmenu>\n"; + + + +} + + +// Function: returns boolean | valid_url ( var | url to check) +// Description: Checks to see if a url is a valid page +function valid_url($str) +{ + if(@fopen($str, "r")) { + return true; + } else { + return false; + } +} + +// Function: returns string | all elements of XML ( var | url to feed) +// Description: Converts each element in an XML feed to single line string +// Notes: must have 'allow_url_fopen = On' in php.ini +function url_to_string($url){ + $lines = file($url); + foreach ($lines as $line) { + $lineR = trim($line); + } + $lineR = eregi_replace("<" . "large" . "[^>]*>", "<large>", $lineR); //hack for apple goofy xml + return $lineR; +} + +// Class: returns (~) x array | elements of XML ( var | XML in string) +// Description: Converts each element in an XML feed to an Array +class XmlToArray +{ + + var $xml=''; + + /** + * Default Constructor + * @param $xml = xml data + * @return none + */ + + function XmlToArray($xml) + { + $this->xml = $xml; + } + + /** + * _struct_to_array($values, &$i) + * + * This is adds the contents of the return xml into the array for easier processing. + * Recursive, Static + * + * @access private + * @param array $values this is the xml data in an array + * @param int $i this is the current location in the array + * @return Array + */ + + function _struct_to_array($values, &$i) + { + $child = array(); + if (isset($values[$i]['value'])) array_push($child, $values[$i]['value']); + + while ($i++ < count($values)) { + switch ($values[$i]['type']) { + case 'cdata': + array_push($child, $values[$i]['value']); + break; + + case 'complete': + $name = $values[$i]['tag']; + if(!empty($name)){ + $child[$name]= ($values[$i]['value'])?($values[$i]['value']):''; + if(isset($values[$i]['attributes'])) { + $child[$name] = $values[$i]['attributes']; + } + } + break; + + case 'open': + $name = $values[$i]['tag']; + $size = isset($child[$name]) ? sizeof($child[$name]) : 0; + $child[$name][$size] = $this->_struct_to_array($values, $i); + break; + + case 'close': + return $child; + break; + } + } + return $child; + }//_struct_to_array + + /** + * createArray($data) + * + * This is adds the contents of the return xml into the array for easier processing. + * + * @access public + * @param string $data this is the string of the xml data + * @return Array + */ + function createArray() + { + $xml = $this->xml; + $values = array(); + $index = array(); + $array = array(); + $parser = xml_parser_create(); + xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); + xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); + xml_parse_into_struct($parser, $xml, $values, $index); + xml_parser_free($parser); + $i = 0; + $name = $values[$i]['tag']; + $array[$name] = isset($values[$i]['attributes']) ? $values[$i]['attributes'] : ''; + $array[$name] = $this->_struct_to_array($values, $i); + return $array; + } + + +} + +?> |