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 dự án trong Google API Console và kích hoạt quyền truy cập vào Fitness REST API, 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 API Fitness bằng mã truy cập. Để nhận mã truy cập, ứng dụng của bạn sẽ bao gồm thông tin xác thực dành riêng cho ứng dụng khách và phạm vi truy cập, như mô tả trong phần Yêu cầu uỷ quyền.

Bước 3: Tạo một 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ể. Đã chèn tất cả dữ liệu vào kho 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 và sử dụng lại các nguồn dữ liệu đó cho các phiên trong tương lai.

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

Phương thức HTTP
SAU KHI TRIỂN KHAI
Tài nguyên

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

Mã nhận dạng người dùng me đề cập đến người dùng có mã truy cập cho phép 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 tạo một nguồn dữ liệu đại diện cho máy đo nhịp tim cung cấp dữ liệu 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ã nhận dạng này có thể là bất kỳ giá trị nào. 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. Bạn không bắt buộc phải sử dụng thành phần thiết bị nếu dữ liệu chỉ do một ứng dụng tạo ra.

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ề 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 các điểm dữ liệu vào cửa hàng 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, được giới hạn theo thời gian.

Để tạo một tập dữ liệu và thêm điểm vào tập dữ liệu đó, hãy gửi yêu cầu HTTP đã xác thực cùng với những thông tin này tham số:

Phương thức HTTP
GIẤY TỜ
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, thời gian bắt đầu và thời gian 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 tạo ra một tập dữ liệu gồm 3 điểm dữ liệu nhịp tim trong vòng một giờ cho dữ liệu nguồn ở 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ề 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

Giờ đây, khi đã chèn dữ liệu vào kho dữ liệu thể dục, bạn có thể chèn một phiên để 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ể chất.

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

Phương thức HTTP
ĐẶT
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à 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 các phiên hoạt động đượ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; việc này giúp dữ liệu nhất quán hơn và đảm bảo rằng hoạt động phân bổ dữ liệu sẽ liên kết 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 tần số 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 đoạn 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. 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 truy cập trong thời gian chạy một giờ, bạn có thể tạo phân đoạn hoạt động thuộc loại running (8) cho thuộc tính trong cả giờ. Nếu người dùng chạy trong 25 phút, nghỉ giải lao trong 5 phút, sau đó chạy thêm nửa phút nữa giờ, bạn có thể tạo ba phân đoạn hoạt động liên tiếp thuộc loại running, unknownrunning tương ứng.

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

Ví dụ sau đây tạo ra 3 phân đoạn (chạy, nghỉ và chạy) trong cùng một khung thời gian làm chỉ số tần số tim, giả sử bạn đã tạo một phân đoạn hoạt động nguồn dữ liệu 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
GIẤY TỜ
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 đoạn 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 đoạn hoạt động. Bạn có thể tạo một nguồn dữ liệu mới cho từng nhóm phân khúc, nhưng bạn nên sử dụng lại phiên bản 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, loại hoạt động này phải khớp với hoạt động tổng thể mà người dùng đang tham gia. Ngay cả khi người dùng nghỉ giải lao trong khi chạy, thì tổng thể bài tập thể dục vẫn là một lần chạy. Nhìn chung, loại hoạt động của phiên sẽ khớp với loại phân đoạn hoạt động chính.

Sử dụng loại hoạt động không xác định (4) để cho biết người dùng đang nghỉ ngơi, vì bạn có thể không phải 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 bạn biết người dùng hiện không di chuyển, bạn có thể sử dụng lệnh still (3).

Để biết danh sách chi tiết về 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; chèn điểm dữ liệu vào cửa hàng thể dục; tạo phân đoạn hoạt động để thể hiện các hoạt động diễn ra trong một bài tập thể dục; và 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 mà 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 thể hiện bài tập thể dục của người dùng.