获取咕咚运动移动应用中的数据——非官方API

本文介绍了如何通过反编译咕咚运动Android应用获取非官方API,涵盖了登录、用户运动成就、历史数据、智能配件相关数据和其他功能的API调用方法。示例代码展示了请求和响应格式,提供了获取用户积分、运动记录、奖章、睡眠数据等信息的方法。
摘要由CSDN通过智能技术生成

Author : iascchen(at)gmail(dot)com

Date : 2013-07-17

新浪微博 : @问天鼓


这些 API 通过对 Codoon 运动的 Android 版本 下载地址 进行了反编译所得到的,错误在所难免,随时可能失效,仅供大家学习和自娱自乐。

下面所列举的 API 均为读取运动数据相关的API。不包括其他发消息、发微博、更新状态等功能。

这个工作已经做了些日子,一直想等着用咕咚手环数据测试一下,所以没有写下来。不过照着目前网友们对咕咚手环的测试样品的评论来看,估计还需要一段时间才能有结果。申波在七月初参加2013移动互联网创新大会时透露 Codoon 官方的 API 要到明年才会开放。在目前这个过渡时期,大家可以用这个来玩玩吧。

详细内容如下:

  1. 概述和登录

  2. 用户运动成就

  3. 用户运动历史

  4. 智能配件相关 API(疑似)

  5. 其他

1. 概述和登录

客户端请求基本说明

Codoon App 一般通过 HTTP 协议与 api.codoon.com 通讯。在进行其他访问之前,必须先登录。可以用 Codoon 网注册用户通过 HTTP Basic 协议进行登陆。正确登录之后,在每次请求的HTTP中,需要将认证时的所获得 access_token 值设置到 HTTP Header:**Authorization** 里,即可保持会话。除此之外,还需要将**Charset**设置为 UTF-8。如:

Authorization : Bearer  4836c512060faa34793730959daa901f
Charset : UTF-8

Codoon App 还支持利用新浪微博、腾讯微博、人人网的用户,通过OAuth协议登录(这几种登录方式本文并未论述)。

带参数的请求

需要向 Server 端提交参数的请求,均需要采用 POST 方式传参。比较特殊的是,在 Codoon 的接口中,需要将参数需要转化为 JSON 之后,放在 POST 体中再提交。

下面的 Python 代码作为参考示例:

startDate = "2013-06-01"
endDate =  "2013-06-30"
command = "http://api.codoon.com/api/gps_statistic"

request_data = {"from_date" : fromDate , "to_date" : toDate}
response = requests.post(command , data = json.dumps(request_data),  headers = self.codoonHeaders )
content = json.loads(response.content)

利用 Codoon 网注册用户登录

登陆

Request:

POST    
http://api.codoon.com/token

Params:

# 下面两个参数为常量,说明登录方式
"grant_type" : "password" ,
"scope" : "user" ,

# Client_ID 的值为来自于应用的静态变量值。此处一般不需修改。
"client_id" : "dc039f07e003da02938a5bc4605b5acc" ,

# 您个人在 Codoon 网注册的Email地址和用户密码。
"email": email, 
"password" : password 

Return :

Access Token 值为 JSON 内容中的 "access_token" : "4836c512060faa34793730959daa901f"

完整JSON示例如下:

{
    "user_id": "bcf5ea34-891f-xxxx-a26f-496604a5xxxx", 
    "access_token": "4836c512060faa34793730959daa901f", 
    "token_type": "bearer", 
    "scope": "user", 
    "expire_in": 93312000, 
    "refresh_token": "fb17cfd5ab4b61ee23de1a4c28969fec"
}

获得最新可用 Android 软件版本信息

Request:

GET 
http://static.codoon.com/app/android/version_run.xml

Params:

Return :

完整XML示例如下:

<client>
    <version>53</version>
    <date>2013-07-10 18:33:59</date>
    <description>&#21653;&#21658;&#36816;&#21160;+&#23458;&#25143;&#31471;3.3.8</description>
    <app_name>codoonsportsv3.3.8.apk</app_name>
    <app_url>http://static.codoon.com/app/android/codoonsports.apk</app_url>
</client>

获得用户基本信息凭证

从数据上看,用户基本信息凭证所包含的数据主要在软件的“更多”页面中显示。

