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