diff --git a/README.md b/README.md index 7ed74d81..d44f8490 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,6 @@ Supported sites/pages (examples) * `DuckDuckGo`: Most recent results from [DuckDuckGo.com](https://duckduckgo.com/) * `Facebook` : Returns the latest posts on a page or profile on [Facebook](https://facebook.com/) * `FlickrExplore` : [Latest interesting images](http://www.flickr.com/explore) from Flickr -* `GooglePlus` : Most recent posts of user timeline * `GoogleSearch` : Most recent results from Google Search * `Identi.ca` : Identica user timeline (Should be compatible with other Pump.io instances) * `Instagram`: Most recent photos from an Instagram user diff --git a/bridges/GooglePlusPostBridge.php b/bridges/GooglePlusPostBridge.php deleted file mode 100644 index 7911eaf4..00000000 --- a/bridges/GooglePlusPostBridge.php +++ /dev/null @@ -1,208 +0,0 @@ - array( - 'name' => 'username or Id', - 'required' => true - ), - 'include_media' => array( - 'name' => 'Include media', - 'type' => 'checkbox', - 'title' => 'Enable to include media in the feed content' - ) - )); - - public function getIcon() { - return 'https://ssl.gstatic.com/images/branding/product/ico/google_plus_alldp.ico'; - } - - public function collectData(){ - - $username = $this->getInput('username'); - - // Usernames start with a + if it's not an ID - if(!is_numeric($username) && substr($username, 0, 1) !== '+') { - $username = '+' . $username; - } - - $html = getSimpleHTMLDOM(static::URI . '/' . urlencode($username) . '/posts') - or returnServerError('No results for this query.'); - - $html = defaultLinkTo($html, static::URI); - - $this->title = $html->find('meta[property=og:title]', 0)->getAttribute('content'); - $this->url = $html->find('meta[property=og:url]', 0)->getAttribute('content'); - - foreach($html->find('div[jsname=WsjYwc]') as $post) { - - $item = array(); - - $item['author'] = $post->find('div div div div a', 0)->innertext; - $item['uri'] = $post->find('div div div a', 1)->href; - - $timestamp = $post->find('a.qXj2He span', 0); - - if($timestamp) { - $item['timestamp'] = strtotime('+' . preg_replace( - '/[^0-9A-Za-z]/', - '', - $timestamp->getAttribute('aria-label'))); - } - - $message = $post->find('div[jsname=EjRJtf]', 0); - - // Empty messages are not supported right now - if(!$message) { - continue; - } - - $item['content'] = '
'
-			. $item['author']
-			. '
' - . trim(strip_tags($message, '

')) - . '
'; - - // Make title at least 50 characters long, but don't add '...' if it is shorter! - if(strlen($message->plaintext) > 50) { - $end = strpos($message->plaintext, ' ', 50) ?: strlen($message->plaintext); - } else { - $end = strlen($message->plaintext); - } - - if(strlen(substr($message->plaintext, 0, $end)) === strlen($message->plaintext)) { - $item['title'] = $message->plaintext; - } else { - $item['title'] = substr($message->plaintext, 0, $end) . '...'; - } - - $media = $post->find('[jsname="MTOxpb"]', 0); - - if($media) { - - $item['enclosures'] = array(); - - foreach($media->find('img') as $img) { - $item['enclosures'][] = $this->fixImage($img)->src; - } - - if($this->getInput('include_media') === true && count($item['enclosures'] > 0)) { - $item['content'] .= '
'; - } - - } - - // Add custom parameters (only useful for JSON or Plaintext) - $item['fullname'] = $item['author']; - $item['avatar'] = $post->find('div img', 0)->src; - $item['id'] = $post->find('div div div', 0)->getAttribute('id'); - $item['content_simple'] = $message->plaintext; - - $this->items[] = $item; - - } - - } - - public function getName(){ - return $this->title ?: 'Google Plus Post Bridge'; - } - - 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); - - } - - $img->src = $this->build_url($urlparts); - 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]); - - } -} diff --git a/index.php b/index.php index 819b5a52..771e3379 100644 --- a/index.php +++ b/index.php @@ -37,7 +37,6 @@ $whitelist_default = array( 'DuckDuckGoBridge', 'FacebookBridge', 'FlickrBridge', - 'GooglePlusPostBridge', 'GoogleSearchBridge', 'IdenticaBridge', 'InstagramBridge',