From 3c4e12ceba2f95217f9cc0a26966df7b8840d2a7 Mon Sep 17 00:00:00 2001 From: logmanoriginal Date: Tue, 31 Jul 2018 18:18:18 +0200 Subject: [PATCH] [GooglePlusPostBridge] Add images to enclosures Images are collected for each post and added to enclosures. Images or animtions from lh3.googleusercontent.com are specifically handled in order to return the animated version of the gif and the original sized image (this is normally taken care of by JS in the browser). --- bridges/GooglePlusPostBridge.php | 99 +++++++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 1 deletion(-) diff --git a/bridges/GooglePlusPostBridge.php b/bridges/GooglePlusPostBridge.php index 0fccc96a..3e6dc322 100644 --- a/bridges/GooglePlusPostBridge.php +++ b/bridges/GooglePlusPostBridge.php @@ -4,7 +4,7 @@ class GooglePlusPostBridge extends BridgeAbstract{ protected $_title; protected $_url; - const MAINTAINER = 'Grummfy'; + const MAINTAINER = 'Grummfy, logmanoriginal'; const NAME = 'Google Plus Post Bridge'; const URI = 'https://plus.google.com/'; const CACHE_TIMEOUT = 600; //10min @@ -97,6 +97,20 @@ class GooglePlusPostBridge extends BridgeAbstract{ $item['content'] .= '
' . $content . '
'; $item['content'] = trim(strip_tags($item['content'], '

')); + $media = $post->find('[jsname="MTOxpb"]', 0); + + if($media) { + + $item['enclosures'] = array(); + + foreach($media->find('img') as $img) { + + $item['enclosures'][] = $this->fixImage($img)->src; + + } + + } + $this->items[] = $item; } } @@ -108,4 +122,87 @@ class GooglePlusPostBridge extends BridgeAbstract{ public function getURI(){ return $this->_url ?: parent::getURI(); } + + private function fixImage($img) { + + // There are certain images like .gif which link to a static picture and + // get replaced dynamically via JS in the browser. If we want the "real" + // image we need to account for that. + + $urlparts = parse_url($img->src); + + if(array_key_exists('host', $urlparts)) { + + // For some reason some URIs don't contain the scheme, assume https + if(!array_key_exists('scheme', $urlparts)) { + $urlparts['scheme'] = 'https'; + } + + $pathelements = explode('/', $urlparts['path']); + + switch($urlparts['host']) { + + case 'lh3.googleusercontent.com': + + if(pathinfo(end($pathelements), PATHINFO_EXTENSION)) { + + // The second to last element of the path specifies the + // image format. The URL is still valid if we remove it. + unset($pathelements[count($pathelements) - 2]); + + } elseif(strrpos(end($pathelements), '=') !== false) { + + // Some images go throug a proxy. For those images they + // add size information after an equal sign. + // Example: '=w530-h298-n'. Again this can safely be + // removed to get the original image. + $pathelements[count($pathelements) - 1] = substr( + end($pathelements), + 0, + strrpos(end($pathelements), '=') + ); + + } + + break; + + } + + $urlparts['path'] = implode('/', $pathelements); + + } + + echo $img->src . '
'; + + $img->src = $this->build_url($urlparts); + + echo $img->src . '

'; + + return $img; + + } + + /** + * From: https://gist.github.com/Ellrion/f51ba0d40ae1d62eeae44fd1adf7b704 + * slightly adjusted to work with PHP < 7.0 + * @param array $parts + * @return string + */ + private function build_url(array $parts) + { + + $scheme = isset($parts['scheme']) ? ($parts['scheme'] . '://') : ''; + $host = isset($parts['host']) ? $parts['host'] : ''; + $port = isset($parts['port']) ? (':' . $parts['port']) : ''; + $user = isset($parts['user']) ? $parts['user'] : ''; + $pass = isset($parts['pass']) ? (':' . $parts['pass']) : ''; + $pass = ($user || $pass) ? ($pass . '@') : ''; + $path = isset($parts['path']) ? $parts['path'] : ''; + $query = isset($parts['query']) ? ('?' . $parts['query']) : ''; + $fragment = isset($parts['fragment']) ? ('#' . $parts['fragment']) : ''; + + return implode('', [$scheme, $user, $pass, $host, $port, $path, $query, $fragment]); + + } + }