http_scheme_url = rawurlencode( 'http://' . $url_host_path ); $this->https_scheme_url = rawurlencode( 'https://' . $url_host_path ); $this->url = rawurlencode( $url ); $this->timeout = $timeout; $this->apikey = trim( $apikey ); } /** * Collect shares for facebook and twitter (Twitter not supported any longer) * @global array $mashsb_options * @return array */ public function getFBTWCounts() { global $mashsb_options; isset( $mashsb_options['facebook_count_mode'] ) ? $fb_mode = $mashsb_options['facebook_count_mode'] : $fb_mode = ''; $sharecounts = $this->get_sharedcount(); if( !$sharecounts ) { $this->sharecount = new stdClass; $this->sharecount->total = 0; return $this->sharecount; } $counts = array('shares' => array(), 'total' => 0); switch ( $fb_mode ) { case $fb_mode === 'likes': $counts['shares']['fb'] = isset($sharecounts['Facebook']['like_count']) ? $sharecounts['Facebook']['like_count'] : 0; $counts['shares']['fb_https'] = isset($sharecounts['https']['Facebook']['like_count']) ? $sharecounts['https']['Facebook']['like_count'] : 0; break; case $fb_mode === 'total': $counts['shares']['fb'] = isset($sharecounts['Facebook']['total_count']) ? $sharecounts['Facebook']['total_count'] : 0; $counts['shares']['fb_https'] = isset($sharecounts['https']['Facebook']['total_count']) ? $sharecounts['https']['Facebook']['total_count'] : 0; break; default: $counts['shares']['fb'] = isset($sharecounts['Facebook']['share_count']) ? $sharecounts['Facebook']['share_count'] : 0; $counts['shares']['fb_https'] = isset($sharecounts['https']['Facebook']['share_count']) ? $sharecounts['https']['Facebook']['share_count'] : 0; } $counts['shares']['tw'] = isset($sharecounts['Twitter']) ? $sharecounts['Twitter'] : 0; foreach ( $counts['shares'] as $mashsbcounts => $sharecount ) { $counts['total'] += ( int ) $sharecount; } mashdebug()->error( "sharedcount.com getFBTWCounts: " . $counts['total'] ); $totalArr = array('total' => $counts['total']); $objMerged = ( object ) array_merge( ( array ) $sharecounts, ( array ) $totalArr ); return $objMerged; } /* Only used when mashshare-networks is enabled */ function getAllCounts() { global $mashsb_options; isset( $mashsb_options['facebook_count_mode'] ) ? $fb_mode = $mashsb_options['facebook_count_mode'] : $fb_mode = ''; $sharecounts = $this->get_sharedcount(); if( !$sharecounts ) { $this->sharecount = new stdClass; $this->sharecount->total = 0; return $this->sharecount; } $counts = array('shares' => array(), 'total' => 0); switch ( $fb_mode ) { case $fb_mode === 'likes': $counts['shares']['fb'] = isset($sharecounts['Facebook']['like_count']) ? $sharecounts['Facebook']['like_count'] : 0; $counts['shares']['fb_https'] = isset($sharecounts['https']['Facebook']['like_count']) ? $sharecounts['https']['Facebook']['like_count'] : 0; break; case $fb_mode === 'total': $counts['shares']['fb'] = isset($sharecounts['Facebook']['total_count']) ? $sharecounts['Facebook']['total_count'] : 0; $counts['shares']['fb_https'] = isset($sharecounts['https']['Facebook']['total_count']) ? $sharecounts['https']['Facebook']['total_count'] : 0; break; default: $counts['shares']['fb'] = isset($sharecounts['Facebook']['share_count']) ? $sharecounts['Facebook']['share_count'] : 0; $counts['shares']['fb_https'] = isset($sharecounts['https']['Facebook']['share_count']) ? $sharecounts['https']['Facebook']['share_count'] : ''; } isset( $sharecounts['Twitter'] ) ? $counts['shares']['tw'] = $sharecounts['Twitter'] : $counts['shares']['tw'] = 0; isset( $sharecounts['LinkedIn'] ) ? $counts['shares']['li'] = $sharecounts['LinkedIn'] : $counts['shares']['li'] = 0; isset( $sharecounts['Pinterest'] ) ? $counts['shares']['pin'] = $sharecounts['Pinterest'] : $counts['shares']['pin'] = 0; isset( $sharecounts['https']['Pinterest'] ) ? $counts['shares']['pin_https'] = $sharecounts['https']['Pinterest'] : $counts['shares']['pin_https'] = 0; $total = 0; foreach ( $counts['shares'] as $totalcount ) { $total += ( int ) $totalcount; } $totalArr = array('total' => $total); $objMerged = ( object ) array_merge( ( array ) $sharecounts, ( array ) $totalArr ); mashdebug()->info( "sharedcount.com getAllCounts: " . $counts['total'] ); return $objMerged; } /** * @param $url * @return mixed */ private function _curl( $url ) { $curl = curl_init(); curl_setopt( $curl, CURLOPT_URL, $url ); curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $curl, CURLOPT_CONNECTTIMEOUT, 5 ); curl_setopt( $curl, CURLOPT_TIMEOUT, 5 ); //timeout in seconds $curl_results = curl_exec( $curl ); curl_close( $curl ); return json_decode( $curl_results, true ); } /** * Get share count from sharedcount.com API * @global array $mashsb_options * @return mixed array | int */ function get_sharedcount() { global $mashsb_options; if( empty( $this->apikey ) ) { return 0; //quit early if there's no API key. } try { $counts = array(); $httpsShares = array(); if( isset( $mashsb_options['cumulate_http_https'] ) ) { $counts = $this->_curl( 'https://api.sharedcount.com/v1.0/?url=' . $this->http_scheme_url . "&apikey=" . $this->apikey ); $httpsShares = $this->_curl( 'https://api.sharedcount.com/v1.0/?url=' . $this->https_scheme_url . "&apikey=" . $this->apikey ); } else { $counts = $this->_curl( 'https://api.sharedcount.com/v1.0/?url=' . $this->url . "&apikey=" . $this->apikey ); } if( isset( $counts["Error"] ) && isset( $counts['Domain'] ) && $counts["Type"] === "domain_apikey_mismatch" ) { return 0; } else if( isset( $counts["Error"] ) && isset( $counts['Type'] ) && $counts['Type'] === 'invalid_api_key' ) { return 0; } $tweets = $this->getTwitterShares(); $counts = is_array( $counts ) ? array_merge( $counts, array('Twitter' => $tweets) ) : array('Twitter' => $tweets); $counts['https'] = $httpsShares; return $counts; } catch ( Exception $e ) { mashdebug()->error( "error: " . $e ); MASHSB()->logger->info( 'ERROR: Curl()' . $e ); return 0; } mashdebug()->error( "error2: " . $counts ); MASHSB()->logger->info( 'ERROR 2: Curl()' . $counts ); return 0; } /** * Get twitter tweet count if social network add-on is installed * @return int */ private function getTwitterShares() { if( class_exists( 'mashnetTwitter' ) ) { $twitter = new mashnetTwitter( $this->url ); $tweets = $twitter->getTwitterShares(); return empty( $tweets ) ? 0 : $tweets; } return 0; } } ?>