X-Git-Url: https://git.ao2.it/tweeper.git/blobdiff_plain/07a6e0c19e175603bde51f800b0b484a327c515c..50842e9d4c8ba313313710d0b4472548390cd77b:/tweeper.php?ds=sidebyside diff --git a/tweeper.php b/tweeper.php index e1483f1..17fff8b 100644 --- a/tweeper.php +++ b/tweeper.php @@ -1,19 +1,19 @@ - * + * + * Copyright (C) 2013-2015 Antonio Ospite + * * This program 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 3 of the License, or * (at your option) any later version. - * + * * This program 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, see . */ @@ -24,16 +24,8 @@ class Tweeper { private static $USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20130405 Firefox/22.0"; - public function __construct($stylesheet, $generate_enclosure = FALSE) { - $stylesheet_contents = $this->get_contents($stylesheet); - - $xslDoc = new DOMDocument(); - $xslDoc->loadXML($stylesheet_contents); - - $this->xsltProcessor = new XSLTProcessor(); - $this->xsltProcessor->registerPHPFunctions(); - $this->xsltProcessor->setParameter('', 'generateEnclosure', $generate_enclosure); - $this->xsltProcessor->importStylesheet($xslDoc); + public function __construct($generate_enclosure = FALSE) { + $this->generate_enclosure = $generate_enclosure; } public static function epoch_to_gmdate($timestamp) @@ -91,6 +83,7 @@ class Tweeper { "audio/aac", "audio/mp4", "audio/mpeg", + "audio/ogg", "audio/vorbis", "audio/wav", "audio/webm", @@ -151,8 +144,39 @@ class Tweeper { error_log($output); } - public function tweep($uri) { - $html = Tweeper::get_contents($uri); + private function load_stylesheet($host) { + $stylesheet = "file://" . __DIR__ . "/rss_converter_" . $host . ".xsl"; + if (FALSE === file_exists($stylesheet)) { + trigger_error("Conversion to RSS not supported: $host", E_USER_ERROR); + return NULL; + } + + $stylesheet_contents = $this->get_contents($stylesheet); + + $xslDoc = new DOMDocument(); + $xslDoc->loadXML($stylesheet_contents); + + $xsltProcessor = new XSLTProcessor(); + $xsltProcessor->registerPHPFunctions(); + $xsltProcessor->setParameter('', 'generateEnclosure', $this->generate_enclosure); + $xsltProcessor->importStylesheet($xslDoc); + + return $xsltProcessor; + } + + public function tweep($src_url) { + $url = parse_url($src_url); + if (FALSE === $url || empty($url["host"])) { + trigger_error("Invalid url: $src_url", E_USER_ERROR); + return NULL; + } + + $xsltProcessor = $this->load_stylesheet($url["host"]); + if (NULL === $xsltProcessor) { + return NULL; + } + + $html = Tweeper::get_contents($src_url); $xmlDoc = new DOMDocument(); @@ -165,7 +189,7 @@ class Tweeper { libxml_clear_errors(); libxml_use_internal_errors($xml_errors_value); - $output = $this->xsltProcessor->transformToXML($xmlDoc); + $output = $xsltProcessor->transformToXML($xmlDoc); if (FALSE === $output) { trigger_error('XSL transformation failed.', E_USER_ERROR); @@ -205,7 +229,8 @@ function parse_options_cli($argv, $argc) echo usage($argv); exit(0); default: - die(usage($argv)); + fwrite(STDERR, usage($argv)); + exit(1); } } @@ -230,21 +255,18 @@ function parse_options_query_string() } -if (php_sapi_name() != 'cli') +if (php_sapi_name() != 'cli') { $options = parse_options_query_string(); -else + $ERROR_STREAM = fopen('php://output', 'w'); +} else { $options = parse_options_cli($argv, $argc); + $ERROR_STREAM = fopen('php://stderr', 'w'); +} -if (!isset($options['src_url'])) - die(usage($argv)); - -$url = parse_url($options['src_url']); -if (FALSE === $url || empty($url["host"])) - die("Invalid url: ${options['src_url']}\n"); - -$stylesheet = "file://" . __DIR__ . "/rss_converter_" . $url["host"] . ".xsl"; -if (FALSE === file_exists($stylesheet)) - die("Conversion to RSS not supported: {$url["host"]}\n"); +if (!isset($options['src_url'])) { + fwrite($ERROR_STREAM, usage($argv)); + exit(1); +} -$tweeper = new Tweeper($stylesheet, $options['generate_enclosure']); +$tweeper = new Tweeper($options['generate_enclosure']); echo $tweeper->tweep($options['src_url']);