2013年2月26日,星期二

在Google电子表格中存储帐户级别的质量得分

EDIT 2013-04-22:签出此脚本的更新版本,该脚本存储 Account, 运动, and 广告群组 level 质量得分.

EDIT 2013-03-18:我在.orderBy()子句中添加了DESC,以便它将印象从高到低排序。

我在读一篇关于 搜索EngineLand.com 前几天关于存储和 analyzing your 帐户级别的质量得分。

本文的作者提供了一个脚本,但是我认为我可以很容易地提出自己的版本。 在以下脚本中,我使用相同的逻辑来计算帐户一级的质量得分,但是我查看了过去30天内所有具有印象的广告系列和所有关键字。

根据您的帐户大小,这可能是太多数据 在AdWords规定的30分钟内进行分析,但是按展示次数排序应该可以使您获得展示次数最高的50000个关键字(同样,另一个AdWords限制)。

您可以在这里找到我存储数据的电子表格: //docs.google.com/spreadsheet/ccc?key=0Aotb6eheEOpodGNKMW1UWkZKekc5NWxkR3Zra3lzWVE

最好的选择是复制该工作表,擦除我的数据(标题除外),然后将新的电子表格网址复制到脚本中。如果您有多个要运行的帐户,则可以将数据存储在同一电子表格中,但可以为帐户名称添加其他标签。然后更新ACCOUNT_NAME变量,您应该已经准备就绪。

谢谢,
拉斯

/***************************************
* Store Account Level Quality Score in Google Spreadsheet.
* Version 1.1
* ChangeLog v1.1
*  - Changed ACCOUNT_NAME to SHEET_NAME and 更新d the default value.
*  - Removed getSpreadsheet function
*
* Created By: 拉斯 Savage
* Based on script originally found 在: http://goo.gl/rTHbF
* FreeAdWordsScripts.com
*********************************/
function main() {
  var SPREADSHEET_URL = "Your Spreadsheet Url Goes Here";
  var SHEET_NAME = 'Sheet1';
  var today = new Date();
  var date_str = [today.getFullYear(),(today.getMonth() + 1),today.getDate()].join("-");
  
  var 电子表格 = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
  var s_sheet = 电子表格.getSheetByName(SHEET_NAME);
  
  var kw_iter = AdWordsApp.keywords()
    .withCondition("Status = ENABLED")
    .forDateRange("LAST_30_DAYS")
    .withCondition("Impressions > 0")
    .orderBy("Impressions DESC")
    .withLimit(50000)
    .get();

  var tot_imps_weighted_qs = 0;
  var tot_imps = 0;
  
  while(kw_iter.hasNext()) {
    var kw = kw_iter.next();
    var kw_stats = kw.getStatsFor("LAST_30_DAYS");
    var imps = kw_stats.getImpressions();
    var s = kw.getQualityScore();
    tot_imps_weighted_qs += (qs * imps);
    tot_imps += imps;
  }
    
  var acct_qs = tot_imps_weighted_qs / tot_imps;
  
  s_sheet.appendRow([date_str,acct_qs]);
}

