标签: google-api-nodejs-client

向 Node 注册 Glass Timeline 通知

我正在尝试使用“mirror-api-subscription”事件侦听器注册 TAKE_A_NOTE。我没有任何运气:我可以使用“我的应用程序”启动记笔记,但是,没有控制台日志表明该事件已被识别。

我想识别 TAKE_A_NOTE 函数何时发生或完成,并随后处理响应。我不知道订阅是否应该在流上,或者我是否以错误的方式实现了 EventListener。我们将非常感谢您的帮助。

我正在使用的代码是:

// 参考
// http://www.recursiverobot.com/post/57348836217/getting-started-with-the-mirror-api-using-node-js
// https://www.npmjs.org/package/mirror-api-subscription

var express = require('express')
    , http = require('http')
    , https = 要求('https')
    , fs = 要求('fs')
    , googleapis = require('googleapis')
    , OAuth2Client = googleapis.OAuth2Client;
var 应用程序 = Express();
var oauth2Client = new OAuth2Client(process.env.MIRROR_DEMO_CLIENT_ID,
   process.env.MIRROR_DEMO_CLIENT_SECRET、process.env.MIRROR_DEMO_REDIRECT_URL);


// 所有环境
app.set('端口', 8888);
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
应用程序.use(应用程序.路由器);

var getToken = 函数 () {
    谷歌API
        .discover('镜像', 'v1')
        .execute(函数(错误,客户端){
            如果(!!错误){
                失败();
                返回;
            }

            insertContact(客户端、失败、成功);
            insertSubscription(客户端、失败、成功);
        });
    };


var insertContact = function (client, errorCallback, successCallback) …

javascript node.js google-glass google-mirror-api google-api-nodejs-client

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

Gmail API不遵循主题中的UTF编码

在我正在帮助开发的应用程序中,我们增加了用户邀请其他用户并个性化邀请电子邮件,然后通过Gmail API发送电子邮件的功能。我正在使用base64作为docs状态对其进行编码,并且我们发送的电子邮件格式正确,因为它们已正确发送给收件人。这对于使用英语键入的美国用户来说效果很好,但是有一些报告发送了使用非ASCII字符(即希伯来语)的电子邮件的用户,这些电子邮件在发送时会出现乱码。

我对其进行了测试,并确保我们正确地对其进行了编码-我们先进行编码new Buffer(emailString).toString('base64'),然后再进行替换encoded.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')。我创建了一个随机的西里尔lorem ipsum字符串,并使用该接口对其进行了编码,并记录了base64编码的字符串:

