【问题标题】:Google DFA API - List Placement/Campaign IDs - Apps ScriptGoogle DFA API - 列出展示位置/广告系列 ID - Apps 脚本
【发布时间】:2023-03-10 08:21:01
【问题描述】:

详情:

大家好,

我的 Google 表格文件的应用脚本有两个函数。这些是使用 DoubleClick Campaign Manager v3.3 的 DFA API 参考创建的。

错误:

一个用于列表广告系列 ID,另一个用于展示位置 ID。 我的问题是,9/10 他们不工作 - 抛出 JSON Parse 错误:

SyntaxError: Expected end of stream at char 2292(数字可能不同)。

尝试过:

我想我已经做了我需要做的一切。我参考了 API 文档来构建它。并使用与我的其他工作功能相同的逻辑来处理和执行但相同的错误。

API 在资源 > 高级 Google 服务下的脚本编辑器中启用。并且使用最新版本 - v3.3 作为 v3.2 现在已弃用。

我似乎遇到的问题是当我调用campaignInfo/placementInfo 的变量时。尽管使用变量“search”和“searchString”指定了我要搜索的内容,但我似乎获得了超过 1000 个条目,当我尝试将其解析为 JSON 到变量“data”时,它在那里崩溃了。此外,似乎没有任何条目与我的查询相关。

对于“campaignInfo”,我提供了具体的广告系列名称。我也尝试过指定“advertiserId”,但同样的问题。

对于“placementInfo”,我提供了展示位置的“种类”、“campaignId”和“名称”。我也尝试过指定“advertiserId”,但同样的问题。

我正在使用示例表中的预设值来测试这两者,但目前还没有。 如果有人能告诉我哪里出错了,我将不胜感激。

脚本:

广告系列 ID 代码:- 注意:这在几个月前还有效,现在不行。我没有对其进行任何更改。

function listCampaignIDs() { //and placement end dates
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet15');
  var profileID = _fetchProfileId();

  var campaignNames = sheet.getRange(2, 2, ss.getRange("B1").getDataRegion().getLastRow()).getValues();
  var campaignArray = campaignNames.map(function(r) {
    return [r]
  });
  Logger.log(campaignNames.length)

  try {
    for (i = 2; i <= campaignNames.length; i++) {
      if (sheet.getRange(i, 6).isBlank()) {
        var search = {
          "name": sheet.getRange(i, 2).getValue().toString()
        }
        Logger.log(search);
        var campaignInfo = DoubleClickCampaigns.Campaigns.list(profileID, search).campaigns;
        var data = JSON.parse(campaignInfo);
        //Logger.log(data);
        var campaignID = data["id"];
        var campaignEndDate = data["endDate"];
        var campaignStartDate = data["startDate"];
        sheet.getRange(i, 6).setValue(campaignID);
        sheet.getRange(i, 5).setValue(campaignEndDate);
        sheet.getRange(i, 4).setValue(campaignStartDate);
      }
    }
  } catch (e) {
    Logger.log("Error is: %s", e);
    //SpreadsheetApp.getUi().alert(e);
  }
}

Placement IDs 代码:- 注意:这从来没有工作过......虽然遵循与我在工作时对广告系列版本所做的类似步骤。

function listPlacementIDs() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet15');
  var profileID = _fetchProfileId();

  var campaignIDs = sheet.getRange(2, 1, ss.getRange("A1").getDataRegion().getLastRow()).getValues();
  var campaignIdsArray = campaignIDs.map(function(r) {
    return [r]
  });
  Logger.log(campaignIDs.length)

  var placementNames = sheet.getRange(2, 2, ss.getRange("B1").getDataRegion().getLastRow()).getValues();
  var placementNamesArray = placementNames.map(function(r) {
    return [r]
  });
  Logger.log(placementNames.length)

  try {
    for (i = 2; i <= campaignIDs.length; i++) {
      var campaignId = sheet.getRange(i, 1).getValue().toString()
      Logger.log(campaignId)
      var name = sheet.getRange(i, 2).getValue().toString()
      Logger.log(name)
      if (sheet.getRange(i, 3).isBlank()) {
        var searchString = {
          "kind": "dfareporting#placement",
          "campaignId": campaignId,
          "name": name
        }
        Logger.log(searchString);
        var placementInfo = DoubleClickCampaigns.Placements.list(profileID, searchString).placements;
        Logger.log(placementInfo)
        var data = JSON.parse(placementInfo);
        Logger.log(data);
        var placementId = data["id"];
        sheet.getRange(i, 3).setValue(placementId);
      }
    }
  } catch (e) {
    Logger.log("Error is: %s", e);
    SpreadsheetApp.getUi().alert(e);
  }
}

感谢您抽出宝贵时间,各位。我愿意接受任何可能有助于/改进以下内容的建议。

谢谢, 拉吉夫·艾哈迈德

日志导致错误因此被删除。

非常感谢@Jescanellas 提供了我解决问题所需的新视角。

更新代码 - 活动:

