Могу ли я использовать Google Sheets для подключения к API (используя OAuth2) ИЛИ могу ли я отправлять почтальон по расписанию от почтальона в Google Sheets? - PullRequest
0 голосов
/ 25 сентября 2018

Цель Я хочу подключиться к API (к веб-службе Sharesight, которая отслеживает портфели акций), чтобы я мог каждый час (в рабочие дни) возвращать свои портфели в Google Sheets.Затем я буду использовать Google Sheets для отправки мне электронного письма каждый час.

Точный процесс не должен быть таким, но по сути я хочу извлечь некоторые данные из учетной записи и отправить их мне по электронной почте.Я планирую использовать Google Sheets, потому что я хочу выбирать конкретные вещи из JSON, поэтому я подумал, что это простой способ настройки формул и т. Д.

Предостережение Я знаю, что такое APIно я никогда не играл с ними раньше, поэтому я учусь по ходу дела.

То, что я пробовал ... в Google Sheets Я пытался использовать Google Sheets для написания кода(Я думаю, что это Javascript) для подключения к Sharesight (используя все идентификатор клиента, секрет клиента, URI токена авторизации, URI токена доступа и т. Д.) Я думаю, что в случае неудачи мне нужно указать «URI перенаправления», который вВ примечаниях Sharesight говорится, что для локальных тестов я могу использовать «urn: ietf: wg: oauth: 2.0: oob».Я все равно попробовал, но думаю, что не смогу, так как не делаю местного теста.

- Итак, мой первый камень преткновения ... как я могу подключить URI перенаправления к моим Google Sheets?

Итак, я попробовал Почтальон Я только что прогуглил API-инструмент и обнаружил, что подумал, что попробую, потому что на самом деле я еще даже не подключался к API.Так что, к счастью, я справился, и это нормально.Я использовал GET для URL своего портфолио, и мне пришлось указать вчерашнюю дату и сегодняшнюю дату в качестве параметров отчета - что работало нормально!

