Как мне отформатировать вызов API для публикации в таблицах Google? - PullRequest
2 голосов
/ 21 ноября 2019

Я настроил ниже вызов API для seatgeek, но у меня проблема с структурированием ответа. Я хотел бы взять четыре заголовка в атрибуте "stats", среди нескольких других, и записать его в мою таблицу. Я не могу понять, как правильно извлекать данные, и я верю, что это потому, что я не знаю, как настроить синтаксис для установки заголовков. Ниже приведена документация сиденья ( или вы можете найти здесь - примерно на 1/3 внизу страницы в разделе События ):

{
 "stats": {
  "listing_count": 161,
  "average_price": 97,
  "lowest_price": 62,
  "highest_price": 296
},

Чтобы завершить звонок, я настроил свой кодследующим образом:

function myFunction() {
 var url = 'A1';
 var response = UrlFetchApp.fetch(url);
 var json = response.getContentText();
 var data = JSON.parse(json);
 Logger.log(data);
}

Я следил за видео на YouTube, так что это работает, но оно не структурировано должным образом. Если я проверю регистратор, то это возвращает то, что я предполагаю, в формате xml (ниже)? Это строка данных, и если я прочитаю ее, то, безусловно, «статистика», которую я ищу, будет скрыта посередине.

19-11-21 16:08:32:853 CST] {meta={per_page=1, took=3, total=1, page=1, 
geolocation=null}, in_hand={}, events=[{venue={display_location=Denver, 
CO, country=US, access_method={method=NONE, created_at=2015-11- 
04T17:30:28Z, employee_only=false}, address=1000 Chopper Circle,  
city=Denver, timezone=America/Denver, 
url=https://seatgeek.com/venues/pepsi-center/tickets, capacity=21000, 
extended_address=Denver, CO 80204, score=0.7527942, 
num_upcoming_events=106, name_v2=Pepsi Center, metro_code=751, 
popularity=0, name=Pepsi Center, links=[], location={lon=-105.008, 
lat=39.7487}, id=187, state=CO, postal_code=80204, slug=pepsi-center, 
has_upcoming_events=true}, access_method={method=NONE, created_at=2015- 
11-04T17:30:28Z, employee_only=false}, conditional=false, 
date_tbd=false, description=, created_at=2019-08-12T20:15:53, 
title=Portland Trail Blazers at Denver Nuggets, type=nba, score=0.687, 
short_title=Trail Blazers at Nuggets, visible_until_utc=2019-12- 
13T07:30:00, stats={lowest_sg_base_price_good_deals=13, 
visible_listing_count=718, lowest_price_good_deals=20, 
average_price=120, lowest_price=20, highest_price=1780, 
lowest_sg_base_price=13, listing_count=885, dq_bucket_counts=[86, 283, 
162, 66, 72, 106, 72, 5], median_price=80}, popularity=0.758, links=[], 
id=4960016, performers=[{image=https://seatgeek.com/images/performers- 
landscape/denver-nuggets-ea3cb6/2103/huge.jpg, images= . 
{huge=https://seatgeek.com/images/performers-landscape/denver-nuggets- 
ea3cb6/2103/huge.jpg}, 
image_license=https://creativecommons.org/licenses/by/2.0/, type=nba, 
colors={all=[#0E2240, #FEC524, #0E2240], iconic=#0E2240, primary= . 
[#0E2240, #FEC524]}, divisions=[{display_type=Conference,  
taxonomy_id=1030100, short_name=null, display_name=Western Conference, 
slug=null, division_level=1}, {display_type=Division,  
taxonomy_id=1030100, short_name=Northwest, display_name=Western - 
Northwest, slug=western-northwest, division_level=2}], 
url=https://seatgeek.com/denver-nuggets-tickets, score=0.7, 
num_upcoming_events=69, stats={event_count=69}, taxonomies= . 
[{parent_id=null, name=sports, document_source={source_type=ELASTIC, 
generation_type=FULL}, id=1000000}, {parent_id=1000000, 
name=basketball, document_source={source_type=ELASTIC, 
generation_type=FULL}, id=1030000}, {parent_id=1030000, name=nba, 
document_source={source_type=ELASTIC, generation_type=FULL}, 
id=1030100}], popularity=0, 
image_attribution=https://www.flickr.com/photos/34247743@N07/ 
5342565327/in/photolist-9973xi-996Uxp-996Qwr-9971mx-pW93vv-9ddXGD- 
9dcgRk-9dh49b-eXUzb7-eXUyqJ-eXUyJU-gAGfkV-9ddVN4-efsxLC-efmNi4-nLwpvg- 
efmNqB-bGHTnP-btP6DQ-btP2NY-btP36U-bGHQX2-bGHSEK-btP3Wm-bGHRQc-bGHSa2- 
9dfrVw-7qjEsp-6t2y82-7qoAD9-7qozqW-7qoyRj-7qoyg3-6QTVX7-jrx2ht-a8hFoL- 
9dgYYm-rY1RES-s1iU4H-rJi58H-r4X6SX-s1FLi4-m1dYBZ-nMXgaJ-rZKUfA-rFyrmk- 
rZTsUc-rZKTmb-9myz8B-rJ3c8q, name=Denver Nuggets, location= . 
{lon=-105.008, lat=39.7487}, short_name=Nuggets, id=2103, 
home_team=true, home_venue_id=187, slug=denver-nuggets, primary=true, 
has_upcoming_events=true}, 
{image=https://seatgeek.com/images/performers-landscape/portland-trail- 
blazers-d0de88/2106/huge.jpg, images= . 
{huge=https://seatgeek.com/images/performers-landscape/portland-trail- 
blazers-d0de88/2106/huge.jpg}, 
image_license=https://creativecommons.org/licenses/by-sa/3.0/deed.en, 
type=nba, colors={all=[#191919, #D01631, #191919], iconic=#D01631, 
primary=[#191919, #D01631]}, divisions=[{display_type=Conference, 
taxonomy_id=1030100, short_name=null, display_name=Western Conference, 
slug=null, division_level=1}, {display_type=Division, 
taxonomy_id=1030100, short_name=Northwest, display_name=Western - 
Northwest, slug=western-northwest, division_level=2}], 
url=https://seatgeek.com/portland-trail-blazers-tickets, 
away_team=true, score=0.71, num_upcoming_events=67, stats= . 
{event_count=67}, taxonomies=[{parent_id=null, name=sports, 
document_source={source_type=ELASTIC, generation_type=FULL}, 
id=1000000}, {parent_id=1000000, name=basketball, document_source= . 
{source_type=ELASTIC, generation_type=FULL}, id=1030000}, 
{parent_id=1030000, name=nba, document_source={source_type=ELASTIC, 
generation_type=FULL}, id=1030100}], popularity=0, 
datetime_utc=2019-12-13T03:30:00, enddatetime_utc=null, 
url=https://seatgeek.com/trail-blazers-at-nuggets-tickets/12-12-2019- 
denver-colorado-pepsi-center/nba/4960016, event_promotion=null, 
announce_date=2019-08-12T00:00:00, datetime_tbd=false, taxonomies= . 
[{parent_id=null, name=sports, id=1000000}, {parent_id=1000000, 
name=basketball, id=1030000}, {parent_id=1030000, name=nba, 
id=1030100}], datetime_local=2019-12-12T20:30:00, time_tbd=false, 
announcements={}, status=normal}]}

Видео YouTube настраивает свою последнюю строку, чтобы указать атрибут, из которого они хотели бы получить данные. Если я последую примеру и добавлю «stats» в последнюю строку (как показано ниже), я получу «неопределенную» ошибку.

Logger.log(data.stats)

Даже если я не хочу просто «регистрировать» вызовЯ хочу это в моей таблице. Как мне вызвать данные с правильными заголовками и настроить их для вставки в мой лист?

1 Ответ

1 голос
/ 22 ноября 2019

Пожалуйста, ознакомьтесь с JSON .

Проблема

То, что вы называете "XML Object", на самом деле является "String" версией JSON Object.

Вы просто получаете доступ к свойствам своего объекта, когда они ( свойства ) не существуют.

Чтобы доказать мою точку зрения, вотэксперимент:

Код:

function myFunction() {
  var j = {
    "meta": [],
    "in_hand": [],
    "events": [
      {"a":"1"},
      {"a":"2"}
    ]
  };

  Logger.log(j); //Here is the "XML" version of the object, as you said.
  Logger.log(j.doesnotexist); //This will say undefined, meaning this property does not exist.
}

Выходы: {meta=[], in_hand=[], events=[{a=1}, {a=2}]}

Решение

Имея это в виду, вот как решить вашупроблема. Возвращаемый API-интерфейс объекта имеет следующий формат:

{
  meta,
  in_hand,
  events = [{
    venue = {},
    access_method = {},
    conditional=false,
    date_tbd=false,
    // Other properties here, then, finally:
    stats = {},
    // Then more properties here.
  }]
}

Если ваша переменная data содержит результат JSON.parse, ваша переменная stats должна быть:

var stats = data.events[0].stats;

Кроме того, если бы вы возвращали несколько событий, у вас мог бы быть такой массив статистики:

var stats = [];
for (var i = 0; i<data.events.length; i++) {
  stats.push(data.events[i].stats);
}

Надеюсь, я смог прояснить и направить вас к решению. Береги себя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...