forked from blallo/rss-bridge
[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).
This commit is contained in:
parent
0d1923c52f
commit
3c4e12ceba
1 changed files with 98 additions and 1 deletions
|
@ -4,7 +4,7 @@ class GooglePlusPostBridge extends BridgeAbstract{
|
||||||
protected $_title;
|
protected $_title;
|
||||||
protected $_url;
|
protected $_url;
|
||||||
|
|
||||||
const MAINTAINER = 'Grummfy';
|
const MAINTAINER = 'Grummfy, logmanoriginal';
|
||||||
const NAME = 'Google Plus Post Bridge';
|
const NAME = 'Google Plus Post Bridge';
|
||||||
const URI = 'https://plus.google.com/';
|
const URI = 'https://plus.google.com/';
|
||||||
const CACHE_TIMEOUT = 600; //10min
|
const CACHE_TIMEOUT = 600; //10min
|
||||||
|
@ -97,6 +97,20 @@ class GooglePlusPostBridge extends BridgeAbstract{
|
||||||
$item['content'] .= '<div style="margin-top: -1.5em">' . $content . '</div>';
|
$item['content'] .= '<div style="margin-top: -1.5em">' . $content . '</div>';
|
||||||
$item['content'] = trim(strip_tags($item['content'], '<a><p><div><img>'));
|
$item['content'] = trim(strip_tags($item['content'], '<a><p><div><img>'));
|
||||||
|
|
||||||
|
$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;
|
$this->items[] = $item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -108,4 +122,87 @@ class GooglePlusPostBridge extends BridgeAbstract{
|
||||||
public function getURI(){
|
public function getURI(){
|
||||||
return $this->_url ?: parent::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 . '<br>';
|
||||||
|
|
||||||
|
$img->src = $this->build_url($urlparts);
|
||||||
|
|
||||||
|
echo $img->src . '<br><br>';
|
||||||
|
|
||||||
|
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]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue