Author : iascchen(at)gmail(dot)com
Date : 2013-07-17
新浪微博 : @问天鼓
这些 API 通过对 Codoon 运动的 Android 版本 下载地址 进行了反编译所得到的,错误在所难免,随时可能失效,仅供大家学习和自娱自乐。
下面所列举的 API 均为读取运动数据相关的API。不包括其他发消息、发微博、更新状态等功能。
这个工作已经做了些日子,一直想等着用咕咚手环数据测试一下,所以没有写下来。不过照着目前网友们对咕咚手环的测试样品的评论来看,估计还需要一段时间才能有结果。申波在七月初参加2013移动互联网创新大会时透露 Codoon 官方的 API 要到明年才会开放。在目前这个过渡时期,大家可以用这个来玩玩吧。
详细内容如下:
-
概述和登录
-
用户运动成就
-
用户运动历史
-
智能配件相关 API(疑似)
-
其他
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>咕咚运动+客户端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