标签: google-api-nodejs-client

如何刷新 Google Analytics Reporting API v3 的访问令牌

因此,我正在开发一个 Node.js 应用程序,它将每隔x几秒轮询一次 Google Analytics api。我已经设置了一个“服务帐户”,并将p12密钥转换为.pem文件。初始设置看起来像这样:

var authClient = new google.auth.JWT(authData.serviceEmail, authData.keyFile, null, authData.scope, '');

authClient.authorize(function(err, tokens) {
  if (err) {
    winston.log('error', 'Error authorizing with GA', {error: err});
    return;
  }

  setInterval(function() {
    analytics.data.realtime.get({
      'auth': authClient,
       ...
    }, function (err, body) {
        // getting 401 error here
    })
  }, 20000);
});
Run Code Online (Sandbox Code Playgroud)

我没有意识到初始代币的有效期为 1 小时;但是我收到的令牌如下所示:

{
  access_token: ...,
  token_type: 'Bearer',
  expiry_date: NaN,
  refresh_token: 'jwt-placeholder
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,一旦收到该401 invalidCredentials错误,我是否只需重新授权即可获取新的访问令牌以便能够从 Google Analytics 进行轮询?我是 JWT 的新手,这似乎会授权太多次。这有限制吗?

作为参考,我正在使用Google …

google-analytics google-api node.js jwt google-api-nodejs-client

1
推荐指数
1
解决办法
2005
查看次数

错误:无效_请求 getToken

我已采取的步骤

使用 Google 的开发者控制台:

  1. 我创建了一个项目并为该项目创建了一个客户端。
  2. 我已激活 Youtube API 数据
  3. 我将回调设置为http://localhost:3000/callback
  4. 我已经下载了“client_secrets”。

节点服务器初始步骤:

  1. 使用“client_secrets”我创建了一个新的 OAuth2Client 实例,并将其命名为 oauth2Client
  2. 我使用 oauth2Client 变量生成了 URL,指定了以下内容:

var url = oauth2Client.generateAuthUrl({
            access_type: 'offline', //returns fresh token,
            scope: 'https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload https://www.googleapis.com/auth/youtube.force-ssl https://www.googleapis.com/auth/youtubepartner'
        });
Run Code Online (Sandbox Code Playgroud)

谷歌授权页面:

  1. 我转到“生成的 URL”并单击“授权”,然后重定向到http://localhost:3000/callback上的回调

节点服务器最终步骤:

  1. 我在 URL 中得到“代码”(看起来像这样:4/gZpLEwZWD6OVEE7F5uXXXXXXXXXXXXXXXXXX
  2. 使用相同的 oauth2Client 变量,我尝试获取令牌,如下所示:

oauth2Client.getToken(code, function (err, tokens) {
    // set tokens to the client
    console.log('errors ' + err);
    console.log('tokens ' + tokens);
    oauth2Client.setCredentials(tokens);
})
Run Code Online (Sandbox Code Playgroud)

console.log 的结果是:

 errors Error: invalid_request
 tokens null
Run Code Online (Sandbox Code Playgroud)

问题

是什么原因造成的invalid_request …

node.js google-oauth google-api-nodejs-client

1
推荐指数
1
解决办法
1839
查看次数

Google Shopping API node.js 产品插入返回“INSERT 请求必须指定产品”错误

我尝试使用以下 node.js 代码将产品插入 Google Shopping API,但不断收到错误消息:

{ [Error: [product] INSERT request must specify product]
code: 400,
errors:
[ { domain: 'global',
   reason: 'required',
   message: '[product] INSERT request must specify product' } ] }
Run Code Online (Sandbox Code Playgroud)

这是我的 javascript 代码(我在这里使用节点客户端: https: //github.com/google/google-api-nodejs-client/):

var google = require('googleapis');

var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2(*OAUTHDETAILS*);

oauth2Client.setCredentials({
    access_token: '*ACCESSTOKEN*',
  //refresh_token: 'REFRESH TOKEN HERE'
});

var content = google.content({ version: 'v2', auth: oauth2Client });

var product = {
    "channel": "online",
    "contentLanguage": "en",
    "offerId": *PRODUCTID*,
    "targetCountry": …
Run Code Online (Sandbox Code Playgroud)

javascript node.js google-shopping-api google-api-nodejs-client

1
推荐指数
1
解决办法
2444
查看次数

查询谷歌分析报告 API 时出现未知名称“view_id”错误

我正在尝试从 node.js 应用程序查询 Google Analytics Reporting API。

我想我已经在 google 端正确设置了包括服务帐户在内的所有内容,但我一定遗漏了一部分。

我的应用程序成功地将使用数据发送给 Google,我可以在实时视图中看到它。我还可以使用交互式 API 资源管理器查询数据。

在我的 node.js 代码中,我在服务器启动时使用 API 进行身份验证,如下所示:

var googleapis_key = require('./config/google-api-key.json');
var googleapis = require('googleapis');
var googleapis_jwtClient = new googleapis.auth.JWT(
    googleapis_key.client_email, 
    null, 
    googleapis_key.private_key, 
    ["https://www.googleapis.com/auth/analytics.readonly"], 
    null);
var googleapis_analyticsreporting = googleapis.analyticsreporting('v4');

googleapis_jwtClient.authorize(function(err, tokens) {
    if (err) {
        lStartup.error(err);
        lStartup.error("Could not authenticate with google API. Analytics not available.");
    } else {
        lStartup.info("Successfully authenticated with google service-account.");
        lStartup.debug(googleapis_jwtClient.credentials);   
    }
});
Run Code Online (Sandbox Code Playgroud)

(其中 lStartup 是一个 log4js 记录器)。我得到了 Google 的肯定答复,未设置 err 并且记录到控制台的凭据看起来令人信服。

然后当相关的客户端请求进入我的服务器时,尝试向谷歌询问数据:

    var reportingrequests …
Run Code Online (Sandbox Code Playgroud)

google-analytics google-api-nodejs-client

1
推荐指数
1
解决办法
1224
查看次数

如何从谷歌撤销 OAuth 提供的令牌?节点

我已经使用 oauth2 从我的 NodeJS 应用程序连接到 google plus,但是如何撤销令牌/断开连接?我在 NodeJS 的文档中找不到任何内容。

node.js oauth-2.0 google-api-nodejs-client

1
推荐指数
1
解决办法
1430
查看次数

Google Drive API 获取缩略图

我想获得谷歌驱动器为存储的 pdf 文件创建的缩略图。通过这个函数,我列出了所有文件:

  listFiles: function (folderId, onData, onError) {

    drive.files.list({
        auth: jwtClient,
        q: "'" + folderId + "' in parents"
    }, function (err, res) {
         console.log(res.files)
       }
    });
Run Code Online (Sandbox Code Playgroud)

每个文件的控制台日志输出如下所示:

{ 
  kind: 'drive#file',
  id: '0BapkdhpPsqtgf01YbEJRRlhuaVUf',
  name: 'file-name.pdf',
  mimeType: 'application/pdf' 
}
Run Code Online (Sandbox Code Playgroud)

当我检查谷歌的文档时,它说文件的元数据应该包含所有这些属性: https: //developers.google.com/drive/v3/reference/files 并在那里我发现:contentHints.thumbnail.image如何访问它?

javascript node.js google-drive-api google-api-nodejs-client

1
推荐指数
2
解决办法
7640
查看次数

使用令牌交换代码时,google-api-nodejs-client 会抛出 invalid_request 错误

我有一个简单的客户端应用程序,使用react-google-login 和以下设置:

<GoogleLogin
        clientId={config.CLIENT_ID}
        scope={config.SCOPES.join(' ')}
        buttonText="Login With Google"
        onSuccess={response => onSignIn('google', response)}
        onFailure={this.failure.bind(this)}
        accessType="offline"
        responseType="code"
      />
Run Code Online (Sandbox Code Playgroud)

它成功检索代码并将其发送到用 NodeJS 编写的后端服务器。

服务器端代码如下所示:

const { google } = require('googleapis');
const config = global.config;
const oauth2Client = new google.auth.OAuth2({
  clientId: config.google.CLIENT_ID,
  clientSecret: config.google.CLIENT_SECRET,
});

// code omitted for the sake of simplicity

var authCode = req.body.authCode; // the provided code by google

const { tokens } = await oauth2Client.getToken(authCode);
return tokens;
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,它抛出错误:

{ error: 'invalid_request',
        error_description: 'Missing parameter: redirect_uri' } },
  code: '400' …
Run Code Online (Sandbox Code Playgroud)

node.js google-oauth google-api-nodejs-client

1
推荐指数
1
解决办法
1097
查看次数

开玩笑地嘲笑谷歌云/存储打字稿

我一直在尝试为我的实现模拟 @google-cloud/storage 以便我可以测试它而不必在 gcp 中点击 cloud-storge 到目前为止它都是徒劳的我试图模拟 node_module 范围文件夹使用 jest doc 并没有解决因此我尝试在下面使用

这是我的实现类

import { GcloudAuthenticationInstance } from '../common/services/gcloud.authentication';
import * as fs from 'fs';
import pump from 'pump';
import pino from 'pino';
import * as _ from 'lodash';

import {
    ENV_NAME_DEV,
    GCLOUD_DATABASE_BUCKET_DEV,
    GCLOUD_DATABASE_BUCKET_PROD,
    GCLOUD_ENV_STR_BUCKET_NAME,
    GCLOUD_STORED_FILE_NAME_DEV,
    GCLOUD_STORED_FILE_NAME_PROD,
    GCLOUD_UPLOAD_FILE_DEV_LOCAL_PATH,
    GCLOUD_UPLOAD_FILE_PROD_LOCAL_PATH,
} from '../common/util/app.constants';
import { PinoLoggerServiceInstance } from '../common/services/pino.logger.service';
import { AppUtilServiceInstance } from '../common/services/app.util.service';
export const uploadEnvFiles = async (env_name: string) => {
    const LOGGER: pino.Logger = PinoLoggerServiceInstance.getLogger(__filename);

    return new …
Run Code Online (Sandbox Code Playgroud)

node.js google-cloud-storage typescript google-api-nodejs-client ts-jest

1
推荐指数
1
解决办法
2745
查看次数

使用 google apis 更改 google 电子表格的访问权限

我正在尝试使用 google API 更改我的 google 电子表格的可访问权限,我已经使用 google API 使用我的 google 服务帐户创建了它。

我还可以将其所有权授予其他电子邮件地址并保留自己的编辑权限吗?

生成代码(我使用的是node js):-

const client = new google.auth.JWT(
  keys.client_email,
  null,
  keys.private_key,
  ['https://www.googleapis.com/auth/spreadsheets']
);

client.authorize((err, tokens) => {
  if (err) {
    console.log('sheet auth err', err);
    return;
  }
  console.log('success auth');
});

app.post('/generateSheet', async (req, res, next) => {
  const { userId, sheetName } = req.body;
  console.log(userId, sheetName);
  // return res.redirect('/');
  const integrationName = 'Google_Sheets';

    const data = req.body;
  try {
    // const integrationInfoSnapshot = await db
        //  .doc(`integrationParameters/${integrationName}`)
    //   .get();
    try …
Run Code Online (Sandbox Code Playgroud)

google-api node.js google-drive-api google-api-nodejs-client google-sheets-api

1
推荐指数
1
解决办法
2173
查看次数

谷歌驱动器API上传成功返回ID。但驱动器中不存在文件?

上传成功并返回 id。并尝试将其驱动。它存在。但驱动器中不存在文件?这是什么?我尝试按 id 上传到特定文件夹。文件上传位置在哪里?

const { google } = require('googleapis');
const fs = require('fs');
const credentials = require('./credentials.json');
const scopes = [
    'https://www.googleapis.com/auth/drive'
];

const auth = new google.auth.JWT(
    credentials.client_email, null,
    credentials.private_key, scopes
);

const drive = google.drive({ version: 'v3', auth });

(async () => {
    
    const fileMetadata = {
        name: 'naruto.jpg'
    };

    const media = {
        mimeType: 'image/jpeg',
        body: fs.createReadStream('naruto.jpg')
    };

    const res = await drive.files.create({
        q: `'1PhND1fjEDnL63BbrLmw2V4M4B6jIfP8Q' in parents`,
        resource: fileMetadata,
        media: media,
        fields: 'id'
    });

    console.log(res.data);
    
})();
Run Code Online (Sandbox Code Playgroud)

google-api node.js google-drive-api service-accounts google-api-nodejs-client

1
推荐指数
1
解决办法
1694
查看次数