* @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
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;
*/
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}.
return NULL;
}
- return Tweeper::jsonToXml($matches[1], 'instagram');
+ $data = json_decode($matches[1], $assoc = TRUE);
+
+ // The "qe" object contains elements which will result in invalid XML
+ // element names, so remove it.
+ unset($data["qe"]);
+
+ // The "knobs" object contains elements with undefined namespaces, so
+ // remove it to silence an error message.
+ unset($data["knobs"]);
+
+ $json = json_encode($data);
+
+ return Tweeper::jsonToXml($json, 'instagram');
}
/**
/**
* 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);
- if (FALSE === $url || empty($url["host"])) {
+ if (FALSE === $url) {
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) {
}
$output = $xsltProcessor->transformToXML($xmlDoc);
-
if (FALSE === $output) {
trigger_error('XSL transformation failed.', E_USER_ERROR);
return NULL;
}
+
return $output;
}