Scripting - Handleiding (AdWords)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

AdWords-scripts schrijf je in JavaScript, via de AdWords-interface. Het is object-georiënteerd.

AdGroup-object

Handle

Er zijn verschillende manieren om een handle (?) te krijgen naar een AdGroup-object.

Direct op AdWordsApp-niveau

Je kunt direct vanaf het AdWordsApp-objct naar elk niveau navigeren, dus ook naar de AdGroups. In dit voorbeeld wordt de tussenstap van selector naar iterator overgeslagen:

//////////////////////////////
// Print names of all AdGroups
//////////////////////////////
//
var adGroupIterator = AdWordsApp.adGroups().get();
while (adGroupIterator.hasNext())
{
   var adGroup = adGroupIterator.next();
   Logger.log("   " +adGroup.getName()+adGroup.);
}

Getrapt

Of getrapt, dus door de objecthierarchie van en AdWordsApp-object te doorlopen:

///////////////////////////////////////////////
// Get campaignIterator (skip campaignSelector)
///////////////////////////////////////////////
//
var campaignIterator = AdWordsApp
.campaigns()
.withCondition("Name CONTAINS '_'")
.withCondition("Status = ENABLED")
.orderBy("Name ASC")
.get();

///////////////////////////////////////////////
// Iterate through campaigns + print names
///////////////////////////////////////////////
//
while (campaignIterator.hasNext())
{
  var campaign = campaignIterator.next();
  Logger.log(campaign.getName());
    
  // Descend to its AdGroups
  //////////////////////////
  //
  var adGroupIterator = campaign.adGroups().get();
    
  // Print AdGroup-names
  //////////////////////
  //
  while (adGroupIterator.hasNext())
  {
         var adGroup = adGroupIterator.next();
         Logger.log("   " +adGroup.getName());
  }
}

Expliciet

In dit geval wordt in één statement de hierarchie genavigeerd, waarbij tussenliggende stappen expliciet worden benoemd. Hierbij wordt uiteindelijk maar een deel van de betreffende objecten geselecteerd. Op zich een tricky manier om de object-hierarchie te navigeren, omdat je weinig controle hebt over welk object je uit een collectie selecteert:

Logger.log(AdWordsApp.campaigns().get().next().adGroups().get().next().getName());

Eigenschappen & methodes

Als ik me goed herinner, kennen object-georiënteerde talen eigenschappen (properties) en methodes (methods). Methodes kun je zien als de ingebouwde functies van zo'n object. Een methode van een AdGroup-object zou bv. zijn om de status te veranderen. Een eigenschap van een AdGroup-object zou z'n titel kunnen zijn. Hier is een overzicht van alle methodes.

Ik heb het gevoel dat het onderscheid tussen methodes en eigenschappen non-existent is: Dat je enkel toegang kunt krijgen tot eigenschappen via bijbehorende methodes. Op zich niet vreemd: Voorbeeld van encapsulation.

Sommige methodes bieden toegang tot specifieke velden. De bidding-methode biedt bv. toegang tot de bieding-gerelateerde velden. Andere methodes bieden toegang tot selectors voor onderliggende objecten, zoals de ads-selector.

Voorbeelden van eigenschap-achtige methodes:

while (adGroupIterator.hasNext())
{
   var adGroup = adGroupIterator.next();
   Logger.log(adGroup.getCampaign());
   Logger.log(adGroup.getName());
   Logger.log(adGroup.isEnabled()); 

}

CampaignSelector

De CampaignSelector haalt campagnes op.

In dit voorbeeld wordt onderscheid gemaakt tussen een CampaignSelector en een CampaignIterator. Vaak is dat onderscheid wat overkill. Documentatie, inclusief een uitgebreid beschrijving van .withCondition: https://developers.google.com/adwords/scripts/docs/reference/adwordsapp/adwordsapp_campaignselector

/////////////////////////////////////////////////////////////////////////
// Select specific campaigns
/////////////////////////////////////////////////////////////////////////
//
// The CampaignSelector only selects campaigns that are active + contain an underscore in their name
//
function SelectCampaigns()
{
  Logger.log("function SelectCampaigns()...");
  var CampaignSelector = AdWordsApp
  .campaigns()
  .withCondition("Name CONTAINS '_'")
  .withCondition("Status = ENABLED")
  .orderBy("Name ASC");

   // return CampaignSelector;
  
  var CampaignIterator=CampaignSelector.get();
  while (CampaignIterator.hasNext())
  {
    var Campaign = CampaignIterator.next();
    Logger.log(Campaign.getName());
  }
  
}  

if-then

/////////////////////////////////////////////////////////////////////////
// If-then-test
/////////////////////////////////////////////////////////////////////////
//
function ifThenTest()
{
  if (1<2 && 2<3)
  {
    Logger.log("1<2 && 2<3");
  }
}

keyword-object

* keyword.bidding()          - Toegang tot bidding-velden
* keyword.bidding().getCpc() - Actuele maximale CPC
* keyword.getFirstPageCpc()  - Geschatte first-page-bid
* keyword.getText()          - Titel
* keyword.getTopOfPageCpc()  - Geschatte top-of-page-bid

Er lijkt geen object te zijn om de geschatte first-position-bid te achterhalen [1]

Traverse AdWords Object Hierarcy

/////////////////////////////////////////////////////////////////////////
// traverse AdWords Hierarchy
/////////////////////////////////////////////////////////////////////////
//
// * Can I traverse through the hierarchy of an AdWordsApp? 
// * Print the name of the campaign + names of its AdGroups
//
function traverseAdWordsHierarchy()
{
  // Get campaignIterator (skip campaignSelector)
  ///////////////////////////////////////////////
  //
  var campaignIterator = AdWordsApp
  .campaigns()
  .withCondition("Name CONTAINS '_'")
  .withCondition("Status = ENABLED")
  .orderBy("Name ASC")
  .get();

  // Iterate through campaigns + print names
  //////////////////////////////////////////
  //
  while (campaignIterator.hasNext())
  {
    var campaign = campaignIterator.next();
    Logger.log(campaign.getName());
    
    // Descend to its AdGroups
    //////////////////////////
    //
    var adGroupIterator = campaign.adGroups().get();
    
    // Print AdGroup-names
    //////////////////////
    //
    while (adGroupIterator.hasNext())
    {
           var adGroup = adGroupIterator.next();
           Logger.log("   " +adGroup.getName());
    }
  }
}  

Bronnen