显示带有标签的帖子 s3. 显示所有帖子
显示带有标签的帖子 s3. 显示所有帖子

2013年5月3日,星期五

使用脚本将AdWords数据放入Amazon S3

我不确定您的身份,但是编写所有这些脚本会使我陷入Google Spreadsheet重载的境地。随着访问任何AdWords报告功能的发布,数据很快开始变得难以处理。一旦事情超过了数千行,我就更喜欢使用Excel或在数据库中存储和处理数据。

因此,我在寻找其他方法来从脚本世界中的AdWords报告中获取数据,因此我想到了 亚马逊S3。亚马逊通过其亚马逊网络服务提供了RESTful API,使您可以从云中存储和检索大量数据。我认为我可以使用它们存储帐户/广告系列/关键字性能的一些CSV文件,以便以后通过其他脚本或软件进行下载或处理。

下面的脚本尝试封装构建和授权适当的S3放置请求所需的所有逻辑。我遵循找到的文档 这里.

要免费开始使用,请注册 亚马逊S3在这里 并在此处找到您的访问权限和密钥:


接下来,创建一个新的S3存储桶以通过AWS控制台保存所有数据。填写以下详细信息,然后尝试测试文件。理想情况下,您可以将其与其他AdWords之一结合使用 报告 剧本 在这里找到开始将您的数据存储在云中。

注意:这是一组非常特定的功能,代表将文件放入Amazon S3所需的最低限度信息。有关更多信息,请查看完整的 亚马逊S3文件.

Thanks,
拉斯

//-----------------------------------
// Put Data To 亚马逊S3
// Created By: 拉斯 Savage
// FreeAdWordsScripts.com
//-----------------------------------
var ACCESS_KEY = 'YOUR_ACCESS_KEY_HERE';
var SECRET_KEY = 'YOUR_SECRET_KEY_HERE';
var S3_BUCKET = 'YOUR_S3_BUCKET_NAME_HERE';
  

function main() {
  var date_str = Utilities.formatDate(new Date(),AdWordsApp.currentAccount().getTimeZone(),'yyyy-MM-dd');
  var file_name = 'adwords_keyword_perf_'+date_str+'.csv';
  putDataToBucket(S3_BUCKET,'/'+file_name,'this is where the data from an AdWords report would go.');
}


function putDataToBucket(bucket,file_path,data) {
  var auth_options = {  
    method : 'PUT',
    base_url : "http://" + bucket + ".s3.amazonaws.com",
    s3_bucket : bucket,
    path : file_path,
    headers : { 
       "Date" : getDate(),
       "Content-Type" : "application/x-www-form-urlencoded"
    },
  };
  
  var auth_string = generateAuthString(auth_options);
  auth_options.headers["Authorization"] = auth_string;
  
  var options = {
    method : auth_options.method,
    headers : auth_options.headers,
    payload : data
  };
  
  return (UrlFetchApp.fetch(auth_options.base_url+auth_options.path, options).getResponseCode() == 200);
}

//Generates an AWS Auth String
//For more info, see the AWS docs - http://goo.gl/m5nCe
function generateAuthString(url) {
  var string_to_sign =  getStringToSign(url);
  Logger.log(string_to_sign);
  var signature = getSignature(SECRET_KEY,string_to_sign);
  return "AWS" + " " + ACCESS_KEY + ":" + signature;
}

//Generates an AWS Signature
//For more info, see the AWS docs - http://goo.gl/m5nCe
function getSignature(SECRET_KEY,string_to_sign) {
  return  Utilities.base64Encode(
    Utilities.computeHmacSignature(
      Utilities.MacAlgorithm.HMAC_SHA_1,
      string_to_sign,
      SECRET_KEY,
      Utilities.Charset.UTF_8
    )
  );
}

//Generates an AWS string to sign
//For more info, see the AWS docs - http://goo.gl/m5nCe
function getStringToSign(url,params) {
  var method = url.method;
  var date = url.headers.Date;
  
  return method + "\n" + "\n" + 
    url.headers['Content-Type'] + "\n" +
    date + "\n" + 
    getCanonicalizedAmzHeaders(url);
}

//Generates the Canonicalized Amazon Headers (not really)
//For more info, see the AWS docs - http://goo.gl/m5nCe
function getCanonicalizedAmzHeaders(url) {
  var ret_val = "/" + url.s3_bucket;
  ret_val += url.path;
  return ret_val;
}

function getDate() {
  return Utilities.formatDate(new Date(),"GMT", "EEE, dd MMM yyyy HH:mm:ss +0000");
}