2016-04-10 1 views
1

Я использовал Postman и Charles, чтобы увидеть, работает ли моя функция Smartsheet GET, и все в порядке, я возвращаю данные json string.Как я могу позвонить в API Smartsheet с помощью скрипта Google Apps?

Я попытался выполнить вызов из локального кода и с html-страницы скрипта приложения Google.

Но я получаю эту ошибку на странице приложения сценария Google:

«XMLHttpRequest не может загрузить https://api.smartsheet.com/2.0/sheets/ MY SMART БАЛАНС ID Ответ на предполетный запрос не проходит проверку контроля доступа: Нет.«Access-Control-allow- Заголовок Origin присутствует на запрошенном ресурсе. Поэтому исходный адрес «https://n-n662xy6uqbadudjpoghatx4igmurid667k365ni-script.googleusercontent.com» не имеет доступа ».

Моя цель - автоматически обновить листок Google на листе Smartsheet.

Мой запрос Ajax выглядит следующим образом:

var settings = { 
    "async": true, 
    "crossDomain": true, 
    "url": "https://api.smartsheet.com/2.0/sheets/SHEET_ID", 
    "method": "GET", 
    "headers": { 
    "authorization": "Bearer MY_SECRET_ACCESS_TOKEN", 
    "cache-control": "no-cache", 
    "postman-token": "SOME_LONG_TOKEN" 
    } 
} 

$.ajax(settings).done(function (response) { 
    console.log(response); 
}); 

ответ

0

под действием внешних интерфейсов под Google Apps Script API,

Google Apps Script может взаимодействовать с API, из всей сети.

Подключение к общественным APIs

десятки API, Google доступны в Apps Script, либо в виде встроенных услуг или передовых услуг. Если вы хотите использовать API Google (или не Google), который недоступен в качестве службы сценариев приложений, вы можете подключиться к общедоступному HTTP-интерфейсу API через службу URL Fetch.

Следующий пример обращается к API YouTube и возвращает канал видео, соответствующий запросу skateboarding dog.

var url = 'https://gdata.youtube.com/feeds/api/videos?' 
+ 'q=skateboarding+dog' 
+ '&start-index=21' 
+ '&max-results=10' 
+ '&v=2'; 
var response = UrlFetchApp.fetch(url); 
Logger.log(response); 

Вот родственный SO ticket, что связано его код в скриптах Google Apps для SmartSheet API.

1

Вы не можете вызывать API Smartsheet с клиентского JavaScript из-за того, что API не поддерживает CORS в настоящее время.

Вы можете обратиться к API Smartsheet непосредственно из сценария Google Apps. На самом деле мы/Smartsheet публикуем два дополнения Google, которые используют API Smartsheet из сценариев (1, 2).

Google apps-script-oauth2 project представляет собой полный пример использования API Smartsheet в каталоге образцов в GitHub. См. samples/Smartsheet.gs.

С самого OAuth из пути, вы можете выполнять запросы к API SmartSheet так:

var url = 'https://api.smartsheet.com/2.0/users/me'; 
var options = { 
    'method': 'get' 
    , 'headers': {"Authorization": "Bearer " + getSmartsheetService().getAccessToken() } 
}; 
var response = UrlFetchApp.fetch(url, options).getContentText(); 
Logger.log("email:" + JSON.parse(response).email); 

Обратите внимание, что getSmartsheetService() в приведенном выше примере является так же, как getDriveService() в Readme Google за Smartsheet исключения.Полный код приведен ниже:

function getSmartsheetService() { 
    // Create a new service with the given name. The name will be used when 
    // persisting the authorized token, so ensure it is unique within the 
    // scope of the property store. 
    return OAuth2.createService('scott_smartsheet') 

     // Set the endpoint URLs, which are the same for all Google services. 
     .setAuthorizationBaseUrl('https://app.smartsheet.com/b/authorize') 
     .setTokenUrl('https://api.smartsheet.com/2.0/token') 

     // Set the client ID and secret, from the Google Developers Console. 
     .setClientId(SMARTSHEET_CLIENT_ID) 
     .setClientSecret(SMARTSHEET_CLIENT_SECRET) 

     // Set the name of the callback function in the script referenced 
     // above that should be invoked to complete the OAuth flow. 
     .setCallbackFunction('authCallback') 

     // Set the property store where authorized tokens should be persisted. 
     .setPropertyStore(PropertiesService.getUserProperties()) 

     // Set the scopes to request (space-separated for Google services). 
     .setScope('READ_SHEETS') 

     // Set the handler for adding Smartsheet's required SHA hash parameter to the payload: 
     .setTokenPayloadHandler(smartsheetTokenHandler) 
     ; 
} 
+0

Я могу использовать метод fetchURL, упомянутый Mr.Robot. Но ответ содержит только ограниченный объем данных из smartsheet, к которому я обращаюсь, почему это так? «функция callSmartSheet() { вар PARAMS = { "заголовки": { "авторизации": "Канал ", "кэш-контроль": "нет кэша", }, "метод" : «GET», } var response = UrlFetchApp.fetch ("https://api.smartsheet.com/2.0/sheets/ /", params); var responseCode = response.getResponseCode(); if (responseCode === 200) { Logger.log (response); } else { Logger.log (responseCode); } } ' –

+0

Какие данные отсутствуют? См. Параметр include в документах API для getSheet по адресу http://smartsheet-platform.github.io/api-docs/?shell#get-sheet для получения информации о том, как убедиться, что требуемая информация возвращается. –