Cách ghi lại bài tập thể dục

Tài liệu này mô tả cách ghi lại bài tập thể dục bằng API Fitness REST.

Bước 1: Thiết lập dự án

Bạn cần thiết lập một dự án trong Bảng điều khiển API của Google và kích hoạt quyền truy cập vào API REST của thể dục, như mô tả trong phần Bắt đầu.

Bước 2: Xác thực ứng dụng

Ứng dụng của bạn cần xác thực các yêu cầu tới Fitness API bằng mã truy cập. Để lấy mã truy cập, ứng dụng sẽ bao gồm thông tin đăng nhập dành riêng cho ứng dụng và phạm vi truy cập, như mô tả trong phần Uỷ quyền yêu cầu.

Bước 3: Tạo nguồn dữ liệu

Nguồn dữ liệu đại diện cho nguồn dữ liệu cảm biến thuộc một loại cụ thể. Tất cả dữ liệu được chèn vào kho lưu trữ dữ liệu thể dục phải được liên kết với một nguồn dữ liệu. Bạn có thể tạo nguồn dữ liệu một lần rồi sử dụng lại cho các phiên trong tương lai.

Để tạo nguồn dữ liệu, hãy gửi yêu cầu HTTP đã xác thực kèm theo các tham số sau:

Phương thức HTTP
POST
Tài nguyên

https://www.googleapis.com/fitness/v1/users/me/dataSources

Mã nhận dạng người dùng me là người dùng có mã truy cập cho phép thực hiện yêu cầu.

Nội dung yêu cầu
{
"name": "example-fit-heart-rate",
"dataStreamId":
    "raw:com.google.heart_rate.bpm:1234567890:Example Fit:example-fit-hrm-1:123456",
"dataType": {
    "field": [{
        "name": "bpm",
        "format": "floatPoint"
    }],
    "name": "com.google.heart_rate.bpm"
},
"application": {
    "packageName": "com.example.fit.someapp",
    "version": "1.0"
},
"device": {
    "model": "example-fit-hrm-1",
    "version": "1",
    "type": "watch",
    "uid": "123456",
    "manufacturer":"Example Fit"
},
"type": "raw"
}

Yêu cầu này sẽ tạo một nguồn dữ liệu đại diện cho thiết bị đo nhịp tim, cung cấp dữ liệu hoạt động thể dục thuộc loại com.google.heart_rate.bpm. Bạn phải chỉ định mã nhận dạng của nguồn dữ liệu và mã đó có thể là giá trị bất kỳ. Mã nguồn dữ liệu trong ví dụ này tuân theo một quy ước đặt tên hợp lý mà bạn có thể áp dụng. Không bắt buộc phải có thành phần thiết bị nếu dữ liệu chỉ do một ứng dụng tạo.

Nếu yêu cầu thành công, phản hồi sẽ là mã trạng thái 200 OK.

Để biết thêm thông tin về các nguồn dữ liệu, hãy xem tài liệu tham khảo API cho tài nguyên Users.dataSources.

Bước 4: Thêm điểm dữ liệu

Bạn sử dụng tập dữ liệu để chèn điểm dữ liệu vào kho dữ liệu thể dục. Tập dữ liệu là một tập hợp các điểm dữ liệu từ một nguồn dữ liệu duy nhất bị giới hạn theo thời gian.

Để tạo tập dữ liệu và thêm các điểm vào tập dữ liệu đó, hãy gửi yêu cầu HTTP đã xác thực bằng các tham số sau:

Phương thức HTTP
PATCH
Tài nguyên

https://www.googleapis.com/fitness/v1/users/me/dataSources/
raw:com.google.heart_rate.bpm:1234567890:Example%20Fit:example-fit-hrm-1:123456/datasets/1411053997000000000-1411057556000000000

URL này bao gồm mã nguồn dữ liệu, cũng như thời gian bắt đầu và kết thúc của tập dữ liệu tính bằng nano giây.