20条评论:

  1. I've尝试过此操作,并收到以下错误:

    TypeError:无法调用方法"appendRow" of null. (line 38)

    对如何解决此问题有任何见解?

    回复删除
  2. 这意味着由于某种原因您的电子表格'请正确放置。确保从我的电子表格开始,然后创建一个副本。然后将该网址粘贴到脚本中。让我知道是否可以解决您的问题。

    谢谢,
    拉斯

    回复删除
  3. 嗨罗素,

    感谢您及时的回复。

    I'我已仔细检查过,据我所知,我正在使用位于我帐户的Google云端硬盘中的已复制Google文档的网址'm working on.

    I've尝试删除了"#gid=0"从URL末尾开始't work either.

    I'我们尝试了一个新的G文档,仅删除了您的数据(不包括标题),然后将该URL和帐户名一起放入了脚本中。

    错误结果相同。

    还有其他想法吗?感谢您一直以来的帮助。

    问候

    uan

    回复删除
  4. 您可以在gmail dot com上与russellsavage共享电子表格,以便我看看吗?工作表的名称是电子表格Account1中的吗?

    回复删除
  5. 嗨罗素,

    刚刚与您分享;一世'已将电子表格名称更改为"Account1"并再次尝试,但结果仍然相同。

    问候

    uan

    回复删除
    回覆
    1. 嗯,我'我不确定是什么问题。自从您与我共享该文档以来,我就可以从此页面复制确切的脚本,粘贴电子表格的URL,然后将数据毫无问题地放入其中。这是我的变量在顶部的样子:

      var SPREADSHEET_URL = "//docs.google.com/spreadsheet/ccc?key=0Ajj1WA1LFvf1dFhBbE9hNWg2ZWg4MDdWcE1jVXQ1dFE"; //your 电子表格 url
      var ACCOUNT_NAME ='Account1';

      删除
  6. 嗨罗素,

    设法使其工作。我从GDrive帐户中清除了所有旧脚本+电子表格,然后从头开始。这是我第三次'd再次尝试,这真的是魅力!

    感谢您的帮助和指导。这是我第一次使用adwords脚本,但是您的网站已经开始使大脑齿轮起作用;-)

    问候

    uan

    回复删除
    回覆
    1. I'我很高兴它终于成功了!如果您对新脚本有任何建议,请随时告诉我。

      谢谢,
      拉斯

      删除
  7. 嗨,Russell,我很快就开始使用您的脚本,但是我一直遇到相同的错误-TypeError:无法调用方法"appendRow" of null. (line 38)

    关于如何解决此问题的任何想法。

    布伦丹

    回复删除
    回覆
    1. 您好Brendan,Euan也遇到了这个问题。他最终解决此问题的方法是从重新获得原始电子表格和脚本的新副本开始。当您打开上方指向我的电子表格的链接时,请确保转到"File > Make a 复制..."然后将副本的网址复制到脚本中。

      让我知道您在那之后是否还有问题,感谢您的阅读。

      〜俄罗斯

      删除
  8. 我们如何在同一个工作表的另一个标签中存储高级别印象kws而不是帐户级别?

    回复删除
    回覆
    1. 您好,Marco,调整上面的脚本以适合您的用例非常简单。这是我制作的可以复制的示例电子表格:

      //docs.google.com/spreadsheet/ccc?key=0Aotb6eheEOpodFZOU2F4V3cxVDl2bTNKVDZtOFhmQnc

      接下来,您需要对上面的脚本进行一些更改:
      1.创建qs_sheet之后,您需要立即为另一个工作表创建一个变量,以存储带有展示次数的关键字。在var s_score之后添加此代码,这将清除工作表并添加列标题。

      var kw_sheet =电子表格.getSheetByName("Account1 关键词s");
      kw_sheet.clear();
      kw_sheet.appendRow(['Campaign','AdGroup','Keyword','MatchType','Imps']);

      2.接下来,更新您的关键字迭代循环以将关键字附加到工作表:
      kw_sheet.appendRow([kw.getCampaign()。getName(),kw.getAdGroup()。getName(),kw.getText(),kw.getMatchType(),imps]);

      3.如果您想花哨并且只存储前50个关键字,则可以添加关键字计数器,然后将第2条中的语句包装在if语句中(不要'别忘了在循环外部声明tot_kws并将其设置为0):

      如果(tot_kws<= 50) {
      kw_sheet.appendRow([kw.getCampaign()。getName(),kw.getAdGroup()。getName(),kw.getText(),kw.getMatchType(),imps]);
      }
      tot_kws ++;

      删除
    2. Marco,还有一件事情,如果您想在帐户级别存储其他数据,您所需要做的就是在上述循环中的关键字while中收集数据。

      在第25行,我声明var tot_imps = 0;如果您想在帐户一级添加其他指标,则可以在其下添加以下行,例如var tot_clicks = 0;或var tot_cost = 0;

      接下来,在第30行之后,我从kw_stats对象提取印象,您可以这样说:

      tot_clicks + = kw_stats.getClicks();
      tot_cost + = kw_stats.getCost();

      最后,您要将这些值存储在电子表格中。因此,将第38行更新为:

      s_sheet.appendRow([date_str,acct_qs,tot_clicks,tot_cost]);

      希望有帮助。如果您还有其他问题,请告诉我。

      谢谢,
      拉斯

      删除
    3. 关于js代码,我是一个门外汉。

      您可以在存储帐户级别的统计信息中发布如下信息吗?

      最高每次点击费用
      点击展示。
      点击率
      平均每次点击费用
      质量得分
      美东时间。首页出价
      平均位置
      转换(每次点击1次)
      每次转化费用(每次点击1次)
      转换费率(每次点击1次)
      成本
      总转换值
      转换价值/成本

      删除
  9. 我们如何将数据发送到adwords登录电子邮件之外的单独的Google文档帐户?

    回复删除
  10. I've尝试过此操作,并收到以下错误:

    TypeError:超过最大执行时间

    对如何解决此问题有任何见解?

    回复删除
    回覆
    1. 嗨,cafeemarketing,如果您尝试预览脚本时遇到此错误,则不是问题。无论如何,预览功能都会在30秒后停止脚本。只需尝试运行该脚本,它将最多运行30分钟。

      谢谢,
      拉斯

      删除
    2. 有效。

      谢谢!

      删除