From 6525c19868a0511abaaac9d2ba452ba640899209 Mon Sep 17 00:00:00 2001
From: Antonio Ospite
Date: Sun, 2 Jan 2022 22:44:39 +0100
Subject: [PATCH] src/Tweeper.php: fix rendering Instagram images in some feed
readers
Instagram.com is using Cross Origin Resource Policy and this prevents
images in RSS items from being displayed in the Web view of some feed
readers like Liferea.
Add a function to generate Data URLs with base64 payloads and use that
for instagram images a s a workaround to fix rendering images in some
feed readers.
---
src/Tweeper.php | 28 ++++++++++++++++++++++++++++
src/rss_converter_instagram.com.xsl | 3 ++-
2 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/src/Tweeper.php b/src/Tweeper.php
index f79bb08..2d3870f 100644
--- a/src/Tweeper.php
+++ b/src/Tweeper.php
@@ -234,6 +234,34 @@ class Tweeper {
}
/**
+ * Generate a data URL.
+ */
+ public static function generateDataURL($url) {
+ $supported_content_types = [
+ "image/gif",
+ "image/jpeg",
+ "image/png",
+ ];
+
+ $url_info = Tweeper::getUrlInfo($url);
+ if (FALSE === $url_info) {
+ trigger_error("Failed to retrieve info for URL: " . $url, E_USER_WARNING);
+ return '';
+ }
+
+ $supported = in_array($url_info['content_type'], $supported_content_types);
+ if (!$supported) {
+ trigger_error("Unsupported data URL type \"" . $url_info['content_type'] . "\" for URL: " . $url_info['url'], E_USER_WARNING);
+ return '';
+ }
+
+ $base64Data = base64_encode(file_get_contents($url));
+ $dataURL = 'data: ' . $url_info['content_type'] . ';base64,' . $base64Data;
+
+ return $dataURL;
+ }
+
+ /**
* Mimic the message from libxml.c::php_libxml_ctx_error_level()
*/
private static function logXmlError($error) {
diff --git a/src/rss_converter_instagram.com.xsl b/src/rss_converter_instagram.com.xsl
index 855ce0b..71b60a7 100644
--- a/src/rss_converter_instagram.com.xsl
+++ b/src/rss_converter_instagram.com.xsl
@@ -66,6 +66,7 @@
+
-
@@ -108,7 +109,7 @@
-
+
]]>
--
2.1.4