2016-07-12 19 views
0

Ich versuche eine Aufgabe in Asana mit Perl zu erstellen. Ich verwende die folgenden Module:Erstellen einer Asana Aufgabe mit Perl

  • WWW :: Locken :: Simple
  • JSON
  • HTTP :: Anfrage

Hier ist mein Code.

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); 

Wenn ich die Variable $ Inhalt drucke, sieht es so aus.

Wenn ich die $ r-Variable als Zeichenfolge drucke, sieht es so aus. („Persönliche Zugriffstoken“ zeigt meine den persönlichen Zugriffstoken, die ich zur Verfügung gestellt haben.)

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

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

Das Ergebnis aus $res->content ist:

'{"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"}]}' 

Irgendwelche Ideen, warum dies darauf hinweist, dass der Arbeitsbereich Feld fehlt ?

+1

Aus den Beispielen sieht es wie oben aus -level 'Daten'-Schlüssel, den Sie haben, ist unnötig: https://asana.com/developers/api-reference/tasks#create –

+0

@HunterMcMillen: Danke für Ihre Antwort. Hier ist jetzt die $ content-Variable. {"workspace": "#######", "name": "Systemfehler"} Hier ist die Variable $ r. POST https://app.asana.com/api/1.0/tasks Autorisierung: Bearer {"workspace": "#######", "name": "System Fehler "} Ich bekomme das gleiche Ergebnis von $ res-> Inhalt. Irgendwelche anderen Vorschläge? –

Antwort

0

Es sieht so aus, als müssten Sie den Content-Type-Header auf "application/json" setzen, weil Sie Ihre Daten als json senden.

Um Sie bei zukünftigen Problemen zu debuggen, können Sie unseren curl in der Befehlszeile ausprobieren. In diesem speziellen Fall werden Sie bemerken, dass wenn Sie -H "Content-Type: application/json" hinzufügen, es funktioniert und wenn Sie es auslassen, wird es Ihnen den gleichen Fehler geben.

(funktioniert) curl -H "Autorisierung: Bearer ????" -X POST "https://app.asana.com/api/1.0/tasks" -d "{\" data \ ": {\" workspace \ ": ZZZZZZZ, \" name \ ": \" test \ "}}" -H "Content-Type: application/json"

vs (funktioniert nicht) curl -H "Autorisierung: Bearer ????" -X POST "https://app.asana.com/api/1.0/tasks" -d "{\" daten \ ": {\" workspace \ ": ZZZZZZZ, \" name \ ": \" test \ "}}"

+0

Ah! Dies, zusätzlich zum Einstellen des Inhalts, um das Element "data" auf oberster Ebene zu haben, funktionierte. Vielen Dank! –

+0

genial, froh, dass es geholfen hat! – Mark