Но потом я думаю, мне нужно импортировать это вGoogle Sheets.Это действительно возможно?Внутри почтальона, я использую их URI перенаправления, поэтому я думаю, что смог продвинуться дальше (https://www.getpostman.com/oauth2/callback) - однако мне нужны дополнительные шаги, чтобы протолкнуть его.

Но затем некоторые другиевозникают вопросы:

  • Может ли почтальон на самом деле бегать каждый час и «что-то делать»? Имеет ли он способность планирования?

  • Может ли он работать, покамой компьютер не включен? Если нет, то это довольно бесполезно для меня (если я не могу скопировать код)

  • Есть ли способ экспортировать код для «Получить новый доступ»Токен, который, кажется, хорошо отображается как графический интерфейс, но я уверен, что есть несколько вещей, происходящих в бэкэнде с URL-адресом авторизации и URL-адресом токена доступа. Это может быть удобно, если я могу использовать Google Sheets.

Есть какие-нибудь указатели на то, что мне следует попробовать дальше? Или это в значительной степени невозможно?

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

Спасибо @Rich (см. Другой ответ / комментарии), который указал мне правильное направление.Это именно тот код, который я в итоге предоставил мне в результате JSON из Sharesight.

Я (глупо) не понимал, что мне нужно было сначала передать свой идентификатор клиента и секрет клиента на URL-адрес токена доступа, чтобы получить токен доступа, а затем передать его в качестве заголовка для реального API отчета.что я хочу запустить.

Следующие шаги - выяснить, как преобразовать поля JSON в формат электронной таблицы в Google Sheets!

function getReport() 
{
  var client_id = 'XXX'
  var client_secret = 'YYY'

  var url = 'https://edge-api.sharesight.com/oauth2/token?'
  + '&grant_type=client_credentials'
  + '&client_id=' + client_id
  + '&client_secret=' + client_secret

  var token = UrlFetchApp.fetch(url,{method:'POST',muteHttpExceptions: true});
  var token_data = JSON.parse(token.getContentText());
  var access_token = token_data.access_token

  var url2 = 'https://edge-api.sharesight.com/api/v2/portfolios/343835/performance.json?'
  var report = UrlFetchApp.fetch(url2,{method:'GET',headers:{Authorization: 'Bearer ' + access_token}});
  Logger.log(report)

  SpreadsheetApp.getActiveSheet().getRange('A1').setValue(report); 
}
0 голосов
/ 25 февраля 2019

У вас уже есть ответ, но я подумаю, что поделюсь этим, если он кому-нибудь поможет.Этот код захватывает токен и сохраняет его в течение 30 минут, чтобы избежать повторного запроса токена без необходимости.Отказ от ответственности - мои навыки кодирования довольно просты.

Я поместил этот и остальной код, чтобы проанализировать JSON и вставить его в листы Google на моем сайте: https://www.callofthesky.com/import-data-from-sharesight-to-google-sheets/

Сначала определитенаши переменные

var ClientID = "CLIENT_ID_GOES_HERE";
var ClientSecret = "CLIENT_SECRET_GOES_HERE";
var PortfolioNumber = "PORTFOLIO_NUMBER_GOES_HERE"

Следующая функция возвращает токен.Если в Сервисе свойств есть один возраст менее 30 минут, он возвращает его, в противном случае он получает новый из Sharesight.

function gettoken() {

  var authdetails = {
    "grant_type" : "client_credentials", 
    "client_id" : ClientID,
    "client_secret" : ClientSecret
  };

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

  var scriptProperties = PropertiesService.getScriptProperties();
  var issuetime = scriptProperties.getProperty('issuedtime');

  if (issuetime !== null) { 
    var TokenExpiry = (Number(issuetime) + 1800); }
  else {
    var TokenExpiry = 0;
  }

  var d = new Date();
  var timeStamp = d.getTime();

  if (timeStamp > TokenExpiry) {

  var response = UrlFetchApp.fetch("https://api.sharesight.com/oauth2/token" , options);
  var data = JSON.parse(response.getContentText());
  var token = data.access_token;
  addtoproperties(token)
  } 

  else { 
    var token = scriptProperties.getProperty('SStoken');
  }

  return token
}

Следующая функция вызывается gettoken ().Он добавляет токен, который получает, и текущее время в Службу свойств

function addtoproperties(SStoken) {
  var scriptProperties = PropertiesService.getScriptProperties();
  scriptProperties.setProperty('SStoken', SStoken);

  var d = new Date();
  var timeStamp = d.getTime();

  scriptProperties.setProperty('issuedtime', timeStamp);

  var store = scriptProperties.getProperties();

  return;
}
0 голосов
/ 26 сентября 2018

Тип предоставления «код» действительно подходит только для приложений на основе браузера.

Вы должны иметь возможность делать тип предоставления «пароль», который не требует перенаправления:

  var url = 'https://portfolio.sharesight.com/oauth2/token?grant_type=password&client_id=' 
    + clientId 
    + '&username=' + username + '&password=' + password;

  var response = UrlFetchApp.fetch(url,  { method: 'POST', muteHttpExceptions: true} );
  Logger.log("authorize response: " + response.getResponseCode() 
    + "; " + response.getContentText());

  var responseMsg = JSON.parse(response.getContentText());

responseMsg.access_token и responseMsg.refresh_token должны быть заполнены.Вы можете использовать их для выполнения любого вызова API в Sharesight, например, из пользовательской функции в вашей электронной таблице.

Очевидно, что вам нужно ввести свои учетные данные в ваш скрипт - я сделал это с помощью диалога в Google Sheets.

В качестве альтернативы (я не проверял это в Google Sheets) вы можете сделать грант client_credentials - для этого вам нужно сначала связаться со службой поддержки Sharesight и связать свой идентификатор клиента с вашим пользователем, а затем вы можете подключитьсятолько с идентификатором клиента и секретом.

(См. https://alexbilbie.com/guide-to-oauth-2-grants/)

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