apiClient = new Google_Client(); $this->apiClient->setClientId (AI_ADSENSE_CLIENT_ID); $this->apiClient->setClientSecret (AI_ADSENSE_CLIENT_SECRET); $this->apiClient->setRedirectUri ('urn:ietf:wg:oauth:2.0:oob'); $this->adSenseService = new Google_Service_AdSense ($this->apiClient); } public function getAuthUrl () { $this->apiClient = new Google_Client(); $this->apiClient->setClientId (AI_ADSENSE_CLIENT_ID); $this->apiClient->setClientSecret (AI_ADSENSE_CLIENT_SECRET); $this->apiClient->setRedirectUri ('urn:ietf:wg:oauth:2.0:oob'); $this->apiClient->setScopes (array ('https://www.googleapis.com/auth/adsense')); $this->apiClient->setAccessType ('offline'); return ($this->apiClient->createAuthUrl ()); } /** * Check if a token for the user is already in the db, otherwise perform * authentication. */ public function authenticate() { $token = $this->getToken(); if (isset ($token)) { // We already have the token. $this->apiClient->setAccessToken ($token); } else { // Override the scope to use the readonly one $this->apiClient->setScopes (array("https://www.googleapis.com/auth/adsense.readonly")); // Go get the token $this->apiClient->authenticate (AI_ADSENSE_AUTHORIZATION_CODE); $this->saveToken ($this->apiClient->getAccessToken()); } } /** * Return the AdsenseService instance (to be used to retrieve data). * @return apiAdsenseService the authenticated apiAdsenseService instance */ public function getAdSenseService () { return $this->adSenseService; } public function getAdSensePublisherID () { return $this->publisherID; } public function getError () { return $this->error; } public function isTokenValid () { $token = $this->getToken(); return isset ($token); } /** * During the request, the access code might have been changed for another. * This function updates the saved token. */ public function refreshToken() { if ($this->apiClient->getAccessToken () != null) { $this->saveToken ($this->apiClient->getAccessToken()); } } public function getAdUnits() { $adsense_table_data = array (); $this->error = ''; try { $this->authenticate(); if ($this->isTokenValid ()) { $adsense_service = $this->getAdSenseService(); $adsense_adsense_accounts = $adsense_service->accounts; $adsense_adsense_adclients = $adsense_service->adclients; $adsense_adsense_adunits = $adsense_service->adunits; try { $adsense_list_accounts = $adsense_adsense_accounts->listAccounts()->getItems(); $this->publisherID = $adsense_list_accounts[0]['id']; try { $adsense_list_adclients = $adsense_adsense_adclients->listAdclients()->getItems(); $adsense_ad_client = NULL; foreach ($adsense_list_adclients as $adsense_list_adclient) { if ($adsense_list_adclient ['productCode'] == 'AFC') { $adsense_ad_client = $adsense_list_adclient ['id']; } } if ($adsense_ad_client) { try { $adsense_adunits = $adsense_adsense_adunits->listAdunits ($adsense_ad_client)->getItems(); foreach ($adsense_adunits as $adsense_adunit) { $adsense_table_data [] = array ( 'id' => $adsense_adunit->getId(), 'name' => $adsense_adunit->getName(), 'code' => $adsense_adunit->getCode(), 'type' => $adsense_adunit->getContentAdsSettings()->getType(), 'size' => preg_replace( '/SIZE_([\d]+)_([\d]+)/', '$1x$2', $adsense_adunit->getContentAdsSettings()->getSize()), 'active' => $adsense_adunit->getStatus() == 'ACTIVE', ); } } catch ( Google_Service_Exception $e ) { $adsense_err = $e->getErrors(); $this->error = 'AdUnits Error: ' . $adsense_err [0]['message']; } } } catch ( Google_Service_Exception $e ) { $adsense_err = $e->getErrors(); $this->error = 'AdClient Error: ' . $adsense_err [0]['message']; } } catch ( Google_Service_Exception $e ) { $adsense_err = $e->getErrors(); $this->error = 'Account Error: ' . $adsense_err [0]['message']; } catch ( Exception $e ) { $this->error = 'Error: ' . strip_tags ($e->getMessage()); } } else { } } catch (Exception $e) { $this->error = 'AdSense Authentication failed: ' . strip_tags ($e->getMessage()); } if ($this->error != '') return array (); return $adsense_table_data; } public function getAdCode ($adUnitId) { $code = ''; $this->error = ''; try { $this->authenticate(); if ($this->isTokenValid ()) { $adsense_service = $this->getAdSenseService(); $adsense_adsense_accounts = $adsense_service->accounts; try { $adsense_list_accounts = $adsense_adsense_accounts->listAccounts()->getItems(); $this->publisherID = $adsense_list_accounts[0]['id']; try { $ad_code = $adsense_service->accounts_adunits->getAdCode ($this->publisherID, 'ca-'.$this->publisherID, $adUnitId); } catch ( Google_Service_Exception $e ) { $adsense_err = $e->getErrors(); $this->error = 'getAdCode Error: ' . $adsense_err [0]['message']; } } catch ( Google_Service_Exception $e ) { $adsense_err = $e->getErrors(); $this->error = 'Account Error: ' . $adsense_err [0]['message']; } catch ( Exception $e ) { $this->error = 'Error: ' . strip_tags ($e->getMessage()); } if (isset ($ad_code->adCode)) { $code = $ad_code->adCode; } } else { } } catch (Exception $e) { $this->error = 'AdSense Authentication failed: ' . strip_tags ($e->getMessage()); } if ($this->error != '') return ''; return $code; } private function saveToken ($token) { if ($token != null) set_transient (AI_TRANSIENT_ADSENSE_TOKEN, $token); } private function getToken () { $token = get_transient (AI_TRANSIENT_ADSENSE_TOKEN); if ($token === false) return null; else return $token; } }