function listCampaignIDs() { //and placement end dates
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Campaigns');
  var profileID = _fetchProfileId();

  var campaignNames = sheet.getRange(2, 2, ss.getRange("B1").getDataRegion().getLastRow()).getValues();
  var campaignArray = campaignNames.map(function(r) {
    return [r]
  });

  try {
    for (i = 2; i <= campaignNames.length; i++) {
      if (sheet.getRange(i, 6).isBlank()) {
        var search = {
          "searchString": sheet.getRange(i, 2).getValue().toString(),
          "advertiserId": sheet.getRange(i, 1).getValue().toString()
        }
        var campaignInfo = DoubleClickCampaigns.Campaigns.list(profileID, search).campaigns;
        Logger.log(campaignInfo);
        var data = JSON.parse(campaignInfo);
        Logger.log(data);
        var campaignID = data["id"];
        var campaignEndDate = data["endDate"];
        var campaignStartDate = data["startDate"];
        sheet.getRange(i, 6).setValue(campaignID);
        sheet.getRange(i, 5).setValue(campaignEndDate);
        sheet.getRange(i, 4).setValue(campaignStartDate);
      }
    }
  } catch (e) {
    Logger.log("Error is: %s", e);
    //SpreadsheetApp.getUi().alert(e);
  }
}

更新代码 - 展示位置:

function listPlacementIds() { //and placement end dates
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet15');
  var profileID = _fetchProfileId();

  var campaignIDs = sheet.getRange(2, 1, ss.getRange("A1").getDataRegion().getLastRow()).getValues();
  var campaignIdsArray = campaignIDs.map(function(r) {
    return [r]
  });

  var placementNames = sheet.getRange(2, 2, ss.getRange("B1").getDataRegion().getLastRow()).getValues();
  var placementNamesArray = placementNames.map(function(r) {
    return [r]
  });

  try {
    for (i = 2; i <= campaignIDs.length; i++) {
      var campaignId = sheet.getRange(i, 1).getValue().toString()
      var name = sheet.getRange(i, 2).getValue().toString()
      if (sheet.getRange(i, 3).isBlank()) {
        var search = {
          "kind": "dfareporting#placement",
          "campaignId": campaignId,
          "searchString": name
        }
        var placementInfo = DoubleClickCampaigns.Placements.list(profileID, search).placements;
        Logger.log(placementInfo)
        var data = JSON.parse(placementInfo);
        Logger.log(data);
        var placementId = data["id"];
        sheet.getRange(i, 3).setValue(placementId);
      }
    }
  } catch (e) {
    Logger.log("Error is: %s", e);
    SpreadsheetApp.getUi().alert(e);
  }
}

【问题讨论】:

  • 你能从here 做列表,看看它是否返回错误?另外,你能分享一下 JSON 的内容吗?
  • 嗨@Jescanellas,当我使用“试试这个API”功能时它确实有效。但是在我的脚本上 - 上面附加的日志文件。当我对展示位置列表使用“试用此 API”功能时也是如此。在上面登录。
  • 啊!我想到了。我用“searchString”引用交换了搜索变量中的“name”引用。它奏效了。更新了上面的代码。感谢您的帮助,@Jescanellas - 在网站上测试 API 对我有帮助。非常感激。上面附加了新代码。
  • 很高兴您解决了这个问题:D。您可以接受自己的答案,以便其他看到此内容的人有用。

标签: google-apps-script google-sheets google-api double-click-advertising dfareporting


【解决方案1】:

非常感谢@Jescanellas 提供了我解决问题所需的新视角。

更新代码 - 活动:

function listCampaignIDs() { //and placement end dates
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Campaigns');
  var profileID = _fetchProfileId();

  var campaignNames = sheet.getRange(2, 2, ss.getRange("B1").getDataRegion().getLastRow()).getValues();
  var campaignArray = campaignNames.map(function(r) {
    return [r]
  });

  try {
    for (i = 2; i <= campaignNames.length; i++) {
      if (sheet.getRange(i, 6).isBlank()) {
        var search = {
          "searchString": sheet.getRange(i, 2).getValue().toString(),
          "advertiserId": sheet.getRange(i, 1).getValue().toString()
        }
        var campaignInfo = DoubleClickCampaigns.Campaigns.list(profileID, search).campaigns;
        Logger.log(campaignInfo);
        var data = JSON.parse(campaignInfo);
        Logger.log(data);
        var campaignID = data["id"];
        var campaignEndDate = data["endDate"];
        var campaignStartDate = data["startDate"];
        sheet.getRange(i, 6).setValue(campaignID);
        sheet.getRange(i, 5).setValue(campaignEndDate);
        sheet.getRange(i, 4).setValue(campaignStartDate);
      }
    }
  } catch (e) {
    Logger.log("Error is: %s", e);
    //SpreadsheetApp.getUi().alert(e);
  }
}

更新代码 - 展示位置:

function listPlacementIds() { //and placement end dates
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet15');
  var profileID = _fetchProfileId();

  var campaignIDs = sheet.getRange(2, 1, ss.getRange("A1").getDataRegion().getLastRow()).getValues();
  var campaignIdsArray = campaignIDs.map(function(r) {
    return [r]
  });

  var placementNames = sheet.getRange(2, 2, ss.getRange("B1").getDataRegion().getLastRow()).getValues();
  var placementNamesArray = placementNames.map(function(r) {
    return [r]
  });

  try {
    for (i = 2; i <= campaignIDs.length; i++) {
      var campaignId = sheet.getRange(i, 1).getValue().toString()
      var name = sheet.getRange(i, 2).getValue().toString()
      if (sheet.getRange(i, 3).isBlank()) {
        var search = {
          "kind": "dfareporting#placement",
          "campaignId": campaignId,
          "searchString": name
        }
        var placementInfo = DoubleClickCampaigns.Placements.list(profileID, search).placements;
        Logger.log(placementInfo)
        var data = JSON.parse(placementInfo);
        Logger.log(data);
        var placementId = data["id"];
        sheet.getRange(i, 3).setValue(placementId);
      }
    }
  } catch (e) {
    Logger.log("Error is: %s", e);
    SpreadsheetApp.getUi().alert(e);
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多