2

toggl api を使用しようとしています。

GET と POSTS を実行するために、Urllib2 の代わりに Requests を使用します。しかし、私は立ち往生しています。

payload = {
    "project":{
        "name":"Another Project",
        "billable":False,
        "workspace":{
            "Name":"jorrebor's workspace",
            "id":213272
        },
        "automatically_calculate_estimated_workhours":False
    }
}

url = "https://www.toggl.com/api/v6/projects.json"
r = requests.post(url, data=json.dumps(payload), auth=HTTPBasicAuth('j_xxxxx@gmail.com', 'mypassword'))

認証は問題ないようですが、ペイロード形式はおそらくそうではありません。

同じパラメータを持つ curl コマンド:

curl -v -u heremytoken:api_token -H "Content-type: application/json" -d "{\"project\":{\"billable\":true,\"workspace\":{\"id\":213272},\"name\":\"Another project\",\"automatically_calculate_estimated_workhours\":false}}" -X POST https://www.toggl.com/api/v6/projects.json

正常に動作します。

ペイロードの何が問題になっていますか? 応答は次のとおりです: ["Name can't be blank","Workspace can't be blank"]

これにより、認証は機能しますが、toggl は json オブジェクトを読み取れないと結論付けます。

4

1 に答える 1

2

ヘッダーをJSONデフォルトの形式ではなくアプリケーションに設定しJSON、 Python の代わりにオブジェクトを送信する必要があるようですdict。ここでチェックしてください:

payload = {"project":{"name":"Another Project",
                     "billable":False,
                     "workspace":{"Name":"jorrebor's workspace",
                                  "id":213272},
                     "automatically_calculate_estimated_workhours":False
                      }   } 

parameters_json = json.dumps(payload)
headers = {'Content-Type': 'application/json')
r = client.post(url, data=parameters_json, headers=headers)

これにより、サイトは json オブジェクトを問題なく読み取ることができます。

于 2012-06-01T04:35:14.897 に答える