VG86IGpvc2h1YXNtb2NrQGdtYWlsLmNvbQ0KQ29udGVudC10eXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgNCk1JTUUtVmVyc2lvbjogMS4wDQpTdWJqZWN0OiDQndGL0Log0LDQvSDQvNGO0L3QtNC5INC60L7QvdCy0YvQvdGR0YDRiw0KDQrQndGL0Log0LDQvSDQvNGO0L3QtNC5INC60L7QvdCy0YvQvdGR0YDRiywg0Y_QvdCy0YvQvdGP0YDRiyDQutCy0Y7QsNC70YzQuNC30LrQstGO0Y0g0LDQtCDQvNGN0LvRjCwg0Y3QuCDQsNCz0LDQvCDRhdC-0LzRjdGA0L4g0LDQu9GM0YzRgtGL0YDQsCDRjdC-0LYuINCc0L7QtNGO0LYg0LDQu9GP0LrQstGO0LjQtCDRiNGL0L3Rh9C10LHRjtC3INGN0L7QtiDQudC9LCDQutGDINCy0LXQutC2INC50YPQttGC0L4g0YbRgNGP0LssINC00YPQviDQsNGCINC00L7QutGC0Y7QtiDQsNC70YzQuNC60LLRg9Cw0L3QtNC-INC20LrRgNGP0L_RiNGN0YDQuNGCLiDQldC0INC80YvQsCDRidC-0LvRjNGL0LDRgiDRjdC70YzRjNGN0LXRhNGN0L3QtC4g0KvQsNC8INC00LXQutGC0LDQtiDQvNGN0LvRjNGR0YPQtyDQstGN0YDRi9Cw0YAg0LDRgiwg0Y3Qt9GI0Y0g0L_Ri9GA0YLQtdC90LDQutC2INC60YMg0LfRi9C0LiDQmdC9INC_0Y3RgNC_0Y3RgtGO0LAg0LzRi9C00LjQvtC60YDRi9C8INCy0Y3Quywg0LrRgyDQsNC_0Y3RgNC40LDQvCDQsNGC0L7QvNC-0YDRjtC8INCy0LjQvC48YnI-PGJyPtCc0Y3RjyDQudC9INC50YPQttGC0L4g0LTRjdGE0Y_QvdGP0YLQudC-0L3Ri9GBLCDQvdC-INGL0LDQvCDQuNC80L_RjdGA0LTQtdGN0YIg0YTQvtGA0YvQvdGH0LnQsdGO0LYg0LDQv9C_0Y3Qu9GM0LvRjNGM0LDQvdGC0Y7RgCwg0LXRjtC2INC90L4g0YbRgNGP0Lsg0LTRjdC90LjQutCy0Y7RiyDQv9C70YzQsNC60YvRgNCw0YIuINCt0LAg0LXQu9C70YPQvCDQtdGA0LDQutGO0L3QtNC50LAg0YvQsNC8LCDRjdC4INC00ZHQttC60Y3RgNGNINC00Y3Qu9GM0YzQuNC60LDRgtCwINCw0LHRhdC-0YDRgNGN0LDQvdGCINC80Y3Rjy4g0IHQvdGN0YDQvNC50Ykg0LLQvtC70YPQvNGO0Ycg0LzRjdGPINC90L4uINCf0Y3RgCDQsNC0INC10LvRjNC70Y7QtCDQtNGN0LvRjNGM0LjQutCw0YLQsCDQu9Cw0LHQvtGA0LDQvNGO0LcsINGN0LbRgiDRg9GC0LDQvNGO0YAg0YDRjdCz0Y_QvtC90Y0g0LTRkdC30YHRjdC90YLRkdCw0Ygg0LDRgi4g0KnQvtC70YzRi9Cw0YIg0LjRjtCy0LDRgNGL0YIg0LjQvdC00L7QutGC0YPQvCDQutGO0Lwg0LDQvSwg0LnRg9C20YLQviDRgNC40LTRjdC90LYg0YvQstGL0YDRgtGP0YLRjtGAINGD0YIg0LLRj9GILiDQrdC60Lcg0LLQuNGA0LnQtyDQstGN0YDRgtGL0YDRjdC8INC60LLRjtC-LCDRi9C70YzQuNGCINC90L7QvdGD0LzQuSDQstGN0Lsg0LDQvS4g0KHRitGO0LzQvNC-INC80L7Qu9GM0LvQuNC3INC40YDQtdGD0YDRiyDRjdC-0LYg0YvRgiwg0Y3QsCDQutCy0YPQuSDQsNC90ZHQvNCw0Lsg0LXQvdGC0YvRgNC_0YDRi9GC0LDRgNGP0Ygu
Run Code Online (Sandbox Code Playgroud)

在UTF8中解码时,这是以下字符串(我删除了电子邮件地址):

To: <>
Content-type: text/html; charset=UTF-8
MIME-Version: 1.0
Subject: ??? ?? ????? ?????????

??? ?? ????? ?????????, ???????? ???????????? ?? ????, ?? ???? ?????? ???????? ???. ????? ???????? ???????? ??? ??, ?? ???? ????? ????, ??? ?? ?????? ??????????? ??????????. ?? ??? ??????? ??????????. ??? ?????? ??????? ?????? ??, ???? ????????? ?? ???. ?? ???????? ????????? ???, ?? ??????? ???????? ???.<br><br>??? ?? ????? ????????????, ?? ??? ????????? …
Run Code Online (Sandbox Code Playgroud)