Nội dung yêu cầu
{
"minStartTimeNs": 1411053997000000000,
"maxEndTimeNs": 1411057556000000000,
"dataSourceId":
  "raw:com.google.heart_rate.bpm:1234567890:Example Fit:example-fit-hrm-1:123456",
"point": [
{
  "startTimeNanos": 1411053997000000000,
  "endTimeNanos": 1411053997000000000,
  "dataTypeName": "com.google.heart_rate.bpm",
  "value": [
    {
      "fpVal": 78.8
    }
  ]
},
{
  "startTimeNanos": 1411055000000000000,
  "endTimeNanos": 1411055000000000000,
  "dataTypeName": "com.google.heart_rate.bpm",
  "value": [
    {
      "fpVal": 89.1
    }
  ]
},
{
  "startTimeNanos": 1411057556000000000,
  "endTimeNanos": 1411057556000000000,
  "dataTypeName": "com.google.heart_rate.bpm",
  "value": [
    {
      "fpVal": 62.45
    }
  ]
}
]
}

Yêu cầu này sẽ tạo một tập dữ liệu có 3 điểm dữ liệu nhịp tim trong vòng một giờ cho nguồn dữ liệu ở bước trước.

Nếu yêu cầu thành công, phản hồi sẽ là mã trạng thái 200 OK.

Để biết thêm thông tin về các tập dữ liệu, hãy xem tài liệu tham khảo API cho tài nguyên Users.dataSources.datasets.

Tạo dấu thời gian hợp lệ

Dấu thời gian trong ví dụ trên được tính bằng nano giây. Để tạo dấu thời gian hợp lệ, bạn có thể sử dụng tập lệnh Python sau:

from datetime import datetime, timedelta
import calendar

def date_to_nano(ts):
    """
    Takes a datetime object and returns POSIX UTC in nanoseconds
    """
    return calendar.timegm(ts.utctimetuple()) * int(1e9)

if __name__ == '__main__':
    print 'Current time is %d' % date_to_nano(datetime.now())
    print 'Time 1 hour ago was %d' % date_to_nano(datetime.now() +
       timedelta(hours=-1))

Bước 5: Tạo một phiên

Bây giờ, sau khi đã chèn dữ liệu vào kho lưu trữ dữ liệu thể dục, bạn có thể chèn một phiên hoạt động để cung cấp thêm siêu dữ liệu cho bài tập thể dục này. Phiên hoạt động biểu thị khoảng thời gian người dùng thực hiện một hoạt động thể dục.

Để tạo phiên cho bài tập thể dục này, hãy gửi yêu cầu HTTP đã xác thực kèm theo các tham số sau:

Phương thức HTTP
PUT
Tài nguyên

https://www.googleapis.com/fitness/v1/users/me/sessions/sessionId

sessionId là tuỳ ý và phải là duy nhất cho tất cả các phiên liên kết với người dùng đã xác thực.

Nội dung yêu cầu
{
"id": "example-fit-1411053997",
"name": "Example Fit Run on Sunday Afternoon",
"description": "Example Fit Running Session",
"startTimeMillis": 1411053997000,
"endTimeMillis": 1411057556000,
"application": {
"name": "Foo Example App",
"version": "1.0"
},
"activityType": 8
}

Chọn tên phiên dễ đọc và dễ mô tả, vì các ứng dụng khác có thể sử dụng tên này để tóm tắt phiên. Thời gian bắt đầu và kết thúc của phiên được tính bằng mili giây (không phải nano giây). Sử dụng cùng một tên gói cho các phiên và nguồn dữ liệu của bạn; điều này giúp dữ liệu nhất quán hơn và đảm bảo rằng mô hình phân bổ dữ liệu sẽ liên kết trở lại với ứng dụng của bạn.

Khoảng thời gian được chỉ định trong phiên này bao gồm dữ liệu nhịp tim được chèn trước đó, vì vậy, Google Fit liên kết các điểm dữ liệu đó với phiên này.

Để biết thêm thông tin về phiên, hãy xem tài liệu tham khảo API cho tài nguyên Users.sessions.

Bước 6: Tạo phân khúc hoạt động

