php get Extensions item data from adgroup level

58 views
Skip to first unread message

שלומי כהן

unread,
Jun 5, 2017, 1:57:35 AM6/5/17
to AdWords API Forum

 hello i have a php code that i have edit from semples
i need to get all the Extensions from adgroup level , list them and retrive their data

on CallFeedItem i need to get :callPhoneNumber
on SitelinkFeedItem i need to get sitelinkText , sitelinkUrl
on CalloutFeedItem i need to get calloutText



 use Google\AdsApi\AdWords\AdWordsServices;
use Google\AdsApi\AdWords\AdWordsSession;
use Google\AdsApi\AdWords\AdWordsSessionBuilder;
use Google\AdsApi\AdWords\v201702\cm\AdGroupExtensionSettingService;
use Google\AdsApi\Common\OAuth2TokenBuilder;



class GetCampaignsWithAwql {

  const PAGE_LIMIT = 100;

  public static function runExample(AdWordsServices $adWordsServices,
      AdWordsSession $session) {
    $campaignService = $adWordsServices->get($session, AdGroupExtensionSettingService ::class);

$qury = $_GET["adgroup"];
    // Create AWQL query.
    $query = "SELECT AdGroupId, ExtensionType , Extensions  WHERE AdGroupId = '".$qury."' ";
    // Create paging controls.
    $totalNumEntries = 0;
$adgroups = array();
    $offset = 0;
    do {
      $pageQuery = sprintf('%s LIMIT %d,%d', $query, $offset, self::PAGE_LIMIT);
      $page = $campaignService->query($pageQuery);

      // Display results from the query.
      if ($page->getEntries() !== null) {
        $totalNumEntries = $page->getTotalNumEntries();
        foreach ($page->getEntries() as $extension) {
 $arr = array(
 "adgroup_id" => $extension->getAdGroupId() ,
 "extensions" => $extension->getExtensionSetting()->getExtensions(),
 //"sitelinkUrl" => $extension->getSitelinkUrl() ,
 "type" => $extension->getExtensionType() 
 );
 array_push($adgroups,$arr );
 
        }
      }

      // Advance the paging offset.
      $offset += self::PAGE_LIMIT;
    } while ($offset < $totalNumEntries);

      $array_data = json_encode($adgroups,true);
 exit($array_data);
  }

  public static function main() {
    // Generate a refreshable OAuth2 credential for authentication.
    $oAuth2Credential = (new OAuth2TokenBuilder())
        ->fromFile()
        ->build();

    // Construct an API session configured from a properties file and the OAuth2
    // credentials above.
    $session = (new AdWordsSessionBuilder())
        ->fromFile()
        ->withOAuth2Credential($oAuth2Credential)
        ->build();
    self::runExample(new AdWordsServices(), $session);
  }
}

GetCampaignsWithAwql::main();


this is what i get now in json

[{"adgroup_id":1900848642,"extensions":[{"ExtensionFeedItem.Type":"SitelinkFeedItem"},{"ExtensionFeedItem.Type":"SitelinkFeedItem"},{"ExtensionFeedItem.Type":"SitelinkFeedItem"},{"ExtensionFeedItem.Type":"SitelinkFeedItem"}],"type":"SITELINK"},{"adgroup_id":1900848642,"extensions":[{"ExtensionFeedItem.Type":"CallFeedItem"}],"type":"CALL"}]


thanks

Peter Oliquino

unread,
Jun 5, 2017, 5:17:32 AM6/5/17
to AdWords API Forum
Hi,

You will need to iterate the results returned by the AdGroupExtensionSettingService.get and based on the result's ExtensionType, you will need to implement a condition to cast to it to its appropriate ExtensionFeedItem. For example, if the ExtensionType = SITELINK, you will need to create a SitelinkFeedItem class for you to be able to get its attributes. Please let me know if you have any further questions.

Best regards,
Peter
AdWords API Team

שלומי כהן

unread,
Jun 5, 2017, 6:01:46 AM6/5/17
to AdWords API Forum
can you help my edit my php code? i am a newbie on adwords api

בתאריך יום שני, 5 ביוני 2017 בשעה 12:17:32 UTC+3, מאת Peter Oliquino:

Peter Oliquino

unread,
Jun 5, 2017, 11:24:38 PM6/5/17
to AdWords API Forum
Hi,

My apologies as I am not a PHP expert, however, what I can provide you instead is a sample SOAP request and response for your reference :

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Header>
        <ns1:RequestHeader xmlns:ns1="https://adwords.google.com/api/adwords/cm/v201705" soapenv:mustUnderstand="0">
            <ns1:clientCustomerId>YOUR_CUSTOMER_ID</ns1:clientCustomerId>
            <ns1:developerToken>YOUR_DEVELOPER_TOKEN</ns1:developerToken>
            <ns1:userAgent>YOUR_USER_AGENT</ns1:userAgent>
            <ns1:validateOnly>false</ns1:validateOnly>
            <ns1:partialFailure>false</ns1:partialFailure>
        </ns1:RequestHeader>
    </soapenv:Header>
    <soapenv:Body>
        <get xmlns="https://adwords.google.com/api/adwords/cm/v201705">
            <selector>
                <fields>AdGroupId</fields>
                <fields>Extensions</fields>
                <fields>ExtensionType</fields>
                <predicates>
                    <field>AdGroupId</field>
                    <operator>EQUALS</operator>
                    <values>THE_ADGROUP_ID</values>
                </predicates>
                <ordering>
                    <field>AdGroupId</field>
                    <sortOrder>ASCENDING</sortOrder>
                </ordering>
                <paging>
                    <startIndex>0</startIndex>
                    <numberResults>100</numberResults>
                </paging>
            </selector>
        </get>
    </soapenv:Body>
</soapenv:Envelope>
[main] INFO com.google.api.ads.adwords.lib.client.AdWordsServiceClient.soapXmlLogger - SOAP Response:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <ResponseHeader xmlns="https://adwords.google.com/api/adwords/cm/v201705">
            <requestId>THE_REQUEST_ID</requestId>
            <serviceName>AdGroupExtensionSettingService</serviceName>
            <methodName>get</methodName>
            <operations>0</operations>
            <responseTime>300</responseTime>
        </ResponseHeader>
    </soap:Header>
    <soap:Body>
        <getResponse xmlns="https://adwords.google.com/api/adwords/cm/v201705">
            <rval>
                <totalNumEntries>1</totalNumEntries>
                <Page.Type>AdGroupExtensionSettingPage</Page.Type>
                <entries>
                    <adGroupId>THE_ADGROUP_ID</adGroupId>
                    <extensionType>SITELINK</extensionType>
                    <extensionSetting>
                        <extensions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="SitelinkFeedItem">
                            <feedId>THE_FEED_ID</feedId>
                            <feedItemId>THE_FEEDITEM_ID</feedItemId>
                            <status>ENABLED</status>
                            <feedType>SITELINK</feedType>
                            <policyData>
                                <PolicyData.Type>FeedItemPolicyData</PolicyData.Type>
                                <placeholderType>1</placeholderType>
                                <feedMappingId>THE_FEEDMAPPING_ID</feedMappingId>
                                <validationStatus>UNCHECKED</validationStatus>
                                <qualityApprovalStatus>UNKNOWN</qualityApprovalStatus>
                            </policyData>
                            <ExtensionFeedItem.Type>SitelinkFeedItem</ExtensionFeedItem.Type>
                            <sitelinkText>Store Hours</sitelinkText>
                            <sitelinkFinalUrls>
                                <urls>http://www.example.com/storehours</urls>
                            </sitelinkFinalUrls>
                        </extensions>
                    </extensionSetting>
                </entries>
            </rval>
        </getResponse>
    </soap:Body>
</soap:Envelope>

Let me know if this helps.

שלומי כהן

unread,
Jun 6, 2017, 2:41:31 AM6/6/17
to AdWords API Forum

i have mange to make it work if eneyone wont this is the answer

<?php  

namespace Google\AdsApi\Examples\AdWords\v201702\BasicOperations;

require $_SERVER['DOCUMENT_ROOT'].'/adwords/vendor/autoload.php';

