質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

821閲覧

APIから定期的にデータを取得したいがつまずいている

tttu

総合スコア26

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/07/12 13:51

現在Railsで製作中のWebアプリに、ヘルスプラネットというタニタの提供しているAPIから定期的に体組成データを取得する機能を作りたいと思っています。

現在わかっているのは

  • サーバがHerokuなのでadd-onのschedulerをつかう
  • rake taskで定期実行の内容を走らせる
  • API仕様書にある通りOAuth2をつかわなければいけない

という点です。

この後どのような流れでどのようなコードを書けばいいかが、調べてみても全くわかりませんでした。

ご教授いただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tttu

2019/07/12 16:17

lib/tasks内にrakeファイルを作って、そこにコードを書くというところまではわかっているのですが ・railsでOAuth認証を行うためのコード ・railsでAPIを叩くためのコード ・帰ってきたデータを処理するためのコード がわからない状況です
gentaro

2019/07/12 16:22

それぞれどの程度調べられていて、どこが「わからない」のか、がわからないです。 すべて1から説明することを求めるようなサイトではないので、「自分で調べたこと」「その中でわからないこと」を明確にしましょう。 そうでなければ「丸投げの質問」となります。
tttu

2019/07/22 14:48

わざわざありがとうございました
guest

回答1

0

自己解決

自己解決

Oauth認証

routeに認証画面・トークン取得用のURLを設定し、Userコントローラーにメソッド定義

↓users_controller.rb

Ruby

1def oauth 2 client = OAuth2::Client.new(ENV["API_ID"], ENV["API_SECRET"], :site => 'https://www.healthplanet.jp', :authorize_url => ' https://www.healthplanet.jp/oauth/auth', 3 :token_url => 'https://www.healthplanet.jp/oauth/token') 4 redirect_uri = 'https://body-w.herokuapp.com/users/callback' 5 authorize_url = "https://www.healthplanet.jp/oauth/auth?client_id=#{ENV["API_ID"]}&redirect_uri=#{redirect_uri}&scope=innerscan&response_type=code" 6 redirect_to authorize_url 7end 8 9def callback 10 client = OAuth2::Client.new(ENV["API_ID"], ENV["API_SECRET"], 11 { 12 site: 'https://www.healthplanet.jp/', 13 token_url: 'oauth/token', 14 } 15 ) 16 token = client.auth_code.get_token( 17 params[:code], 18 {:redirect_uri => 'https://body-w.herokuapp.com/users/callback', 19 :grant_type => "authorization_code"} 20 ) 21 22 access_token = token.token #AccessTokenオブジェクトからaccess_tokenをとりだす 23 refresh_token = token.refresh_token #AccessTokenオブジェクトからrefresh_tokenをとりだす 242526

データ取得

保存しておいたアクセストークンを使って、AccessTokenオブジェクトを生成。getメソッドで取得
/lib/tasks/scheduler.reakeに記述

Ruby

1. 2. 3. 4access_token = OAuth2::AccessToken.new(client, decrypt_access_token) 5 6resource_data = access_token.get('https://www.healthplanet.jp/status/innerscan.json', :params => { 'access_token' => access_token.token, 'tag' => '6021', 'date' => '0', 'from' => from.strftime('%Y%m%d%H%M%S'), 'to' => to.strftime('%Y%m%d%H%M%S') }) 7. 8. 9.

タスク実行

「rake "タスク名"」をHeroku Schedulerに登録

###参考ページ

投稿2019/07/22 14:47

編集2019/07/22 14:54
tttu

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問