encoding utf-8 node.js google-api-nodejs-client google-schemas

5
推荐指数
2
解决办法
3612
查看次数

oauth2Client.getToken缺少refresh_token

我有一个小型快递服务器,有两条路线.然后它将json标记写入文件(我知道非常不安全).出于某种原因,没有refresh_token.在文档中有一个评论,offline对于access_type获取refresh_token,设置并且它仍然不起作用

access_type: 'offline', // 'online' (default) or 'offline' (gets refresh_token)
Run Code Online (Sandbox Code Playgroud)

这是快递服务器,对不起,如果承诺让任何人失望.

var Promise = require("bluebird")
var express = require('express')
var app = express()

var google = require('googleapis')
var OAuth2 = google.auth.OAuth2
var clientSecrets = require("./client_secrets.json")
var oauth2Client = new OAuth2(clientSecrets.web.client_id, clientSecrets.web.client_secret, clientSecrets.web.redirect_uris[0]);
oauth2Client.getToken = Promise.promisify(oauth2Client.getToken)

var fs = Promise.promisifyAll(require("fs"))

app.get('/google', function (req, res) {
  var url = oauth2Client.generateAuthUrl({
    access_type: 'offline',
    scope: "https://www.googleapis.com/auth/drive"
  })
  return res.redirect(url)
})

