[ADWORDS] Script Adwords pour ajouter en masse des listes de mots-clés négatifs

Bonjour,
Voici un petit script pour ajouter en masse des listes de mots-clés négatifs.
Préparez sur Google Sheets un fichier ayant une tête suivante :
script_list_mots_clés_négatifs
La colonne 3 doit absolument avoir comme valeurs : EXACT, PHRASE ou BROAD (écrit en majuscule sinon tout sera mis par défaut en PHRASE).

A savoir avant de mettre en place ce script :

  1. C’est un script à mettre au niveau MCC, mais les listes de mots-clés négatifs se trouveront au niveau des comptes (c’est comme ça, Google ne permet pas encore de le faire au niveau MCC, avec des scripts en tout cas)
  2. Il faut mettre à jour le paramètre ID_DES_COMPTES_ICI_SEPARES_PAR_UNE_VIRGULE
  3. Si vous mettez plusieurs ID de comptes ici, les listes seront déployées sur l’ensemble de ces comptes
  4. Il faut mettre à jour le paramètre ID_DU_SPREADSHEET_ICI (exemple 1sjlkou9879JJKJIxxx), c’est l’ID du fichier Google Sheet que vous venez de créer
  5. Google limite à 20 le nombre de listes de mots-clés négatifs/compte et 5000 mots-clés négatifs/liste, à prendre donc en compte quand vous créez votre liste

Ensuite, quand ces listes seront créées, soit il faut écrire un autre script pour les appliquer aux campagnes que vous souhaitez, soit vous le faites à la main.

Si vous avez des questions, n’hésitez pas !

//le prob avec ce script c'est qu'on ne peut pas avoir plus de 20 listes partagées
//et pas plus de 2000 kw par liste
 
 
function main() {
 // Get an account iterator.
  var accountIterator = MccApp.accounts().withIds(['ID_DES_COMPTES_ICI_SEPARES_PAR_UNE_VIRGULE']).get();
  while (accountIterator.hasNext()) {
   // Get the current account.
   var account = accountIterator.next();
 
   // Select the child account.
   MccApp.select(account);
 
 
 
   // Run reports against child account.
   addsharednegativekeywords();
 
 
  }
}
 
function addsharednegativekeywords(){
 
  //get sheets
  var sheet = getSpreadsheet('ID_DU_SPREADSHEET_ICI').getActiveSheet();
  var data = sheet.getDataRange().getValues();
 
  var allneglist = [];
  var allnameneglist = [];
 
  for (var i=1;i<data.length;i++){
    var nameneglist = data[i][0];
    var negkw = data[i][1];
    var matchtype = data[i][2];
    negkw = transformnegkw(negkw, matchtype);
 
 
 
    if (!allneglist[nameneglist]){ 
      allneglist[nameneglist] = [];
      allnameneglist.push(nameneglist);
      allneglist[nameneglist].push(negkw);
 
    } else {
 
      allneglist[nameneglist].push(negkw);
    }
 
 
  }
 
 
  //build negative keywords
 
  for (var index = 0;index<allnameneglist.length;index++){
 
    var nom = allnameneglist[index];
    //Logger.log(nom);
    var tableaunegkw = allneglist[nom];
    //Logger.log(tableaunegkw);
 
    addnegkw(nom, tableaunegkw);
 
  }
 
}
 
 
function addnegkw(nameneglist, arraynegkw){
 
  var arraynegativeKeywordList = [];
 
  //get all negativekeywordlists
  var negativeKeywordListSelector = AdWordsApp.negativeKeywordLists().get();
 
  while (negativeKeywordListSelector.hasNext()) {
    var negativeKeywordList = negativeKeywordListSelector.next();
 
    arraynegativeKeywordList[negativeKeywordList.getName()]= negativeKeywordList.getId();
  }
 
 
  //if this list doesn't exist yet
  if (!arraynegativeKeywordList[nameneglist]){
 
    //create new list
 
    var negativeKeywordListOperation =
        AdWordsApp.newNegativeKeywordListBuilder()
    .withName(nameneglist)
    .build();
    var newnegativeKeywordList = negativeKeywordListOperation.getResult();
 
    if (!newnegativeKeywordList){
      Logger.log("problème de création")
    } else {
 
    newnegativeKeywordList.addNegativeKeywords(arraynegkw);
 
 
    }
 
  } else {
 
    //if it exists
 
    var mynegativeKeywordList = AdWordsApp.negativeKeywordLists().withCondition("Name = '"+nameneglist+"'").get();
    if (mynegativeKeywordList.hasNext()){
      var mynegativeKeywordList2 = mynegativeKeywordList.next();
      mynegativeKeywordList2.addNegativeKeywords(arraynegkw);
    }
 
  }
 
 
}
 
 
function transformnegkw(kw, matchtype){
 
  switch(matchtype) {
      case 'PHRASE':
          kw = '\"'+kw+'\"';
          break;
      case 'EXACT':
          kw = '['+kw+']';
          break;
      case 'BROAD':
          kw = kw;
          break;
      default:
          kw = '\"'+kw+'\"';
  }
 
  return(kw);
 
}
 
 
 
 
function getSpreadsheet(spreadsheetUrl) {
  return SpreadsheetApp.openById(spreadsheetUrl);
}