src/rss_converter_twitter.com.xsl: make images more adaptive
[tweeper.git] / src / Tweeper.php
index 73cbe81..f34258d 100644 (file)
@@ -6,7 +6,7 @@ namespace Tweeper;
  * @file
  * Tweeper - a Twitter to RSS web scraper.
  *
  * @file
  * Tweeper - a Twitter to RSS web scraper.
  *
- * Copyright (C) 2013-2015  Antonio Ospite <ao2@ao2.it>
+ * Copyright (C) 2013-2018  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
  *
  * 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
@@ -25,8 +25,6 @@ namespace Tweeper;
 use DOMDocument;
 use XSLTProcessor;
 
 use DOMDocument;
 use XSLTProcessor;
 
-require_once 'Symfony/Component/Serializer/autoload.php';
-
 use Symfony\Component\Serializer\Serializer;
 use Symfony\Component\Serializer\Encoder\XmlEncoder;
 use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
 use Symfony\Component\Serializer\Serializer;
 use Symfony\Component\Serializer\Encoder\XmlEncoder;
 use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
@@ -38,7 +36,7 @@ date_default_timezone_set('UTC');
  */
 class Tweeper {
 
  */
 class Tweeper {
 
-  private static $userAgent = "Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20130405 Firefox/22.0";
+  private static $userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0";
 
   /**
    * Constructor sets up {@link $generate_enclosure}.
 
   /**
    * Constructor sets up {@link $generate_enclosure}.
@@ -251,7 +249,13 @@ class Tweeper {
       return NULL;
     }
 
       return NULL;
     }
 
-    return Tweeper::jsonToXml($matches[1], 'instagram');
+    // The "qe" object contains elements which will result in invalid XML
+    // element names, so remove it.
+    $data = json_decode($matches[1], $assoc = TRUE);
+    unset($data["qe"]);
+    $json = json_encode($data);
+
+    return Tweeper::jsonToXml($json, 'instagram');
   }
 
   /**
   }
 
   /**
@@ -317,21 +321,30 @@ class Tweeper {
   /**
    * Convert the site content to RSS.
    */
   /**
    * Convert the site content to RSS.
    */
-  public function tweep($src_url) {
+  public function tweep($src_url, $host=NULL, $validate_scheme=TRUE) {
     $url = parse_url($src_url);
     $url = parse_url($src_url);
-    if (FALSE === $url || empty($url["host"])) {
+    if (FALSE === $url) {
       trigger_error("Invalid URL: $src_url", E_USER_ERROR);
       return NULL;
     }
 
       trigger_error("Invalid URL: $src_url", E_USER_ERROR);
       return NULL;
     }
 
-    $scheme = $url["scheme"];
-    if (!in_array($scheme, array("http", "https"))) {
-      trigger_error("unsupported scheme: $scheme", E_USER_ERROR);
-      return NULL;
+    if (TRUE === $validate_scheme) {
+      $scheme = $url["scheme"];
+      if (!in_array($scheme, array("http", "https"))) {
+        trigger_error("unsupported scheme: $scheme", E_USER_ERROR);
+        return NULL;
+      }
     }
 
     }
 
-    // Strip the leading www. to be more forgiving on input URLs.
-    $host = preg_replace('/^www\./', '', $url["host"]);
+    // if the host is not given derive it from the URL
+    if (NULL === $host) {
+      if (empty($url["host"])) {
+        trigger_error("Invalid host in URL: $src_url", E_USER_ERROR);
+        return NULL;
+      }
+      // Strip the leading www. to be more forgiving on input URLs.
+      $host = preg_replace('/^www\./', '', $url["host"]);
+    }
 
     $xsltProcessor = $this->loadStylesheet($host);
     if (NULL === $xsltProcessor) {
 
     $xsltProcessor = $this->loadStylesheet($host);
     if (NULL === $xsltProcessor) {