2017-06-09 22 views
0

"hello world"の例からRubyを使用しています。こんにちは世界の作品を見つける。私はこのGETを動作させようとしています。opt_fieldsはAsana APIでは動作しませんが、urlはAsanaエクスプローラで動作します

GET /projects/192372431230306/tasks?opt_fields=id,assignee,due_on,name,notes&limit=10&completed_since=now 

これはAsana APIエクスプローラで期待通りに動作します。私は私のコードで同じURIを使用してい

uri = URI.parse("https://app.asana.com/api/1.0/projects/192372431230306/tasks?opt_fields=id,assignee,due_on,name,notes&limit=10&completed_since=now") 

それはまだ正常にIDと名前を返しますが、それは私が欲しいものではありません。

なぜそれがエクスプローラで動作するのか分かりませんが、GET要求では動作しません。私はパーソナルトークンを使用しており、エクスプローラはOAuthを使用しています。 私の個人的なトークンは、このコードの前に正しく設定されています。タスクを作成し、プロジェクトを取得し、タスクを取得することができます。 APIエクスプローラのように、このクエリでフィールドを追加することはできません。

追加されたコード:

uri = URI.parse("https://app.asana.com/api/1.0/projects/192372431230306/tasks?opt_fields=id,assignee,due_on,name,notes&limit=10&completed_since=now") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_PEER 

# set up the request 
header = { 
    "Content-Type" => "application/json" 
    } 

req = Net::HTTP::Get.new(uri.path, header) 
req.basic_auth(personal_access_token, '') 
res = http.start { |http| http.request(req) } 
body = JSON.parse(res.body) 
puts "projects: #{body['data']}" 
+0

ほとんどのコードを含めるように更新されました。それはまっすぐ進むべきであるように見えた。結果は、タスクIDと名前フィールドのみのJSONです。 – roguecode

答えて

1

間違っているのかを知るために、ここではかなり十分なコードがありません。あなたのコードがある程度機能しているようですが、OAuthとは対照的に個人用のトークンを使用する場合には別のものがあります。 Asana API documentationによると:

Authorizationヘッダーに渡す、APIにアクセスするとき

パーソナルアクセストークンがOAuthアクセストークンと同様に使用する必要があります。

curl -H "Authorization: Bearer ACCESS_TOKEN" https://app.asana.com/api/1.0/users/me 
ので、URLに加えて

、正しいヘッダーを使用する必要があります。私はあなたが使用しているものHTTPライブラリわからないんだけど、ここで私はHTTPartyでそれを行うだろう方法は次のとおりです。

require 'uri' 
require 'httparty' 
uri = URI.parse("https://app.asana.com/api/1.0/projects/192372431230306/tasks?opt_fields=id,assignee,due_on,name,notes&limit=10&completed_since=now") 

task = HTTParty.get(uri, 
        :headers => 
        {'Authorization' => "Bearer ${ENV[ACCESS_TOKEN]}"} 
        ).parsed_response 

あなたは正しく要求に対してユーザーを認証する必要がありaccess_tokenは環境変数、であなたの個人的なアクセストークンを置く場合。

まだ、すべてのフィールドを取得できる場合は、何か欠けているようです。あなたの個人アクセストークンはOAuthアクセストークンとは異なるアカウントに関連付けられているのでしょうか? /users/me/ routeの結果を確認するのに役立ちますか?

関連する問題