Как получить доступ к списку тегов в контейнере через сторонний javascript? - PullRequest
0 голосов
/ 04 июля 2019

Попытка найти способ перечисления всех тегов в контейнере GTM с помощью JavaScript.Мы стремимся экспортировать все теги для клиента в Google Sheets, чтобы мы могли лучше разобраться в очистке их контейнера (в настоящее время имеется более 500 тегов).

Я успешно захватил контейнериз GTM в Sheets, но по данным нескольких поисков Google, контейнер не имеет свойства для тегов под ним.

var gtmID;
var webPropertyID;
var name;
var triggerType;
var firingTrigger;
var lastEdited;
var clientID = 'CLIENT_ID';
var containerName = 'Customer - WEBSITES';
var workspaceName = 'Default Workspace';
var container;

var scopes=['https://www.googleapis.com/auth/tagmanager.manage.accounts',
      'https://www.googleapis.com/auth/tagmanager.edit.containers',
      'https://www.googleapis.com/auth/tagmanager.delete.containers',
      'https://www.googleapis.com/auth/tagmanager.edit.containerversions',
      'https://www.googleapis.com/auth/tagmanager.manage.users',
      'https://www.googleapis.com/auth/tagmanager.publish'];
var jsonObjectGTM=[];
var jsonObjectTags=[];

function controller() {
  gtmID = 'GTM_ID';
  listContainer(gtmID);
  listTags(jsonObjectGTM);
  recordTags(jsonObjectTags);
}

function checkAuth(immediate) {
  var authorizeCheckPromise = new Promise((resolve) => {
    gapi.auth.authorize(
                                          { client_id: clientID, scope: scopes.join(' '), immediate: immediate}, resolve);
  });
  authorizeCheckPromise
     .then(handleAuthResult)
     .then(loadTagManagerApi)
     .then(runTagManagerTask)
     .catch(() => {
         console.log('you must authorize any access to the api.');
}

//Check if the user has authoriation
function checkAuth() {
  checkAuth(true);
}

//Initiate auth flow in response to user clicking authorize button
function handleAuthclick(event) {
  checkAuth();
  return false;
}

//Handle response from authorization server
function handleAuthResult(authResult) {
  return new Promise((resolce, reject) => {
     var authorizeDiv = document.getElementById('authorize-div');
     if(authResult && !authResult.error) {
        //Hide auth UI, then load client library
        authorizeDiv.style.display = 'none';
        resolve();
     } else {
        //Show auth UI, allowing the user to initiate authorization by clicking authorize button
        authorizeDiv.style.display = 'inline';
        reject();
     }
  });
}

//load Tag Manager API client library
function loadTagManagerApi() {
  return new Promise((resolve, reject) => {
    console.log('Load Tag Manager api');
    gapi.client.load('tagmanager', 'v2', resolve);
  });
}

//Interacts with the tagmanager api v2 to grab the tags
function runTagManagerTask() {
  return new Promise((resolve, reject) => {
    console.log('Grabbing list of tags');
    container = findContainer(gtmID, containerName)
       .catch(handleError);
    resolve();
  }
}

//handles error
function handleError(error) {
  console.log('Error when interacting with GTM API');
  console.log(error);
}

//Wraps an API request in a promise
function reqestPromise(request) {
  return new Promise((resolve, reject) => {
     request.execute((response) => {
       if (response.code) {
          reject(response);
       }
       resolve(response);
     }
  }
}

//Returns the specified container
function findContainer(accountPath, containerName) {
  consle.log('Finding container in account:' + accountPath);
  var request = gapi.client.tagmanager.accounts.containers.list({'parent' : accountPath});

  return requestPromise(request)
    .then((response) => {
       var containers = response.container || [];
       var container = containers.find((container) => container.name === containerName);
       return container ||
          Promise.reject('Unable to find ' + containerName + ' container.');
    });
}

Просто нужно найти способ получить массив / список тегов изконтейнер, как только я схватил его

1 Ответ

0 голосов
/ 08 июля 2019

Спасибо @Eike Pierstorff за рекомендацию для инструмента Симо Ахавы, он немного помог, намного точнее и быстрее, чем любой сценарий.

Однако, что касается сценариев, это был мойрешение:

var name;
var tagType;
var firingTrigger;
var sheet;

var tagList = [];

function controller() {
  tagList = TagManager.Accounts.Containers.Workspaces.Tags.list('accounts/{accountID}/containers/{containerID}/workspaces/{workspaceID}');
  sheet = SpreadsheetApp.getActiveSpreadsheet();

  for (var i = 0;  i < tagList.tag.length; i++) {
    name = tagList.tag[i].name;
    firingTrigger = tagList.tag[i].firingTriggerId;
    tagType = tagList.tag[i].type;

    sheet.appendRow([name, tagType, firingTrigger]);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...