use Google\AdsApi\AdWords\AdWordsServices;
use Google\AdsApi\AdWords\AdWordsSession;
use Google\AdsApi\AdWords\AdWordsSessionBuilder;
use Google\AdsApi\AdWords\v201702\cm\AdGroupExtensionSettingService;
use Google\AdsApi\AdWords\v201702\cm\ExtensionSetting;
use Google\AdsApi\AdWords\v201702\cm\ExtensionFeedItem;
use Google\AdsApi\AdWords\v201702\cm\SitelinkFeedItem;
use Google\AdsApi\AdWords\v201702\cm\CallFeedItem;
use Google\AdsApi\AdWords\v201702\cm\CalloutFeedItem;
use Google\AdsApi\AdWords\v201702\cm\UrlList;
use Google\AdsApi\AdWords\v201702\cm\CriterionType;
use Google\AdsApi\AdWords\v201702\cm\OrderBy;
use Google\AdsApi\AdWords\v201702\cm\Paging;
use Google\AdsApi\AdWords\v201702\cm\Predicate;
use Google\AdsApi\AdWords\v201702\cm\PredicateOperator;
use Google\AdsApi\AdWords\v201702\cm\Selector;
use Google\AdsApi\AdWords\v201702\cm\SortOrder;
use Google\AdsApi\Common\OAuth2TokenBuilder;



class GetCampaignsWithAwql {

  const PAGE_LIMIT = 100;

  public static function runExample(AdWordsServices $adWordsServices,AdWordsSession $session) {
 
    $AdGroupExtensionSettingService = $adWordsServices->get($session, AdGroupExtensionSettingService ::class);

$adGroupId = floatval($_GET["adgroup"]);
$selector = new Selector();
    $selector->setFields( ['AdGroupId', 'ExtensionType', 'Extensions' ]);
    $selector->setOrdering([new OrderBy('AdGroupId', SortOrder::ASCENDING)]);
    $selector->setPredicates([
        new Predicate('AdGroupId', PredicateOperator::IN, [$adGroupId]),
        //new Predicate('ExtensionType', PredicateOperator::IN,[ExtensionType::SITELINK])
    ]);
    $selector->setPaging(new Paging(0, self::PAGE_LIMIT));
$page = $AdGroupExtensionSettingService->get($selector);
$extenions_arr = array();
$extenions_type = array();
      // Display results from the query.
      if ($page->getEntries() !== null) {
        $totalNumEntries = $page->getTotalNumEntries();
        foreach ( $page->getEntries() as $extension) {
$extensions = $extension->getExtensionSetting()->getExtensions();
//foreach extention item
foreach ( $extensions as $ex ) { 
switch ( $extension->getExtensionType() ) {
case "SITELINK" :
$urllist = $ex->getSitelinkFinalUrls();
//return print_r( $urllist->getUrls());
$ext_arr = array(
"sitelinkText" => $ex->getSitelinkText() ,
"sitelinkUrl" => $ex->getSitelinkFinalUrls()->getUrls()[0] , 
"type" => $extension->getExtensionType() 
);
break;
case "CALL" :
$ext_arr = array(
"phone" => $ex->getCallPhoneNumber() ,
"type" => $extension->getExtensionType() 
);
break;
case "CALLOUT" :
$ext_arr = array(
"text" => $ex->getCalloutText() 
);
break;
}
array_push( $extenions_type , $ext_arr );
}

        }
$array_data = json_encode($extenions_type,true);
exit($array_data);
      }

  }

  public static function main() {
    // Generate a refreshable OAuth2 credential for authentication.
    $oAuth2Credential = (new OAuth2TokenBuilder())
        ->fromFile()
        ->build();

    // Construct an API session configured from a properties file and the OAuth2
    // credentials above.
    $session = (new AdWordsSessionBuilder())
        ->fromFile()
        ->withOAuth2Credential($oAuth2Credential)
        ->build();
    self::runExample(new AdWordsServices(), $session);
  }
}

GetCampaignsWithAwql::main();


?>


בתאריך יום שני, 5 ביוני 2017 בשעה 08:57:35 UTC+3, מאת שלומי כהן:
Reply all
Reply to author
Forward
0 new messages