tanita-api-client 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/Gemfile +5 -1
- data/Gemfile.lock +13 -1
- data/README.md +79 -5
- data/lib/tanita/api/client.rb +27 -5
- data/lib/tanita/api/client/base.rb +16 -12
- data/lib/tanita/api/client/configuration.rb +24 -0
- data/lib/tanita/api/client/version.rb +1 -1
- data/tanita-api-client.gemspec +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0325b0624c8b82bbec750574aaf9330352520598be1a35d7992389807477af0d
|
4
|
+
data.tar.gz: d976f86f33c4e72c89009dd5e474d62834c570316ebb4ce712c379aa04b1792c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7a6f768eedd5365e0381162ebe5f40f3dda5ca70b5c7623dd7c5b1d3a99990181ffa27f75a73d41895cbb470b9d40db125885bc86463ff3585e4d845e85745c
|
7
|
+
data.tar.gz: acd0893e68b74525c66b8834df29d00f94c006b0845ec607f773015776612f5f2245432069087306bc0305a333e814bf6896dce44e8f1a9f8814e86c9fb0c34a
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,17 +1,23 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
tanita-api-client (0.1.
|
4
|
+
tanita-api-client (0.1.1)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
+
addressable (2.7.0)
|
10
|
+
public_suffix (>= 2.0.2, < 5.0)
|
9
11
|
ast (2.4.0)
|
12
|
+
crack (0.4.3)
|
13
|
+
safe_yaml (~> 1.0.0)
|
10
14
|
diff-lcs (1.3)
|
15
|
+
hashdiff (1.0.0)
|
11
16
|
jaro_winkler (1.5.4)
|
12
17
|
parallel (1.19.1)
|
13
18
|
parser (2.7.0.1)
|
14
19
|
ast (~> 2.4.0)
|
20
|
+
public_suffix (4.0.3)
|
15
21
|
rainbow (3.0.0)
|
16
22
|
rake (10.5.0)
|
17
23
|
rspec (3.9.0)
|
@@ -35,7 +41,12 @@ GEM
|
|
35
41
|
ruby-progressbar (~> 1.7)
|
36
42
|
unicode-display_width (>= 1.4.0, < 1.7)
|
37
43
|
ruby-progressbar (1.10.1)
|
44
|
+
safe_yaml (1.0.5)
|
38
45
|
unicode-display_width (1.6.0)
|
46
|
+
webmock (3.7.6)
|
47
|
+
addressable (>= 2.3.6)
|
48
|
+
crack (>= 0.3.2)
|
49
|
+
hashdiff (>= 0.4.0, < 2.0.0)
|
39
50
|
|
40
51
|
PLATFORMS
|
41
52
|
ruby
|
@@ -46,6 +57,7 @@ DEPENDENCIES
|
|
46
57
|
rspec (~> 3.0)
|
47
58
|
rubocop
|
48
59
|
tanita-api-client!
|
60
|
+
webmock
|
49
61
|
|
50
62
|
BUNDLED WITH
|
51
63
|
2.1.3
|
data/README.md
CHANGED
@@ -1,7 +1,18 @@
|
|
1
1
|
# Tanita::Api::Client
|
2
2
|
|
3
|
-
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/tanita/api/client`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
3
|
|
4
|
+
## About
|
5
|
+
|
6
|
+
These client libraries are created for [Tanita Health Planet](https://www.healthplanet.jp/) APIs.
|
7
|
+
|
8
|
+
refs: [Health Planet API Doc](https://www.healthplanet.jp/apis/api.html) (only Japanese)
|
9
|
+
|
10
|
+
### Setup
|
11
|
+
|
12
|
+
There are a few setup steps you need to complete before you can use this library:
|
13
|
+
|
14
|
+
1. If you don't already have a Health Planet account, [sign up](https://www.healthplanet.jp/entry_agreement.do).
|
15
|
+
2. If you have never created a developer application, read the [API Settings page](https://www.healthplanet.jp/apis_account.do) and be enable API.
|
5
16
|
|
6
17
|
## Installation
|
7
18
|
|
@@ -21,13 +32,76 @@ Or install it yourself as:
|
|
21
32
|
|
22
33
|
## Usage
|
23
34
|
|
24
|
-
|
35
|
+
### Usage OAuth Helper
|
25
36
|
|
26
|
-
|
37
|
+
The library needs to be configured with your account's OAuth settings which is available in your Health Planet Api Settings page.
|
38
|
+
Set `client_id` `client_secret` `redirect_uri` `scopes` to its value:
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
|
42
|
+
# OAuth configuration using configure method
|
43
|
+
Tanita::Api::Client.configure do |config|
|
44
|
+
config.client_id = '<YOUR_CLIENT_ID>'
|
45
|
+
config.client_secret = '<YOUR_CLIENT_SECRET>'
|
46
|
+
config.redirect_uri = 'http://your-redirect-uri'
|
47
|
+
config.scopes = [Tanita::Api::Client::Scope::INNERSCAN]
|
48
|
+
end
|
49
|
+
auth_helper = Tanita::Api::Client::Auth.new
|
50
|
+
|
51
|
+
# OAuth configuration using initializer
|
52
|
+
auth_helper = Tanita::Api::Client::Auth.new(
|
53
|
+
client_id: '<YOUR_CLIENT_ID>',
|
54
|
+
client_secret: '<YOUR_CLIENT_SECRET>',
|
55
|
+
redirect_uri: 'http://your-redirect-uri',
|
56
|
+
scopes: Tanita::Api::Client::Scope.all
|
57
|
+
)
|
58
|
+
```
|
27
59
|
|
28
|
-
|
60
|
+
Below is the sample get an authentication url and exchange access token from an authentication code.
|
29
61
|
|
30
|
-
|
62
|
+
```ruby
|
63
|
+
# get Tanita authentication url
|
64
|
+
auth_helper.auth_uri
|
65
|
+
=> "https://www.healthplanet.jp/oauth/auth?client_id=YOUR_ID&redirect_uri=http%3A%2F%2F127.0.0.1%2Fcallback&scope=innerscan&response_type=code"
|
66
|
+
|
67
|
+
# get access token
|
68
|
+
token = auth_helper.exchange_token(auth_code: '<AUTHENTICATION_CODE>')
|
69
|
+
=> {:access_token=>"hoge_access_token", :expires_in=>12345678, :refresh_token=>"hoge_refresh_token"}
|
70
|
+
```
|
71
|
+
|
72
|
+
### Usage Apis Client
|
73
|
+
|
74
|
+
The Api client needs access token.
|
75
|
+
Set `access_token` to the value you got by above:
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
# using configure
|
79
|
+
Tanita::Api::Client.configure do |config|
|
80
|
+
config.access_token = '<YOUR_ACCESS_TOKEN>'
|
81
|
+
end
|
82
|
+
api = Tanita::Api::Client::Innerscan.new
|
83
|
+
|
84
|
+
# using initializer
|
85
|
+
api = Tanita::Api::Client::Innerscan.new(access_token: '<YOUR_ACCESS_TOKEN>')
|
86
|
+
|
87
|
+
# fetch innerscan data
|
88
|
+
result = api.status
|
89
|
+
|
90
|
+
# you can specify a period using params(from:, to:)
|
91
|
+
result = api.status(from: Date.current.ago(1.month), to: Date.current)
|
92
|
+
|
93
|
+
# list the body-weight data
|
94
|
+
result.data.each{|item| puts "#{item[:date]} #{item[:weight]}" }
|
95
|
+
>> result.data.each{|item| puts "#{item[:date]} #{item[:weight]}" }
|
96
|
+
201910070753 66.70
|
97
|
+
201910070917 66.00
|
98
|
+
201910080739 66.40
|
99
|
+
201910090806 66.20
|
100
|
+
201910090852 65.50
|
101
|
+
201910100809 66.70
|
102
|
+
201910110902 66.50
|
103
|
+
201910130822 66.70
|
104
|
+
```
|
31
105
|
|
32
106
|
## Contributing
|
33
107
|
|
data/lib/tanita/api/client.rb
CHANGED
@@ -2,19 +2,32 @@
|
|
2
2
|
|
3
3
|
require 'tanita/api/client/base'
|
4
4
|
require 'tanita/api/client/helpers'
|
5
|
+
require 'tanita/api/client/configuration'
|
5
6
|
require 'tanita/api/client/version'
|
6
7
|
|
7
8
|
module Tanita
|
8
9
|
module Api
|
9
10
|
module Client
|
11
|
+
class << self
|
12
|
+
def configure
|
13
|
+
yield configuration
|
14
|
+
end
|
15
|
+
|
16
|
+
def configuration
|
17
|
+
@configuration ||= Tanita::Api::Client::Configuration.new
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
10
21
|
class Auth
|
11
22
|
include HttpHelper
|
12
23
|
|
13
|
-
def initialize(client_id
|
14
|
-
|
15
|
-
@
|
16
|
-
@
|
17
|
-
@
|
24
|
+
def initialize(client_id: nil, client_secret: nil, redirect_uri: nil, scopes: nil)
|
25
|
+
config = Tanita::Api::Client.configuration
|
26
|
+
@client_id = client_id || config.client_id
|
27
|
+
@client_secret = client_secret || config.client_secret
|
28
|
+
@redirect_uri = redirect_uri || config.redirect_uri
|
29
|
+
@scopes = scopes || config.scopes
|
30
|
+
check_required_arguments
|
18
31
|
end
|
19
32
|
|
20
33
|
def auth_uri
|
@@ -42,6 +55,15 @@ module Tanita
|
|
42
55
|
|
43
56
|
token
|
44
57
|
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def check_required_arguments
|
62
|
+
raise Error.new("param:'client_id' is required.'") if @client_id.nil?
|
63
|
+
raise Error.new("param:'client_secret' is required.'") if @client_secret.nil?
|
64
|
+
raise Error.new("param:'redirect_uri' is required.'") if @redirect_uri.nil?
|
65
|
+
raise Error.new("param:'scopes' is required.'") if @scopes.nil?
|
66
|
+
end
|
45
67
|
end
|
46
68
|
|
47
69
|
class Innerscan < BaseApiClient
|
@@ -10,6 +10,9 @@ module Tanita
|
|
10
10
|
SPHYGMOMANOMETER = 'sphygmomanometer'
|
11
11
|
PEDOMETER = 'pedometer'
|
12
12
|
SMUG = 'smug'
|
13
|
+
def self.all
|
14
|
+
constants.map { |name| const_get(name) }
|
15
|
+
end
|
13
16
|
end
|
14
17
|
|
15
18
|
class Error < StandardError
|
@@ -21,16 +24,10 @@ module Tanita
|
|
21
24
|
DATE_REGISTERD_AT = 0
|
22
25
|
DATE_MEASURED_AT = 1
|
23
26
|
|
24
|
-
def initialize(access_token:)
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
def endpoint
|
29
|
-
raise NotImplementedError
|
30
|
-
end
|
31
|
-
|
32
|
-
def measurement_tags
|
33
|
-
raise NotImplementedError
|
27
|
+
def initialize(access_token: nil)
|
28
|
+
config = Tanita::Api::Client.configuration
|
29
|
+
@access_token = access_token || config.access_token
|
30
|
+
raise Error.new("param:'access_token' is required.'") if @access_token.nil?
|
34
31
|
end
|
35
32
|
|
36
33
|
def status(
|
@@ -46,11 +43,18 @@ module Tanita
|
|
46
43
|
}
|
47
44
|
params[:from] = time_format(from) unless from.nil?
|
48
45
|
params[:to] = time_format(to) unless to.nil?
|
49
|
-
|
50
46
|
res = request(endpoint, params)
|
51
47
|
Result.new(:response => res, :client => self)
|
52
48
|
end
|
53
49
|
|
50
|
+
def endpoint
|
51
|
+
raise NotImplementedError
|
52
|
+
end
|
53
|
+
|
54
|
+
def measurement_tags
|
55
|
+
raise NotImplementedError
|
56
|
+
end
|
57
|
+
|
54
58
|
private
|
55
59
|
|
56
60
|
def time_format(time)
|
@@ -92,7 +96,7 @@ module Tanita
|
|
92
96
|
data_dic[key][measurement] = value
|
93
97
|
end
|
94
98
|
# sort by date in ascending order
|
95
|
-
@data = data_dic.values { |dic|
|
99
|
+
@data = data_dic.values.sort_by { |dic| dic[:date] }
|
96
100
|
end
|
97
101
|
end
|
98
102
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tanita
|
4
|
+
module Api
|
5
|
+
module Client
|
6
|
+
class Configuration
|
7
|
+
# [String]
|
8
|
+
attr_accessor :client_id
|
9
|
+
|
10
|
+
# [String]
|
11
|
+
attr_accessor :client_secret
|
12
|
+
|
13
|
+
# [String]
|
14
|
+
attr_accessor :redirect_uri
|
15
|
+
|
16
|
+
# [String]
|
17
|
+
attr_accessor :access_token
|
18
|
+
|
19
|
+
# [Array<Tanita::Api::Client::Scope>]
|
20
|
+
attr_accessor :scopes
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/tanita-api-client.gemspec
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
|
|
15
15
|
|
16
16
|
spec.metadata["homepage_uri"] = spec.homepage
|
17
17
|
spec.metadata["source_code_uri"] = "https://github.com/koshilife/tanita-api-ruby-client"
|
18
|
-
spec.metadata["changelog_uri"] = "#{spec.metadata["source_code_uri"]}/CHANGELOG.md"
|
18
|
+
spec.metadata["changelog_uri"] = "#{spec.metadata["source_code_uri"]}/blob/master/CHANGELOG.md"
|
19
19
|
|
20
20
|
# Specify which files should be added to the gem when it is released.
|
21
21
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tanita-api-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kenji Koshikawa
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-01-
|
11
|
+
date: 2020-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -76,6 +76,7 @@ files:
|
|
76
76
|
- bin/setup
|
77
77
|
- lib/tanita/api/client.rb
|
78
78
|
- lib/tanita/api/client/base.rb
|
79
|
+
- lib/tanita/api/client/configuration.rb
|
79
80
|
- lib/tanita/api/client/helpers.rb
|
80
81
|
- lib/tanita/api/client/version.rb
|
81
82
|
- tanita-api-client.gemspec
|
@@ -85,7 +86,7 @@ licenses:
|
|
85
86
|
metadata:
|
86
87
|
homepage_uri: https://github.com/koshilife/tanita-api-ruby-client
|
87
88
|
source_code_uri: https://github.com/koshilife/tanita-api-ruby-client
|
88
|
-
changelog_uri: https://github.com/koshilife/tanita-api-ruby-client/CHANGELOG.md
|
89
|
+
changelog_uri: https://github.com/koshilife/tanita-api-ruby-client/blob/master/CHANGELOG.md
|
89
90
|
post_install_message:
|
90
91
|
rdoc_options: []
|
91
92
|
require_paths:
|