首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Patreon到Google Sheets的数据

从Patreon到Google Sheets的数据
EN

Stack Overflow用户
提问于 2019-09-17 05:58:21
回答 1查看 233关注 0票数 0

我试图从一个特定的Patreon Creator页面管道数据到谷歌电子表格,如:成员的名字,成员的姓氏,层等。

我已经阅读了这里的Patreon开发者文档。https://docs.patreon.com

我在这里引用了Ben Collin关于将Google Sheets与Strava API集成的教程:https://www.benlcollins.com/spreadsheets/strava-api-with-google-sheets/

我已经成功地将Patreon连接到我的Google App,并授予了访问权限,但仍然没有数据。当我运行脚本时,我得到了以下错误:

代码语言:javascript
复制
TypeError: Cannot find function forEach in object [object Object].

关于如何获取我想要的数据有什么想法吗?

代码语言:javascript
复制
var CLIENT_ID = 'HIDDEN';
var CLIENT_SECRET = 'HIDDEN';
var redirectURL = 'https://script.google.com/macros/d/HIDDEN:scriptID/usercallback'


// configure the service
function getPatreonService() {
  return OAuth2.createService('Patreon')
    .setAuthorizationBaseUrl('https://www.patreon.com/oauth2/authorize')
    .setTokenUrl('https://api.patreon.com/oauth2/token')
    .setClientId(CLIENT_ID)
    .setClientSecret(CLIENT_SECRET)
    .setCallbackFunction('authCallback')
    .setPropertyStore(PropertiesService.getUserProperties())
    .setScope('included:read_all');
}

// handle the callback
function authCallback(request) {
  var patreonService = getPatreonService();
  var isAuthorized = patreonService.handleCallback(request);
  if (isAuthorized) {
    return HtmlService.createHtmlOutput('Success! You can close this tab.');
  } else {
    return HtmlService.createHtmlOutput('Denied. You can close this tab');
  }
}

// custom menu
function onOpen() {
  var ui = SpreadsheetApp.getUi();

  ui.createMenu('Patreon App')
    .addItem('Get data', 'getPatreonPledgeData')
    .addToUi();
}

// Get pledge data
function getPatreonPledgeData() {

  // get the sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet1');

  // call the Patreon API to retrieve data
  var data = callPatreonAPI();

  // empty array to hold pledge data
  var patreonData = [];

  // loop over pledge data and add to patreonData array for Sheet
  data.forEach(function(pledge) {
    var arr = [];
    arr.push(
     pledge.first_name,
     pledge.full_name,
     pledge.email,
     pledge.last_name
    );
    patreonData.push(arr);
  });

  // paste the values into the Sheet
  sheet.getRange(sheet.getLastRow() + 1, 1, patreonData.length, patreonData[0].length).setValues(patreonData);
}

// call the Patreon API
function callPatreonAPI() {

  // set up the service
  var service = getPatreonService();

  if (service.hasAccess()) {
    Logger.log('App has access.');

    var endpoint = 'https://www.patreon.com/api/oauth2/api/campaigns/<HIDDEN:CampaignID>/pledges';
    var params = '?include=patron.null';

    var headers = {
      Authorization: 'Bearer ' + service.getAccessToken()
    };

    var options = {
      headers: headers,
      method : 'GET',
      muteHttpExceptions: true
    };

    var response = JSON.parse(UrlFetchApp.fetch(endpoint + params, options));

    return response;  
  }
  else {
    Logger.log("App has no access yet.");

    // open this url to gain authorization 
    var authorizationUrl = service.getAuthorizationUrl();

    Logger.log("Open the following URL and re-run the script: %s",
        authorizationUrl);
  }
}
EN

回答 1

Stack Overflow用户

发布于 2019-09-17 20:28:51

出现错误是因为Oauth流没有完全执行(可能是它没有显示同意屏幕,或者您没有使用您的帐户登录,等等)。

正如您在“连接到Google API”部分中使用1的Apps脚本的Oauth2库文档中所述,获取访问令牌的更简单方法是使用ScriptApp.getOAuthToken() function 2而不是service.getAccessToken(),并在清单文件3中设置所需的作用域。

在任何情况下,我都不相信这能让你访问Patreon API 4。而且,我在Patreon API文档5中看不到你正在使用的url。

1

2

3

4

5

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57964894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档