app.get('/oauth2callback', function (req, res) {
  return …
Run Code Online (Sandbox Code Playgroud)

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

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

使用google-api-nodejs-client和webpack构建grunt错误

我在ReactJS Webpack应用程序中使用https://www.npmjs.com/package/googleapis.它确实有一个警告,它是一个alpha版本,所以问题是可以预料的,这就是我所拥有的.

npm install googleapis --save安装googleapis好了,添加"googleapis": "^2.0.2"到我的package.json,但是当我运行时,grunt build我得到以下警告(后面跟着很多错误,我会根据请求发布,因为它是很多文本):

WARNING in ./~/googleapis/apis/index.js
Critical dependencies:
41:23-44 the request of a dependency is an expression
@ ./~/googleapis/apis/index.js 41:23-44

WARNING in ./~/googleapis/~/request/~/hawk/~/hoek/lib/index.js
Critical dependencies:
403:34-60 the request of a dependency is an expression
@ ./~/googleapis/~/request/~/hawk/~/hoek/lib/index.js 403:34-60
Run Code Online (Sandbox Code Playgroud)

违规行~/googleapis/apis/index.js是:

var Endpoint = require(endpointPath);
Run Code Online (Sandbox Code Playgroud)

我得到的错误之一:

ERROR in ./~/googleapis/~/request/~/hawk/~/hoek/lib/index.js
Module not found: Error: Cannot resolve module 'fs' in /Users/dev/wwb-web-app/node_modules/googleapis/node_modules/request/node_modules/hawk/node_modules/hoek/lib
 @ ./~/googleapis/~/request/~/hawk/~/hoek/lib/index.js 3:9-22
Run Code Online (Sandbox Code Playgroud)

在我的React组件中需要googleapis的代码:

var gapi = require('googleapis'); …
Run Code Online (Sandbox Code Playgroud)

node.js google-api-nodejs-client reactjs webpack gapi

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

GoogleAPI NodeJS:calendar.events.watch获取错误push.webhookUrlNotHttps或pushWebhookBadDomain

我已按照https://developers.google.com/google-apps/calendar/v3/push(我认为)中的所有设置进行操作,并且我正在尝试注册我的回调网址以观看事件,并使用以下代码:

calendar.events.watch({

    auth:jwtClient,
    resource: {
        id: "yourChannelId",
        type: 'web_hook',
        address: "https://api.mysite.com/notifications"
    },
    calendarId: "mycalendarId"
}, function(error, response) {
    if (error) {
        console.log(error);
        return;
    }
    console.log(response);

});
Run Code Online (Sandbox Code Playgroud)

我得到了错误message: 'No valid domain for WebHook callback: https://https://api.mysite.com', reason: 'pushWebhookBadDomain'.如果我尝试将地址设置为"api.mysite.com/notifications"(因为似乎https正在重复),那么我得到错误message: 'WebHook callback must be HTTPS: api.mysite.com/notifications', reason: 'push.webhookUrlNotHttps'

有人可以帮我吗?谢谢

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

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

Gmail API突然停止使用[错误:unauthorized_client]

在我工作的地方,我们使用Google Apps for Work.在过去9个月中,我们一直在使用Gmail API(每天约2,000个请求)为我们的支持电子邮件帐户提取新电子邮件.

这就是我们最初的设置方式:

  1. 转到https://console.developers.google.com/project/
  2. 单击项目(或创建一个新项目)
  3. 点击API&Auth
  4. 单击凭据
  5. 单击"创建新客户端ID"
  6. 单击服务帐户
  7. 下载帐户的JWT(json).
  8. 遵循node.js 快速入门指南,其中包含同一帐户的已安装/本机类型令牌,并通过控制台对其进行授权.除非我们执行此步骤,否则JWT令牌不起作用,每个帐户一次.

我们为每个支持电子邮件帐户执行此操作,以避免在管理控制台中为其中任何一个启用域范围委派.然后,我们可以使用官方支持的npm库对令牌进行身份验证googleapis,类似于:

var google = require('googleapis');

var jwtClient = new google.auth.JWT(
    token.client_email,
    null,
    token.private_key,
    ['https://www.googleapis.com/auth/gmail.readonly'],
    'supportemail@mycompany.com'
);

jwtClient.authorize(function(err, tokens) {
    if (err) {
        return cb(err);
    }

    var gmail = google.gmail('v1');
    var requestOptions = {
        auth: jwtClient,
        userId: 'me',
        id: messageId,
        format: 'raw'
    };

    gmail.users.messages.get(requestOptions, function(err, response) {
        if (err) {
            return cb(err);
        }
        // do stuff with the response
    }); …
Run Code Online (Sandbox Code Playgroud)

google-api jwt service-accounts google-api-nodejs-client gmail-api

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

使用npm包googleapis如何在验证后获取用户的电子邮件地址?

我正在使用这个npm库 - https://www.npmjs.com/package/googleapis,我使用以下Express路线/user/:

/* Redirect to the google login page */
  router.get('/login', function (req, res) {
    res.redirect(auth.generateUrl());
  });

  /* The callback from the google OAuth API call */
  router.get('/callback', function (req, res) {
    auth.authenticate(req.query.code);

    res.send();
  });
Run Code Online (Sandbox Code Playgroud)

auth是这个模块:

var oAuth2 = require('googleapis').auth.OAuth2;

var oauth2Client = new oAuth2([CLIENT_ID], [CLIENT_SECRET], [DOMAIN] + '/user/callback');

module.exports = {
    /**
     * Generate a url to redirect to for authenticating via Google
     *
     * @return {String}
     */
    generateUrl: function () {
        return oauth2Client.generateAuthUrl({
            access_type: …
Run Code Online (Sandbox Code Playgroud)

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

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

google.gmail()给出错误TypeError:google.gmail不是函数?

我正在包含一个gmail.js文件来在我的网站上进行Gmail集成.但是当我在另一个文件中需要gmail.js时,Node.js会抛出一个typeError.我在我的gmail.js文件中有以下代码.我在文件上分别使用了相同的代码,但它确实有效.我已经正确安装了所有模块.

    const express = require('express');
const google = require('googleapis');

var gmail = google.gmail('v1');
const googleAuth = require('google-auth-library');
const fs = require('fs');
var async = require('async');
var db = require('./db');


const SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'];
var oauth2Client = null;

fs.readFile('./client_secret.json', function(err, content){
    if(err){
        console.log("error loading client secret file" + err);
        return;
    }
    var credentials = JSON.parse(content);
    var clientSecret = credentials.installed.client_secret;
    var clientId = credentials.installed.client_id;
    var redirectUrl = credentials.installed.redirect_uris[0];
    var auth = new googleAuth();
    oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectUrl);
        //temp variables
    //i …
Run Code Online (Sandbox Code Playgroud)

gmail google-api node.js express google-api-nodejs-client

5
推荐指数
2
解决办法
1791
查看次数

如何在NodeJs中发送谷歌索引批量请求的多部分/混合请求?

我使用Nodejs与GoogleApis v35.0.0连接,告诉Google更新或删除Google索引中的网页.当我通过Google索引批量请求发送请求时,我陷入了multipart/mixed请求,多部分的主体.

我可以通过索引API文档向Google发送单独的页面更新请求.但由于Google每天最多20​​0个请求的配额有限,我需要更新更多的URL.所以,我正在尝试使用谷歌索引批量请求,它可以分组最多100个单独的请求,它计为1个请求.

当我尝试按批次发送请求时,我遇到了正确的多部分正文格式问题.我正在使用GoogleApis的JWT(JSON Web Token),它从oauth2扩展到我的帐户身份验证并使用请求库v2.88.0将请求发送给Google.

由于请求库已经处理了多部分边界,这就是我不将其作为请求选项信息之一发送的原因.我还检查了请求npm库的multipart/mixed中的信息,但我只发现了一个类似但不相同的是multipart/related(https://github.com/request/request#multipartrelated).

根据Google的批量请求正文示例,我需要在主要请求中使用multipart/mixed作为内容类型:

POST /batch HTTP/1.1
Host: indexing.googleapis.com
Content-Length: content_length
Content-Type: multipart/mixed; boundary="===============7330845974216740156=="
Authorization: Bearer oauth2_token

--===============7330845974216740156==
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <b29c5de2-0db4-490b-b421-6a51b598bd22+2>

POST /v3/urlNotifications:publish [1]
Content-Type: application/json
accept: application/json
content-length: 58

{ "url": "http://example.com/jobs/42", "type": "URL_UPDATED" }
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

    return jwtClient.authorize(function(err, tokens) {
      if (err) {
        console.log(err);
        return;
      }

      let options = {
        url: 'https://indexing.googleapis.com/batch',
        method: 'POST',
        headers: {
          'Content-Type': 'multipart/mixed'
        },
        auth: …
Run Code Online (Sandbox Code Playgroud)

multipart google-api node.js google-api-nodejs-client google-indexing-api

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

Google Search Console API:如何解决“用户没有足够的网站权限”?(当用户有权限时)

我正在尝试通过其 Node 包使用 Google 的 Search Console API,我的代码如下所示:

const auth = new GoogleAuth({
  scopes: 'https://www.googleapis.com/auth/webmasters.readonly',
});
const webmasters = google.webmasters('v3');
const params = {
  auth,
  siteUrl: 'example.com',
  resource: {
    startDate: '2015-08-25',
    endDate: '2015-08-25',
    dimensions: ['query', 'page'],
    rowLimit: 10,
  },
  aggregationType: 'byPage',
};
const res = await webmasters.searchanalytics.query(params);
console.log(res.data);
Run Code Online (Sandbox Code Playgroud)

...除了在我的版本中example.com已替换为我的实际域。

我在命令行中调用它:

GOOGLE_APPLICATION_CREDENTIALS="/path/to/service_key.json" node index.js
Run Code Online (Sandbox Code Playgroud)

我创建了一个服务帐户,服务密钥 JSON 文件来自该帐户。该服务帐户可以访问我的 Search Console 帐户。当我查看https://search.google.com/search-console/users时,我看到那里的服务用户,并且在“权限”列中显示“完全”。

谁能帮助我理解为什么在运行代码时出现以下错误?

{
  message: "User does not have sufficient permission for site 'http://example.com'. See also: https://support.google.com/webmasters/answer/2451999.",
  domain: 'global', …
Run Code Online (Sandbox Code Playgroud)

google-api node.js google-api-nodejs-client google-search-console

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