【问题标题】:Fitbit Subscription APIFitbit 订阅 API
【发布时间】:2013-04-18 04:46:22
【问题描述】:

我已经使用 Fitbit 的 PHP 库 (www.disciplinexgames.com/fitbit) 在我的网站中成功集成了 FitBit api。它工作正常,但我现在想使用订阅 API,以便我们可以在新数据可用时立即更新数据库中的数据。我已经浏览了订阅 API 文档并使用订阅者端点注册了应用程序,但是在获取更新通知时我迷路了。在我应该在代码中添加或更改什么等方面,文档并没有真正得到太多帮助。是否有任何与订阅 API 相关的 PHP 示例代码或我应该做什么的建议。

工作网址:http://www.disciplinexgames.com/fitbit/

任何帮助将不胜感激。有点沮丧,因为我没有收到任何错误,但同时也没有更新通知。

谢谢

【问题讨论】:

    标签: fitbit


    【解决方案1】:

    很抱歉这个答案迟到了两年,但也许它会对某人有所帮助。

    一旦您知道用户的令牌和令牌秘密,您就可以使用以下 OAUTH POST 请求订阅他们的供稿。此 URL 用于他们的活动提要。

    <?php
    $consumerKey = "lajsdf23l4l8asdfn238ladf8xjk92oi"; //From Fitbit's website when you sign up for an app
    $consumerSecret = "l8adl3halsdf82p9adfads2gjadsf"; //From Fitbit's website when you sign up for an app
    $oauth = new OAuth($consumerKey,$consumerSecret,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_AUTHORIZATION);
    
    $usersToken = "k28a9wifvnc89w2o8oigaad8e23r23jf";
    $usersSecret = "234o8fdofsy8df89aydfoyo84e2902af";
    $oauth->setToken($usersToken,$usersSecret);
    
    $subscriptionURL = "https://api.fitbit.com/1/user/-/activities/apiSubscriptions.json";
    
    try{
        //Send a POST to subscribe as stated on https://wiki.fitbit.com/display/API/Fitbit+Subscriptions+API
        $oauth->fetch($subscriptionURL, null, OAUTH_HTTP_METHOD_POST); 
        print_r(json_decode($oauth->getLastResponse())); // Make sure the request was successful 
    }
    catch(Exception $e){
        echo 'ERROR:';
        print_r($e);
        print_r($oauth->getRequestHeader('POST', $url));
    }
    

    您的订阅者 URL 端点应该是一个网页,其中您有一些代码可以接收 Fitbit 数据并执行您需要执行的任何操作。下面是一些可以帮助您入门的 PHP 代码。

    <?php   
    // Get the input data and create a PHP object to use.
    $fitbitPushData = file_get_contents("php://input");
    $fitbitData = json_decode($fitbitPushData);
    

    出于测试目的,我建议首先在 http://requestb.in/ 创建一个 RequestBin 并将其用作您的订阅者端点 URL。通过这种方式,您可以轻松查看有人同步时 Fitbit 发送的数据。您可以将该 JSON 字符串复制到您的订阅者 URL 端点代码,并在将您的站点设置为订阅端点 URL 之前测试您希望如何处理数据。

    我学到的其他一些经验教训:

    根据您拥有的用户数量,您可能希望您的订阅者 URL 位于不同的服务器上。每次用户同步他们的 Fitbit 时,都会点击此 URL,这可能会导致大量流量。如果 Fitbit 有 10% 或更多的时间失败或无法在 3 秒内响应,Fitbit 将禁用您的订阅者 URL。

    另一个重要的部分是,这不会向您发送用户的最新数据。它只会让您知道他们已经更新了他们的数据。您仍然需要发出 API 请求才能获取他们的最新数据。每个用户每小时只能发出 150 个 API 请求,因此最好限制检查每个用户的频率。我有一些用户经常同步,导致每小时都会收到来自 Fitbit 的电子邮件,指出我的应用程序已超出这些用户的速率限制。

    【讨论】:

    【解决方案2】:

    在使用 Fitbit Web API 时有几件事情需要牢记。这是我在整合过程中摸索出来的。

    • 订阅 URL 需要接受机器人 POST 和 GET 请求。验证 URL 时使用 GET 请求部分。 Fitbit 使用 verify 作为查询参数向订阅 URL 发出请求。

      https://test.demo.com/subscribe?verify=0fcf8334068f84392c2d248060555645b273ef1ada782b25d0ddcb9db32f57a6

      在服务器端,需要在验证成功时发送 204 响应状态,在失败时发送 404 响应状态。

      该路由通过 POST 请求接受通知及其 JSON 正文中的数据,您可以根据需要进行处理。响应状态应始终为 204。

    • 注册并验证您的订阅回调URL后,您需要通过Fitbit的订阅API添加订阅。

      https://api.fitbit.com/1/user/-/apiSubscriptions/someName.json

      如您所见,我没有传递任何导致所有类别都被订阅的类别。

      此请求必须使用授权承载方案发出,该方案利用您从服务器授权代码中获取的访问令牌。

      请求是没有正文的 POST 请求。

    • 获取访问令牌的 API 需要 x-www-form-urlencoded 方法。

    • 确保您不断从仪表板检查成功率。

    【讨论】:

    • 这是你服务器的url。
    猜你喜欢
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 2020-12-19
    • 2013-11-09
    • 2018-04-28
    • 2016-07-08
    • 2015-08-13
    • 2015-06-02
    相关资源
    最近更新 更多