From: Antonio Ospite Date: Sun, 2 Jan 2022 21:44:39 +0000 (+0100) Subject: src/Tweeper.php: fix rendering Instagram images in some feed readers X-Git-Url: https://git.ao2.it/tweeper.git/commitdiff_plain/6525c19868a0511abaaac9d2ba452ba640899209?hp=75c303bf7c570748a5564de6e266cc40f75b1697 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. --- 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 @@


- + ]]>