Phân đoạn hoạt động giúp bạn trình bày nhiều hoạt động trong một phiên hoạt động. Phân đoạn hoạt động là một phân đoạn thời gian bao gồm một hoạt động. Ví dụ: nếu người dùng chạy trong một giờ, bạn có thể tạo một phân đoạn hoạt động thuộc loại running (8) cho toàn bộ giờ. Nếu người dùng chạy trong 25 phút, nghỉ giải lao trong 5, sau đó chạy thêm nửa giờ nữa, bạn có thể tạo 3 phân đoạn hoạt động liên tiếp thuộc loại running, unknownrunning tương ứng.

Việc tạo một phân đoạn hoạt động cũng giống như việc thêm bất kỳ điểm dữ liệu nào khác. Để tạo phân khúc hoạt động, trước tiên hãy tạo một nguồn dữ liệu phân khúc hoạt động, sau đó tạo một tập dữ liệu và thêm các điểm dữ liệu về phân khúc hoạt động vào tập dữ liệu đó.

Ví dụ sau đây sẽ tạo 3 phân đoạn (chạy, nghỉ ngơi và chạy bộ) trong cùng khung thời gian với chỉ số nhịp tim, giả sử bạn đã tạo nguồn dữ liệu phân đoạn hoạt động và mã nguồn dữ liệu là "raw:com.google.activity.segment:1234567890:Example Fit:example-fit-hrm-1:123456":

Phương thức HTTP
PATCH
Tài nguyên
https://www.googleapis.com/fitness/v1/users/me/dataSources/
raw:com.google.activity.segment:1234567890/datasets/1411053997000000000-1411057556000000000
Nội dung yêu cầu
{
"minStartTimeNs": 1411053997000000000,
"maxEndTimeNs": 1411057556000000000,
"dataSourceId":
  "raw:com.google.activity.segment:1234567890",
"point": [
{
  "startTimeNanos": 1411053997000000000,
  "endTimeNanos": 1411053997000000000,
  "dataTypeName": "com.google.activity.segment",
  "value": [
    {
      "intVal": 8
    }
  ]
},
{
  "startTimeNanos": 1411055000000000000,
  "endTimeNanos": 1411055000000000000,
  "dataTypeName": "com.google.activity.segment",
  "value": [
    {
      "intVal": 4
    }
  ]
},
{
  "startTimeNanos": 1411057556000000000,
  "endTimeNanos": 1411057556000000000,
  "dataTypeName": "com.google.activity.segment",
  "value": [
    {
      "intVal": 8
    }
  ]
}
]
}

Các điểm dữ liệu phân khúc hoạt động này được thêm vào một nguồn dữ liệu được tạo riêng để xử lý các phân khúc hoạt động. Bạn có thể tạo nguồn dữ liệu mới cho từng tập hợp phân đoạn, nhưng bạn nên sử dụng lại nguồn dữ liệu dành riêng cho một loại phiên cụ thể, chẳng hạn như chạy.

Phiên hoạt động chỉ định một loại hoạt động phải phù hợp với hoạt động tổng thể mà người dùng tham gia. Ngay cả khi người dùng nghỉ giải lao trong khi chạy, thì bài tập thể dục tổng thể vẫn là một lượt chạy. Nhìn chung, loại hoạt động cho phiên sẽ khớp với loại phân đoạn hoạt động nổi bật.

Sử dụng loại hoạt động không xác định (4) để cho biết người dùng đang nghỉ, vì bạn có thể không biết người dùng đang làm gì: họ có thể đứng yên hoặc giãn cơ, uống nước, v.v. Nếu biết người dùng không di chuyển, bạn có thể sử dụng lệnh still (3).

Để biết danh sách chi tiết các loại hoạt động, hãy xem phần Loại hoạt động.

Tóm tắt

Trong hướng dẫn này, bạn đã tạo nguồn dữ liệu cho các loại dữ liệu và phân đoạn hoạt động; bạn đã chèn các điểm dữ liệu vào kho lưu trữ thể dục; bạn đã tạo các phân đoạn hoạt động để biểu thị nhiều hoạt động diễn ra trong một bài tập thể dục; và bạn đã chèn một phiên bao gồm toàn bộ bài tập thể dục.

Google Fit liên kết dữ liệu bạn đã chèn và mọi dữ liệu khác có sẵn trong khoảng thời gian đó với một phiên hoạt động đại diện cho bài tập thể dục của người dùng.