2016-07-12 18 views
0

Peranaを使用してAsanaでタスクを作成しようとしています。私は、以下のモジュールを使用しています:Perlを使用してAsanaタスクを作成する

  • WWWを::カール:: Simpleは
  • JSON
  • HTTP ::リクエスト

はここに私のコードです。

my %data = (
    "data" => { 
     "workspace" => "##########", #$config->get('asana/workspace_id'), 
     "name" => "system error", 
     "assignee" => "me", 
     "projects" => "##########", 
    }, 
); 
my @header = ('Authorization' => 'Bearer '.$personal_access_token)); 
my $curl = WWW::Curl::Simple->new(); 
my $uri = $config->get('asana/api_uri'); 
my $content = JSON->new->utf8->encode(\%data); 
my $r = HTTP::Request->new(
    'POST', 
    $uri, 
    \@header, 
    $content 
); 
my $res = $curl->request($r); 

$ content変数を出力すると、次のようになります。

{"data":{"workspace":"##########","name":"CBC FZDS Billing - System Error"}} 

$ r変数を文字列として出力すると、次のようになります。 (「個人的なアクセストークンは、」私が提供している私の個人的なアクセストークンが表示されます。)

POST https://app.asana.com/api/1.0/tasks 
Authorization: Bearer <personal access token> 

{"data":{"workspace":"##########","name":"CBC FZDS Billing - System Error"}} 

$res->contentからの結果は次のとおりです。

'{"errors":[{"message":"missing `workspace` field, and no `parent` or `projects` specified","help":"For more information on API status codes and how to handle them, read the docs on errors: https://asana.com/developers/documentation/getting-started/errors"}]}' 

これは、ワークスペースのフィールドが欠落していることを示して、なぜすべてのアイデアを?

+1

例から、あなたが持っているレベルの 'data'キーは不要です:https://asana.com/developers/api-reference/tasks#create –

+0

@HunterMcMillen:お返事ありがとうございます。 $ content変数は今ここにあります。 {"workspace": "#######"、 "name": "System Error"} ここに$ r変数があります。 POST https://app.asana.com/api/1.0/tasks 承認:ベアラ<個人用アクセストークン> {"#######"、 "name": "Systemエラー "} $ res-> contentと同じ結果が得られます。 他の提案はありますか? –

答えて

0

jsonとしてデータを送信しているため、コンテンツタイプのヘッダーを "application/json"に設定する必要があるようです。

今後の問題をデバッグするのに役立つように、コマンドラインでcurlを試すことができます。 この特殊なケースでは、-H "Content-Type:application/json"を追加すると動作することに気づくでしょう。もしそれを残しておけば、同じエラーが発生します。

(作品) curl -H "Authorization:Bearer ????" -X POST "https://app.asana.com/api/1.0/tasks" -d "{\"ワークスペース\ ":ZZZZZZZ、\"名前\ ":\"テスト\ "}}" -H "Content-Type:application/json"

対 (動作しません) curl -H "Authorization:Bearer ????" -X POST "https://app.asana.com/api/1.0/tasks" -d "{\"データ\ ":ワークスペース\":ZZZZZZZ、\ "名前\":\ "テスト\"}} ""

+0

ああ!それは、トップレベルの "データ"要素を持つようにコンテンツを設定することに加えて、機能しました。ありがとう! –

+0

素晴らしい、嬉しい助け! – Mark

関連する問題