更多个人信息

Request:

GET 
http://api.codoon.com/verify_credentials

Params:

Return :

完整JSON示例如下:

{
    "get_icon_tiny": "http://img3.codoon.com/portraitce67a9da19db4d6ebf85f8eeb24d44f4!24m24", 
    "mobilenumber": "I1370574493782", 
    "domain": "~iyp2ix", 
    "certificatename": "", 
    "weight": 58.2, 
    "week_goal_value": 70000, 
    "get_icon_large": "http://img3.codoon.com/portraitce67a9da19db4d6ebf85f8eeb24d44f4!220m220", 
    "height": 160, 
    "_auto_id": 1053580, 
    "portrait": "http://img3.codoon.com/portraitce67a9da19db4d6ebf85f8eeb24d44f4", 
    "id": "bcf5ea34-891f-xxxx-a26f-496604a5xxxx", 
    "is_newuser": true, 
    "mobile_portraits": [], 
    "nick": "iascchen", 
    "descroption": "\u6ce1\u6ce1", 
    "followers": 0, 
    "location": "\u5317\u4eac ", 
    "last_login": 0, 
    "get_icon_middle": "http://img3.codoon.com/portraitce67a9da19db4d6ebf85f8eeb24d44f4!50m50", 
    "email": "iasc@163.com", 
    "certificateinfo": "", 
    "installed_apps": "CDN_SPORTS CDN_LEPHONERUN", 
    "realname": " ", 
    "emailverified": true, 
    "stridelength": 66, 
    "verify_code": "6281585409bf448eb8cae5b54da57253", 
    "birthday": {
        "y": 2013, 
        "m": 6, 
        "d": 9
    }, 
    "routes_count": 3, 
    "hobby": "\u8dd1\u6b65", 
    "get_icon_xlarge": "http://img3.codoon.com/portraitce67a9da19db4d6ebf85f8eeb24d44f4!640m640", 
    "fighting_level": 1, 
    "mobile_portraits_l": [], 
    "get_icon_small": "http://img3.codoon.com/portraitce67a9da19db4d6ebf85f8eeb24d44f4!40m40", 
    "gender": "0", 
    "followings": 1, 
    "week_goal_type": "steps", 
    "certificateid": "", 
    "mobile_portraits_x": [], 
    "runstridelength": 80, 
    "mobileverified": false, 
    "group_ids": "", 
    "tmp_portrait": "http://img3.codoon.com/portraitce67a9da19db4d6ebf85f8eeb24d44f4", 
    "age": 0, 
    "address": ""
}

2. 用户运动成就

用户成就积分

用户成就激励系统上的积分和卡币展示。

成就

Request:

GET
http://api.codoon.com/api/get_user_growing_point_related

Params:

Return :

{
    "status": "OK", 
    "data": {
        "fighting_level": 1, 
        "user_growing_point": 3, 
        "user_calbank_balance": 300
    }, 
    "description": ""
}

用户运动纪录

用户个人纪录显示。

纪录

Request:

GET
http://api.codoon.com/api/gps_highest_record

Params:

Return :

{
    "status": "OK", 
    "data": {
        "ride_record": {
            "route_count": 0
        }, 
        "run_record": {
            "route_count": 0
        }, 
        "ski_record": {
            "route_count": 0
        }, 
        "skate_record": {
            "route_count": 0
        }, 
        "walk_record": {
            "highest_speed_time": "2013-06-14T16:02:31", 
            "highest_time": 740.0, 
            "highest_speed": 10.15969, 
            "highest_length_time": "2013-06-24T18:39:10", 
            "highest_time_time": "2013-06-24T18:39:10", 
            "route_count": 3, 
            "highest_kmspeed": 643, 
            "highest_kmspeed_time": "2013-06-24T18:39:10", 
            "highest_length": 1160
        }
    }, 
    "description": ""
}

用户奖章

用户奖章展示。

勋章

Request:

GET
http://api.codoon.com/api/get_user_medal

Params:

Return :

返回结果会将所有用户可能获得的勋章均列出来。如果用户已经拥有这个勋章,"data"."medals"."owned" 取值为 true.

