tweeper.php: move loading the stylesheet into the Tweeper class
authorAntonio Ospite <ao2@ao2.it>
Fri, 27 Feb 2015 15:54:57 +0000 (16:54 +0100)
committerAntonio Ospite <ao2@ao2.it>
Fri, 27 Feb 2015 15:54:57 +0000 (16:54 +0100)
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.

tweeper.php

index 0c2bdbf..17fff8b 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * tweeper - a Twitter to RSS web scraper
  *
- * Copyright (C) 2013-2014  Antonio Ospite <ao2@ao2.it>
+ * Copyright (C) 2013-2015  Antonio Ospite <ao2@ao2.it>
  *
  * 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']);