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]); + + } + }