everlog 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +4 -0
  5. data/Guardfile +8 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +29 -0
  8. data/Rakefile +1 -0
  9. data/everlog.gemspec +33 -0
  10. data/lib/everlog.rb +42 -0
  11. data/lib/everlog/app.rb +15 -0
  12. data/lib/everlog/app/animetick.rb +14 -0
  13. data/lib/everlog/app/evernote.rb +9 -0
  14. data/lib/everlog/app/github.rb +9 -0
  15. data/lib/everlog/app/hatena.rb +13 -0
  16. data/lib/everlog/app/moves.rb +9 -0
  17. data/lib/everlog/app/twitter.rb +11 -0
  18. data/lib/everlog/app/weather.rb +9 -0
  19. data/lib/everlog/dom.rb +9 -0
  20. data/lib/everlog/dom/entity.rb +11 -0
  21. data/lib/everlog/dom/entity/config.rb +30 -0
  22. data/lib/everlog/dom/entity/content.erb +170 -0
  23. data/lib/everlog/dom/entity/content.rb +14 -0
  24. data/lib/everlog/dom/module.rb +6 -0
  25. data/lib/everlog/dom/module/github.rb +28 -0
  26. data/lib/everlog/dom/module/moves.rb +26 -0
  27. data/lib/everlog/dom/repository.rb +5 -0
  28. data/lib/everlog/dom/repository/evernote.rb +24 -0
  29. data/lib/everlog/dom/service.rb +5 -0
  30. data/lib/everlog/dom/service/nullobject.rb +18 -0
  31. data/lib/everlog/dom/value.rb +18 -0
  32. data/lib/everlog/dom/value/animetick.rb +25 -0
  33. data/lib/everlog/dom/value/github.rb +6 -0
  34. data/lib/everlog/dom/value/github/activity.rb +18 -0
  35. data/lib/everlog/dom/value/github/commit.rb +13 -0
  36. data/lib/everlog/dom/value/hatena.rb +20 -0
  37. data/lib/everlog/dom/value/moves.rb +16 -0
  38. data/lib/everlog/dom/value/moves/move.rb +31 -0
  39. data/lib/everlog/dom/value/moves/place.rb +13 -0
  40. data/lib/everlog/dom/value/moves/referer.rb +10 -0
  41. data/lib/everlog/dom/value/moves/referer/move.rb +7 -0
  42. data/lib/everlog/dom/value/moves/referer/place.rb +8 -0
  43. data/lib/everlog/dom/value/moves/summary.rb +30 -0
  44. data/lib/everlog/dom/value/twitter.rb +13 -0
  45. data/lib/everlog/dom/value/weather.rb +31 -0
  46. data/lib/everlog/inf.rb +5 -0
  47. data/lib/everlog/inf/api.rb +20 -0
  48. data/lib/everlog/inf/api/animetick.rb +25 -0
  49. data/lib/everlog/inf/api/evernote.rb +37 -0
  50. data/lib/everlog/inf/api/github.rb +26 -0
  51. data/lib/everlog/inf/api/googlemap.rb +15 -0
  52. data/lib/everlog/inf/api/hatena.rb +20 -0
  53. data/lib/everlog/inf/api/moves.rb +21 -0
  54. data/lib/everlog/inf/api/twitter.rb +26 -0
  55. data/lib/everlog/inf/api/wunderground.rb +15 -0
  56. data/lib/everlog/version.rb +3 -0
  57. data/spec/fixtures/animetick/list_ticket_response.json +1 -0
  58. data/spec/fixtures/hatena/feed_response.json +80 -0
  59. data/spec/fixtures/moves/daily_storyline_response.json +319 -0
  60. data/spec/fixtures/moves/daily_summary_response.json +29 -0
  61. data/spec/fixtures/moves/sample_for_erb.json +29 -0
  62. data/spec/fixtures/wunderground/yesterday_response.json +1 -0
  63. data/spec/lifelog/app/animetick_spec.rb +13 -0
  64. data/spec/lifelog/app/evernote_spec.rb +14 -0
  65. data/spec/lifelog/app/github_spec.rb +22 -0
  66. data/spec/lifelog/app/hatena_spec.rb +35 -0
  67. data/spec/lifelog/app/moves_spec.rb +9 -0
  68. data/spec/lifelog/app/twitter_spec.rb +33 -0
  69. data/spec/lifelog/app/weather_spec.rb +11 -0
  70. data/spec/lifelog/dom/entity/config_spec.rb +22 -0
  71. data/spec/lifelog/dom/entity/content_spec.rb +23 -0
  72. data/spec/lifelog/dom/module/github_spec.rb +60 -0
  73. data/spec/lifelog/dom/module/moves_spec.rb +37 -0
  74. data/spec/lifelog/dom/repository/evernote_spec.rb +26 -0
  75. data/spec/lifelog/dom/service/nullobject_spec.rb +19 -0
  76. data/spec/lifelog/dom/value/animetick_spec.rb +49 -0
  77. data/spec/lifelog/dom/value/github/activity_spec.rb +25 -0
  78. data/spec/lifelog/dom/value/github/commit_spec.rb +23 -0
  79. data/spec/lifelog/dom/value/hatena_spec.rb +23 -0
  80. data/spec/lifelog/dom/value/moves/move_spec.rb +45 -0
  81. data/spec/lifelog/dom/value/moves/place_spec.rb +18 -0
  82. data/spec/lifelog/dom/value/moves/referer/move_spec.rb +18 -0
  83. data/spec/lifelog/dom/value/moves/referer/place_spec.rb +17 -0
  84. data/spec/lifelog/dom/value/moves/summary_spec.rb +64 -0
  85. data/spec/lifelog/dom/value/twitter_spec.rb +23 -0
  86. data/spec/lifelog/dom/value/weather_spec.rb +43 -0
  87. data/spec/lifelog/inf/api/animetick_spec.rb +22 -0
  88. data/spec/lifelog/inf/api/evernote_spec.rb +49 -0
  89. data/spec/lifelog/inf/api/github_spec.rb +36 -0
  90. data/spec/lifelog/inf/api/googlemap_spec.rb +9 -0
  91. data/spec/lifelog/inf/api/hatena_spec.rb +23 -0
  92. data/spec/lifelog/inf/api/moves_spec.rb +13 -0
  93. data/spec/lifelog/inf/api/twitter_spec.rb +23 -0
  94. data/spec/lifelog/inf/api/wunderground_spec.rb +11 -0
  95. data/spec/spec_helper.rb +8 -0
  96. metadata +345 -0
