【问题标题】:Polling Google sites for changes轮询 Google 网站的更改
【发布时间】:2015-02-04 09:54:11
【问题描述】:

我需要一个在我的谷歌站点发生变化时触发的事件。

有一个包含所有最新更改的 XML 提要。我计划使用 Zapier 轮询此提要,当发生变化时,Zapier 会向我提供的 URL 发出 http 请求,以便获得我的事件。

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

所以我考虑为谷歌提供的提要建立一个代理。代理将使用正确的身份验证调用提要并传递内容。 Zapier 将使用 Zapier 友好的身份验证机制调用代理。

我认为我需要使用服务帐户调用 google 提要。那么如何使用 node.js 做到这一点?

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

【问题讨论】:

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


    【解决方案1】:

    想通了!

    我创建了一个具有基本身份验证的代理,可通过 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

    现在......它工作了:-) !!! \o/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 2014-01-08
      相关资源
      最近更新 更多