From: Antonio Ospite Date: Fri, 27 Feb 2015 15:54:57 +0000 (+0100) Subject: tweeper.php: move loading the stylesheet into the Tweeper class X-Git-Tag: v0.4~37 X-Git-Url: https://git.ao2.it/tweeper.git/commitdiff_plain/50842e9d4c8ba313313710d0b4472548390cd77b tweeper.php: move loading the stylesheet into the Tweeper class Let the Tweeper class load the stylesheet, specifically when the tweep() method is called. This way the same Tweeper object can be reused to convert different URLs from different websites. --- diff --git a/tweeper.php b/tweeper.php index 0c2bdbf..17fff8b 100644 --- a/tweeper.php +++ b/tweeper.php @@ -2,7 +2,7 @@ /* * tweeper - a Twitter to RSS web scraper * - * Copyright (C) 2013-2014 Antonio Ospite + * 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 @@ -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) @@ -152,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(); @@ -166,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); @@ -245,17 +268,5 @@ if (!isset($options['src_url'])) { exit(1); } -$url = parse_url($options['src_url']); -if (FALSE === $url || empty($url["host"])) { - fwrite($ERROR_STREAM, "Invalid url: ${options['src_url']}\n"); - exit(1); -} - -$stylesheet = "file://" . __DIR__ . "/rss_converter_" . $url["host"] . ".xsl"; -if (FALSE === file_exists($stylesheet)) { - fwrite($ERROR_STREAM, "Conversion to RSS not supported: {$url["host"]}\n"); - exit(1); -} - -$tweeper = new Tweeper($stylesheet, $options['generate_enclosure']); +$tweeper = new Tweeper($options['generate_enclosure']); echo $tweeper->tweep($options['src_url']);