使用Google Apps脚本将最新日期(从API)分配到标识符(在电子表格中)

时间:2017-07-05 14:02:55

标签: javascript json google-sheets google-apps

我有一个Google表格电子表格,其中包含第一列中的标识符列表(例如COLTS或RAMS)。然后使用Google Apps脚本我从API获取这些标识符的事务数据(每个标识符有多个事务)。该数据如下所示:

{
"sportsfolio_transactions":[
    {
"trans_date":"06/26/2017 9:58:00 AM",
"amount":-10.30,
"trans_type_id":1,
"trans_type_name":"Buy",
"stock_id":"COLTS",
"shares":3
    },
{
"trans_date":"04/25/2017 2:58:00 AM",
"amount":-3.22,
"trans_type_id":1,
"trans_type_name":"Buy",
"stock_id":"COLTS",
"shares":1
}

{
"trans_date":"05/20/2017 2:58:00 AM",
"amount":-30.22,
"trans_type_id":1,
"trans_type_name":"Buy",
"stock_id":"RAMS",
"shares":9
}]}

我到目前为止的代码过滤了买入交易,看起来像这样:

var response = UrlFetchApp.fetch(url, options);

var json = response.getContentText();
var data = JSON.parse(json);

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('apidata'); active spreadsheet
var output = [];

  data["sportsfolio_transactions"].forEach(function(elem,i) {

  output.push([elem["stock_id"],elem["shares"],elem["trans_type_name"],elem["trans_date"],elem["amount"]]);

});

var outputbuy = [];

data["sportsfolio_transactions"].forEach(function(element,i) {
if(element["trans_type_name"] == "Buy") {

 outputbuy.push([element["stock_id"],element["shares"],element["trans_type_name"],element["trans_date"],element["amount"]]);

}
});

现在我想将最新交易的日期放在每个标识符旁边。 例如。根据以上数据,COLTS旁边的日期应为06/26/2017

经过几个小时的尝试(math.max,排序等),我没有想法,希望你能在这里帮助我。哦,如果你看到发布的代码有任何可能的改进,当然也非常感谢。

1 个答案:

答案 0 :(得分:0)

管理以解决问题,等等。只能查看“买入”交易,无法获得“买入”|| “卖”才能正常工作。

此外,这段代码似乎效率低下,但它是我能够制作的最好的代码。关于如何提高效率的任何想法?

以下是代码:

function getLastTrade() {

var url= 'https://asmwebdev1.azurewebsites.net/api/get_sportsfolio_transactions/'

var today = new Date()
var enddate = Utilities.formatDate(today,"GMT", "MM/dd/YYYY");

var formData = {
  'email': 'xxxxx',
  'password': 'x',
  'sportsfolio_key': '9657',
  'start_date': '01/01/2017',
  'end_date': enddate,
};

var options = {
  'method' : 'post',
  'payload' : formData
 };

var response = UrlFetchApp.fetch(url, options);

var json = response.getContentText();

var data = JSON.parse(json);

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('apidata');

var Avals = ss.getRange("A2:A50").getValues();
var Alast = Avals.filter(String).length;

for(var row=2;row<Alast+2;row++){  

  var oldestdate = new Date(0)

  data["sportsfolio_transactions"].forEach(function(element,i) {

    var lastid = sheet.getRange(row, 1).getValues();  

    if(element["stock_id"] == lastid && element["trans_type_name"] == "Buy"){

      var newestdate = new Date(element["trans_date"])

    if(newestdate>oldestdate) {

   oldestdate = newestdate

   }

   sheet.getRange(row,6).setValue(oldestdate) 

  }

});

}  

}

API返回的数据包含数百个事务,上面的帖子中可以看到一个小样本。