{
    "status": "OK", 
    "data": [
        {
            "total_count": 7, 
            "owend_count": 0, 
            "display_group": 0, 
            "medals": [
                {
                    "code": "01", 
                    "des": "\u4f60\u7d2f\u8ba1\u8fd0\u52a87\u6b21\uff0c\u83b7\u5f97\u8be5\u679a\u5956\u7ae0 \u6210\u5c31\u70b9+2", 
                    "name": "\u5e78\u8fd07", 
                    "owned": false, 
                    "gpoint": 2
                }, 
                {
                    "code": "02", 
                    "des": "\u4f60\u7d2f\u8ba1\u8fd0\u52a815\u6b21\uff0c\u83b7\u5f97\u8be5\u679a\u5956\u7ae0 \u6210\u5c31\u70b9+3", 
                    "name": "\u575a\u6301\u8fd0\u52a8", 
                    "owned": false, 
                    "gpoint": 3
                }, 
                {
                    "code": "03", 
                    "des": "\u4f60\u7d2f\u8ba1\u8fd0\u52a821\u6b21\uff0c\u83b7\u5f97\u8be5\u679a\u5956\u7ae0 \u6210\u5c31\u70b9+5", 
                    "name": "\u4e60\u60ef\u8fd0\u52a8", 
                    "owned": false, 
                    "gpoint": 5
                }, 
                {
                    "code": "04", 
                    "des": "\u4f60\u7d2f\u8ba1\u8fd0\u52a830\u6b21\uff0c\u83b7\u5f97\u8be5\u679a\u5956\u7ae0 \u6210\u5c31\u70b9+10", 
                    "name": "\u7231\u4e0a\u8fd0\u52a8", 
                    "owned": false, 
                    "gpoint": 10
                }, 
                {
                    "code": "05", 
                    "des": "\u4f60\u7d2f\u8ba1\u8fd0\u52a860\u6b21\uff0c\u83b7\u5f97\u8be5\u679a\u5956\u7ae0 \u6210\u5c31\u70b9+10", 
                    "name": "60\u6b21\u8fd0\u52a8", 
                    "owned": false, 
                    "gpoint": 10
                }, 
                {
                    "code": "06", 
                    "des": "\u4f60\u7d2f\u8ba1\u8fd0\u52a890\u6b21\uff0c\u83b7\u5f97\u8be5\u679a\u5956\u7ae0 \u6210\u5c31\u70b9+10", 
                    "name": "90\u6b21\u8fd0\u52a8", 
                    "owned": false, 
                    "gpoint": 10
                }, 
                {
                    "code": "07", 
                    "des": "\u4f60\u7d2f\u8ba1\u8fd0\u52a8120\u6b21\uff0c\u83b7\u5f97\u8be5\u679a\u5956\u7ae0 \u6210\u5c31\u70b9+10", 
                    "name": "120\u6b21\u8fd0\u52a8", 
                    "owned": false, 
                    "gpoint": 10
                }
            ], 
            "display_group_name": "\u6b21\u6570\u5956\u7ae0"
        }, 
        {
            "total_count": 10, 
            "owend_count": 1, 
            "display_group": 1, 
            "medals": [
                {
                    "code": "10", 
                    "name": "\u8fc8\u51fa\u7b2c\u4e00\u6b65", 
                    "des": "\u4f60\u8fc8\u51fa\u8fd0\u52a8\u7684\u7b2c\u4e00\u6b65\uff0c\u5b8c\u6210\u4efb\u610f\u8fd0\u52a81\u516c\u91cc\uff0c\u83b7\u5f97\u8be5\u679a\u5956\u7ae0 \u6210\u5c31\u70b9+1", 
                    "gpoint": 1, 
                    "owned": true, 
                    "time": "2013-06-24 18:51:43"
                }, 
                {
                    "code": "11", 
                    "des": "\u4f60\u4e00\u6b21\u8dd1\u6b65/\u8d70\u8def\u8fd0\u52a8\u8fbe\u52305\u516c\u91cc\uff0c\u83b7\u5f97\u8be5\u679a\u5956\u7ae0 \u6210\u5c31\u70b9+2", 
                    "name": "\u6162\u8dd15\u516c\u91cc", 
                    "owned": false, 
                    "gpoint": 2
                }, 
                {
                    "code": "12", 
                    "des": "\u4f60\u4e00\u6b21\u8dd1
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值