@@ -0,0 +1,25 @@
1
+ class Everlog
2
+ class Inf::Api::Animetick < Inf::Api
3
+ require 'faraday'
4
+
5
+ def client
6
+ @client ||= Faraday.new(url: 'http://animetick.net')
7
+ end
8
+
9
+ def ticket_list
10
+ request(:get, '/ticket/list.json', { watched: true })['list']
11
+ rescue
12
+ []
13
+ end
14
+
15
+ private
16
+ def request(method, endpoint, params = {})
17
+ response = client.send(method, endpoint, params) do |req|
18
+ req['Cookie'] = "_animetick_session=#{@config.access_token}"
19
+ req['X-CSRF-Token'] = @config.access_secret
20
+ end
21
+
22
+ JSON.parse(response.body)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,37 @@
1
+ class Everlog
2
+ class Inf::Api::Evernote < Inf::Api
3
+ require 'evernote_oauth'
4
+
5
+ def initialize(is_sandbox, config)
6
+ @is_sandbox = is_sandbox
7
+ @config = config
8
+ end
9
+
10
+ def client
11
+ @client ||= EvernoteOAuth::Client.new(token: @config.access_secret, sandbox: @is_sandbox)
12
+ end
13
+
14
+ def note
15
+ @note ||= ::Evernote::EDAM::Type::Note.new
16
+ end
17
+
18
+ def notebook
19
+ @notebook ||= ::Evernote::EDAM::Type::Notebook.new
20
+ end
21
+
22
+ def post_note(title, content)
23
+ note.title = title
24
+ note.content = content
25
+ client.note_store.createNote(@config.access_secret, note)
26
+ end
27
+
28
+ def create_notebook title
29
+ notebook.name = title
30
+ client.note_store.createNotebook notebook
31
+ end
32
+
33
+ def notebooks
34
+ client.note_store.listNotebooks
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,26 @@
1
+ class Everlog
2
+ class Inf::Api::Github < Inf::Api
3
+ require 'octokit'
4
+
5
+ def client
6
+ @client ||= Octokit::Client.new(access_token: @config.access_secret)
7
+ end
8
+
9
+ def repos
10
+ client.repositories
11
+ rescue
12
+ []
13
+ end
14
+
15
+ def commits_on(repo, date)
16
+ client.commits_on("#{client.user.name}/#{repo}", utc_from_jst(date))
17
+ rescue
18
+ []
19
+ end
20
+
21
+ private
22
+ def utc_from_jst date
23
+ DateTime.parse("#{date} 00:00:00 JST").to_time.utc
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ class Everlog
2
+ class Inf::Api::GoogleMap
3
+ require 'geocoder'
4
+
5
+ def initialize
6
+ Geocoder.configure(language: :ja, units: :km)
7
+ end
8
+
9
+ def screen_name(lat, lon)
10
+ Geocoder.search("#{lat},#{lon}").first.formatted_address
11
+ rescue
12
+ ''
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ class Everlog
2
+ class Inf::Api::Hatena < Inf::Api
3
+ require 'hatena-bookmark'
4
+
5
+ def client
6
+ @client ||= ::Hatena::Bookmark.new(
7
+ consumer_key: @config.consumer_key,
8
+ consumer_secret: @config.consumer_secret,
9
+ request_token: @config.access_token,
10
+ request_secret: @config.access_secret
11
+ )
12
+ end
13
+
14
+ def feed_entry
15
+ client.feed['feed']['entry']
16
+ rescue
17
+ []
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ class Everlog
2
+ class Inf::Api::Moves < Inf::Api
3
+ require 'moves'
4
+
5
+ def client
6
+ @client ||= ::Moves::Client.new(ENV['moves_access_token'])
7
+ end
8
+
9
+ def daily_summary(from = (Date.today - 1), to = Date.today)
10
+ client.daily_summary(from..to).first['summary']
11
+ rescue
12
+ []
13
+ end
14
+
15
+ def daily_storyline(from = (Date.today - 1), to = Date.today)
16
+ client.daily_storyline(from..to).first['segments']
17
+ rescue
18
+ []
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ class Everlog
2
+ class Inf::Api::Twitter < Inf::Api
3
+ require 'twitter'
4
+
5
+ def client
6
+ @client ||= ::Twitter::REST::Client.new do |config|
7
+ config.consumer_key = @config.consumer_key
8
+ config.consumer_secret = @config.consumer_secret
9
+ config.access_token = @config.access_token
10
+ config.access_token_secret = @config.access_secret
11
+ end
12
+ end
13
+
14
+ def timeline
15
+ client.user_timeline(screen_name, { count: 200 })
16
+ rescue
17
+ []
18
+ end
19
+
20
+ def screen_name
21
+ client.user.screen_name
22
+ rescue
23
+ ''
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ class Everlog
2
+ class Inf::Api::Wunderground < Inf::Api
3
+ require 'wunderground'
4
+
5
+ def client
6
+ @client ||= Wunderground.new(@config.access_secret, throws_exceptions: true)
7
+ end
8
+
9
+ def yesterday place
10
+ client.yesterday_for(place)['history']
11
+ rescue
12
+ nil
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ class Everlog
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1 @@
1
+ [{"title_id":1,"count":1,"updated_at":"2099-99-99T99:99:99.000+09:00","watched":true,"title":"anime title","icon_path":"/icon/1.png","sub_title":"episode","start_at":"9999-99-99T99:99:00+09:00","end_at ":"9999-99-99T99:99:00+09:00","flags":[],"ch_name":"テレビ東京","ch_number":7},{"title_id":2,"count":2,"updated_at":"9999-99-99T99:99:99.000+09:00","watched":true,"title":"anime title2","icon_path":"/icon/2.png","sub_title":"episode2","start_at":"1111-11-11T99:99:00+09:00","end_at ":"1111-11-11T99:99:00+09:00","flags":[],"ch_name":"テレビ東京","ch_number":7}]
@@ -0,0 +1,80 @@
1
+ {
2
+ "feed":
3
+ {
4
+ "title":"username のブックマーク",
5
+ "id":"tag:hatena.ne.jp,2005:bookmark-username",
6
+ "link":[
7
+ {
8
+ "type":"text/html",
9
+ "rel":"alternate",
10
+ "href":"http://b.hatena.ne.jp/username/"
11
+ },
12
+ {
13
+ "rel":"service.post",
14
+ "type":"application/x.atom+xml",
15
+ "href":"http://b.hatena.ne.jp/atom/post",
16
+ "title":"username のブックマーク"
17
+ },
18
+ {
19
+ "rel":"next","type":"application/x.atom+xml","href":"http://b.hatena.ne.jp/username/atomfeed?of=20"}
20
+ ],
21
+ "entry":[
22
+ {
23
+ "title":"google",
24
+ "link":[
25
+ {
26
+ "type":"text/html",
27
+ "rel":"related",
28
+ "href":
29
+ "http://google.com"
30
+ },
31
+ {
32
+ "type":"text/html",
33
+ "rel":"alternate",
34
+ "href":"http://b.hatena.ne.jp/username/20140211#bookmark-181815910"
35
+ },
36
+ {
37
+ "type":"application/x.atom+xml",
38
+ "rel":"service.edit",
39
+ "title":"google",
40
+ "href":"http://b.hatena.ne.jp/atom/edit/181815910"
41
+ }
42
+ ],
43
+ "author": {
44
+ "name":"username"
45
+ },
46
+ "summary":null,
47
+ "id":"tag:hatena.ne.jp,2005:bookmark-username-181815910",
48
+ "issued":"2014-02-11T16:52:21"
49
+ },
50
+ {
51
+ "title":"apple",
52
+ "link":[
53
+ {
54
+ "type":"text/html",
55
+ "rel":"related",
56
+ "href":"http://apple.com"
57
+ },
58
+ {
59
+ "type":"text/html",
60
+ "rel":"alternate",
61
+ "href":"http://b.hatena.ne.jp/username/20140207#bookmark-88296041"
62
+ },
63
+ {
64
+ "type":"application/x.atom+xml",
65
+ "rel":"service.edit",
66
+ "title":"apple",
67
+ "href":"http://b.hatena.ne.jp/atom/edit/88296041"
68
+ }
69
+ ],
70
+ "author":{
71
+ "name":"username"
72
+ },
73
+ "summary":null,
74
+ "id":"tag:hatena.ne.jp,2005:bookmark-username-88296041",
75
+ "issued":"2014-02-07T12:49:42"}
76
+ ],
77
+ "xmlns":"http://purl.org/atom/ns#",
78
+ "xml:lang":"ja"
79
+ }
80
+ }
@@ -0,0 +1,319 @@
1
+ [
2
+ {
3
+ "date": "20121212",
4
+ "segments": [
5
+ {
6
+ "type": "place",
7
+ "startTime": "20121212T000000Z",
8
+ "endTime": "20121212T071430Z",
9
+ "place": {
10
+ "id": 1,
11
+ "type": "unknown",
12
+ "location": {
13
+ "lat": 55.55555,
14
+ "lon": 33.33333
15
+ }
16
+ }
17
+ },
18
+ {
19
+ "type": "move",
20
+ "startTime": "20121212T071430Z",
21
+ "endTime": "20121212T074617Z",
22
+ "activities": [
23
+ {
24
+ "activity": "wlk",
25
+ "startTime": "20121212T071430Z",
26
+ "endTime": "20121212T072732Z",
27
+ "duration": 782,
28
+ "distance": 1251,
29
+ "steps": 1353,
30
+ "calories": 99,
31
+ "trackPoints": [
32
+ {
33
+ "lat": 55.55555,
34
+ "lon": 33.33333,
35
+ "time": "20121212T071430Z"
36
+ },
37
+ {
38
+ "lat": 55.55555,
39
+ "lon": 33.33333,
40
+ "time": "20121212T072732Z"
41
+ }
42
+ ]
43
+ },
44
+ {
45
+ "activity": "trp",
46
+ "startTime": "20121212T072732Z",
47
+ "endTime": "20121212T074616Z",
48
+ "duration": 1124,
49
+ "distance": 8443,
50
+ "trackPoints": [
51
+ {
52
+ "lat": 55.55555,
53
+ "lon": 33.33333,
54
+ "time": "20121212T072732Z"
55
+ },
56
+ {
57
+ "lat": 55.55555,
58
+ "lon": 33.33333,
59
+ "time": "20121212T074208Z"
60
+ },
61
+ {
62
+ "lat": 55.55555,
63
+ "lon": 33.33333,
64
+ "time": "20121212T074617Z"
65
+ }
66
+ ]
67
+ }
68
+ ]
69
+ },
70
+ {
71
+ "type": "place",
72
+ "startTime": "20121212T074617Z",
73
+ "endTime": "20121212T100051Z",
74
+ "place": {
75
+ "id": 2,
76
+ "type": "unknown",
77
+ "location": {
78
+ "lat": 55.55555,
79
+ "lon": 33.33333
80
+ }
81
+ },
82
+ "activities": [
83
+ {
84
+ "activity": "wlk",
85
+ "startTime": "20121212T074804Z",
86
+ "endTime": "20121212T075234Z",
87
+ "duration": 270,
88
+ "distance": 227,
89
+ "steps": 303,
90
+ "trackPoints": [
91
+ {
92
+ "lat": 55.55555,
93
+ "lon": 33.33333,
94
+ "time": "20121212T074804Z"
95
+ },
96
+ {
97
+ "lat": 55.55555,
98
+ "lon": 33.33333,
99
+ "time": "20121212T075234Z"
100
+ }
101
+ ]
102
+ }
103
+ ]
104
+ },
105
+ {
106
+ "type": "move",
107
+ "startTime": "20121212T100051Z",
108
+ "endTime": "20121212T100715Z",
109
+ "activities": [
110
+ {
111
+ "activity": "wlk",
112
+ "startTime": "20121212T100051Z",
113
+ "endTime": "20121212T100715Z",
114
+ "duration": 384,
115
+ "distance": 421,
116
+ "steps": 488,
117
+ "calories": 99,
118
+ "trackPoints": [
119
+ {
120
+ "lat": 55.55555,
121
+ "lon": 33.33333,
122
+ "time": "20121212T100051Z"
123
+ },
124
+ {
125
+ "lat": 55.55555,
126
+ "lon": 33.33333,
127
+ "time": "20121212T100715Z"
128
+ }
129
+ ]
130
+ }
131
+ ]
132
+ },
133
+ {
134
+ "type": "place",
135
+ "startTime": "20121212T100715Z",
136
+ "endTime": "20121212T110530Z",
137
+ "place": {
138
+ "id": 4,
139
+ "name": "test",
140
+ "type": "foursquare",
141
+ "foursquareId": "4df0fdb17d8ba370a011d24c",
142
+ "location": {
143
+ "lat": 55.55555,
144
+ "lon": 33.33333
145
+ }
146
+ },
147
+ "activities": [
148
+ {
149
+ "activity": "wlk",
150
+ "startTime": "20121212T101215Z",
151
+ "endTime": "20121212T101255Z",
152
+ "duration": 40,
153
+ "distance": 18,
154
+ "steps": 37,
155
+ "calories": 99,
156
+ "trackPoints": [
157
+ {
158
+ "lat": 55.55555,
159
+ "lon": 33.33333,
160
+ "time": "20121212T101215Z"
161
+ },
162
+ {
163
+ "lat": 55.55555,
164
+ "lon": 33.33333,
165
+ "time": "20121212T101255Z"
166
+ }
167
+ ]
168
+ }
169
+ ]
170
+ },
171
+ {
172
+ "type": "move",
173
+ "startTime": "20121212T110530Z",
174
+ "endTime": "20121212T111129Z",
175
+ "activities": [
176
+ {
177
+ "activity": "wlk",
178
+ "startTime": "20121212T110530Z",
179
+ "endTime": "20121212T111128Z",
180
+ "duration": 358,
181
+ "distance": 493,
182
+ "steps": 441,
183
+ "calories": 99,
184
+ "trackPoints": [
185
+ {
186
+ "lat": 55.55555,
187
+ "lon": 33.33333,
188
+ "time": "20121212T110531Z"
189
+ },
190
+ {
191
+ "lat": 55.55555,
192
+ "lon": 33.33333,
193
+ "time": "20121212T110536Z"
194
+ },
195
+ {
196
+ "lat": 55.55555,
197
+ "lon": 33.33333,
198
+ "time": "20121212T110947Z"
199
+ },
200
+ {
201
+ "lat": 55.55555,
202
+ "lon": 33.33333,
203
+ "time": "20121212T111017Z"
204
+ },
205
+ {
206
+ "lat": 55.55555,
207
+ "lon": 33.33333,
208
+ "time": "20121212T111129Z"
209
+ }
210
+ ]
211
+ }
212
+ ]
213
+ },
214
+ {
215
+ "type": "place",
216
+ "startTime": "20121212T111129Z",
217
+ "endTime": "20121212T153638Z",
218
+ "place": {
219
+ "id": 2,
220
+ "type": "unknown",
221
+ "location": {
222
+ "lat": 55.55555,
223
+ "lon": 33.33333
224
+ }
225
+ },
226
+ "activities": [
227
+ {
228
+ "activity": "wlk",
229
+ "startTime": "20121212T111233Z",
230
+ "endTime": "20121212T112203Z",
231
+ "duration": 570,
232
+ "distance": 565,
233
+ "steps": 809,
234
+ "calories": 99,
235
+ "trackPoints": [
236
+ {
237
+ "lat": 55.55555,
238
+ "lon": 33.33333,
239
+ "time": "20121212T111233Z"
240
+ },
241
+ {
242
+ "lat": 55.55555,
243
+ "lon": 33.33333,
244
+ "time": "20121212T112203Z"
245
+ }
246
+ ]
247
+ }
248
+ ]
249
+ },
250
+ {
251
+ "type": "move",
252
+ "startTime": "20121212T153638Z",
253
+ "endTime": "20121212T160744Z",
254
+ "activities": [
255
+ {
256
+ "activity": "trp",
257
+ "startTime": "20121212T153638Z",
258
+ "endTime": "20121212T155321Z",
259
+ "duration": 1003,
260
+ "distance": 8058,
261
+ "trackPoints": [
262
+ {
263
+ "lat": 55.55555,
264
+ "lon": 33.33333,
265
+ "time": "20121212T153638Z"
266
+ },
267
+ {
268
+ "lat": 55.55555,
269
+ "lon": 33.33333,
270
+ "time": "20121212T155322Z"
271
+ }
272
+ ]
273
+ },
274
+ {
275
+ "activity": "wlk",
276
+ "startTime": "20121212T155322Z",
277
+ "endTime": "20121212T160744Z",
278
+ "duration": 862,
279
+ "distance": 1086,
280
+ "steps": 1257,
281
+ "calories": 99,
282
+ "trackPoints": [
283
+ {
284
+ "lat": 55.55555,
285
+ "lon": 33.33333,
286
+ "time": "20121212T155322Z"
287
+ },
288
+ {
289
+ "lat": 55.55555,
290
+ "lon": 33.33333,
291
+ "time": "20121212T155402Z"
292
+ },
293
+ {
294
+ "lat": 55.55555,
295
+ "lon": 33.33333,
296
+ "time": "20121212T160744Z"
297
+ }
298
+ ]
299
+ }
300
+ ]
301
+ },
302
+ {
303
+ "type": "place",
304
+ "startTime": "20121212T160744Z",
305
+ "endTime": "20121212T232730Z",
306
+ "place": {
307
+ "id": 1,
308
+ "type": "unknown",
309
+ "location": {
310
+ "lat": 55.55555,
311
+ "lon": 33.33333
312
+ }
313
+ }
314
+ }
315
+ ],
316
+ "caloriesIdle": 1785
317
+ }
318
+ ]
319
+