首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用“page_token”对Jawbone分页结果

用“page_token”对Jawbone分页结果
EN

Stack Overflow用户
提问于 2015-08-04 21:50:33
回答 1查看 137关注 0票数 0

Jawbone返回每个结果集10个json对象的分页结果。如何获得其余的分页结果?

文档方法的API sleeps表示结果集中的next对象中存在page_token参数。我下面的输出缺少了这个。此外,常见问题表示这个page_token需要一个INT (想必是划时代的)时间戳。

  • 第二个参数:" page_token“参数:如果请求包含"page_token”参数,API将返回在该page_token之前完成的所有工作,顺序相反(以“限制”或默认值10为上限)。page_token是一个时间戳,有一个特例,当请求附带page_token=0时,它被解释为传递page_token = CURRENT_TIMESTAMP,即给出所有的训练(有一个限制)

我能够使用API进行身份验证,并返回一组10个结果(第一个分页).但没有page_token

代码语言:javascript
复制
...snip json...
"links": {
      "next": "/nudge/api/v.1.0/users/jMdCUPXZ-InYXo1kcdOkvA/sleeps?start_time=1424699101&updated_after=0&limit=10&end_time=1438723789"
    },
    "size": 10

我有误解文件吗?文件过时了吗(错)?或者更有可能的是,我完全误解了这一点,并且为我的node.js写了一个可怕的JS .

有人能让我明白并告诉我如何检索所有的结果,而不仅仅是第一页吗?

代码语言:javascript
复制
var express     = require('express');
var app         = express();
var port        = process.env.PORT || 5000;
var passport    = require('passport');
var config      = require('./config.json');
var ejs         = require('ejs');
var https       = require('https');
var fs          = require('fs');
var bodyParser  = require('body-parser');
var jbStrategy  = require('passport-oauth').OAuth2Strategy;
var jsonfile    = require('jsonfile');
var util        = require('util');
var path        = require('path');
/* Calculate date range */
var $today      = new Date()
var $start      = new Date($today); $start.setDate($today.getDate() - 180);
var $end        = new Date($today);
var $startDate  = Math.floor(($start).getTime()/1000);
var $endDate    = Math.floor(($end).getTime()/1000);

app.use(express.logger('dev')); // log every request to the console
app.use(bodyParser.json()); // read cookies (needed for auth)
app.use(express.static(__dirname + '/public'));
app.set('view engine', 'ejs'); 
app.set('views', __dirname + '/views');
app.use(passport.initialize());

/* Default Authentication Path */
app.get('/',
    passport.authorize('jawbone', {
        scope : config.jawboneAuth.scope,
        failureRedirect: '/'
    })
);

/* oauth callback from jawbone */
app.get('/done', passport.authorize('jawbone', {
        scope : config.jawboneAuth.scope,
        failureRedirect: '/'
    }), function(req, res) {
        var result = JSON.parse(body); console.log(result);
        res.redirect('/sleeps');
    }
);

app.get('/sleeps', function(req, res) {

var options = {
    access_token    : config.jawboneAuth.accessToken,
    refresh_token   : config.jawboneAuth.refreshToken,
    client_id       : config.jawboneAuth.clientID,
    client_secret   : config.jawboneAuth.clientSecret
};

if (!config.jawboneAuth.accessToken) {
       // if there's no accessToken, go get one
       res.redirect('/');
    } else {

            var up = require('jawbone-up')(options);
            var page_token = [];

        do {

            up.sleeps.get({
                page_token :   page_token,
                start_time :   $startDate,
                end_time   :   $endDate
            }, function(err, body) {

                if (err) {
                    console.log('Error receiving Jawbone UP data');

                       res.send(err);
                } else {
                    try {
                        var result = JSON.parse(body);

                        var next_page_path = result.data.links.next;
                        //var next_page_token = next_page_path.split(path.sep);
                        //var page_token  = next_page_token[5];
                        //page_token = result.data.links.next
                        console.log(result.data);

                        res.json(result);

                    } // end try
                    catch(err) {
                        console.log(err);
                        res.render('userdata', {
                            requestTime: 0,
                            jawboneData: 'Unknown result'
                            });
                    } // end catch(err)
                    } // end else
                }  //end callback fun
            ); // end up.sleeps.get()

    } // end do
    while(page_token[0] > 1);

}   // end if
}); // end sleeps route

// Setup the passport jawbone authorization strategy
passport.use('jawbone', new jbStrategy({
    clientID        : config.jawboneAuth.clientID,
    clientSecret    : config.jawboneAuth.clientSecret,
    authorizationURL: config.jawboneAuth.authorizationURL,
    tokenURL        : config.jawboneAuth.tokenURL,
    callbackURL     : config.jawboneAuth.callbackURL,
    scope           : config.jawboneAuth.scope,
    passReqToCallback : true 
}, function(req, accessToken, refreshToken, profile, done) {
    // establish a pseudo user session.
    var user = {};
    // If there's no preexisting accessToken, 
    // write one to the config file.
    if (!config.jawboneAuth.accessToken){
        config.jawboneAuth.accessToken = accessToken;
        config.jawboneAuth.refreshToken = refreshToken;
        jsonfile.writeFile('./config.json', config, {spaces: 2},  function(err) {
        console.error(err);
        })
    }
    done(null, user);
}));

// HTTPS
var sslOptions = {
        key     : fs.readFileSync('./.server.key'),
        cert    : fs.readFileSync('./.server.crt')
    };

var secureServer = https.createServer(sslOptions, app).listen(port, function(){
    console.log('Listening on ' + port);
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-06 19:45:51

结果发现,有一个无文档的limit参数取代了page_token

Jawbone开发人员文档目前已过时。就像他们的常见问题(API部分Question# 12)一样。

像这样的GET请求似乎起了作用

https://jawbone.com/nudge/api/v.1.1/users/@me/sleeps?start_time=1388603458&end_time=1420139458&limit=1000

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

https://stackoverflow.com/questions/31819984

复制
相关文章

相似问题

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