轮询Google网站以进行更改

时间:2015-02-04 09:54:12

标签: node.js api google-api google-sites

我需要在Google网站上发生更改时触发的事件。

有一个包含所有最新更改的XML Feed。我打算用Zapier轮询这个Feed,当有什么变化时,Zapier会向我提供的网址发出http请求,以便我得到我的活动。

只要网站是公开的,这样就可以正常工作,但就我而言,它不是。

所以我考虑为google提供的Feed构建代理。代理将使用正确的身份验证调用feed并传递内容。 Zapier将使用Zapier友好认证机制调用代理。

我想我需要使用服务帐户调用google Feed。那么我该如何使用node.js?

我一直在这看: https://developers.google.com/google-apps/sites/docs/1.0/developers_guide_protocol#ActivityFeed

1 个答案:

答案 0 :(得分:0)

想出来了!

我已经通过https访问了基本身份验证代理。此代理将通过我感兴趣的Google网站的活动供稿。

我使用googleapis模块在node.js中构建了代理。这是我使用的一段代码:

var jwtClient = new googleapis.auth.JWT(
    client_id_email,
    __dirname + 'key.pem',
    null, ['https://sites.google.com/feeds/'],
    'user@domain.org'
);

jwtClient.authorize(function(err, token) {
    if (err) return next(err);

    return rest({
        path: 'https://sites.google.com/feeds/activity/{domainName}/{siteName}',
        headers: {
            "GData-Version": "1.4",
            Authorization: token.token_type + ' ' + token.access_token
        },
        params: {
            domainName: 'domain.org',
            siteName: 'site',
        },
    }).done(function(result) {
        res.set(result.headers);
        res.send(result.entity);
    }, next);
});

示例中的用户名(user@domain.org)是服务帐户模拟的用户。该用户必须能够访问该站点。

我将服务帐户密钥放在文件名' key.pem'在这个例子中。

现在,您必须允许访问要访问的域的服务帐户。您可以在域的管理网站(admin.google.com)上执行此操作。

  1. 转到安检
  2. 转到高级设置
  3. 转到API客户端访问
  4. 您必须添加服务客户端的client_id
  5. 现在......它有效:-) !!! \ O /