6

私は今かなり検索しており、Wunderlist エンドポイントを使用して単一のリストからタスクの概要を取得できません: https://a.wunderlist.com/api/v1/tasks

リスト、フォルダーを取得し、リスト、フォルダー、タスクを作成して正常に機能させることができます。しかし、リストからタスクを取得するにはどうすればよいでしょうか? ここにあるドキュメントを解釈しようとしました: https://developer.wunderlist.com/documentation/endpoints/task

GET メソッドを実行すると、次のエラー メッセージが表示されます。

{"error":{"type":"missing_parameter","translation_key":"api_error_missing_params","message":"Missing parameter.","title":["required"]}}

ただし、新しいタスクを作成したくないので、タイトルを追加したくありません。そのリストのタスクを元に戻したいだけです。

ここで何が間違っていますか?

これまでの私のコードは次のとおりです。

function doCall($endPoint, $parameters = array(), $method = 'GET')
{
    // check if curl is available
    if (!function_exists('curl_init')) {
        print "This method requires cURL (http://php.net/curl), it seems like the extension isn't installed. ".__LINE__;
        exit();
    }
    //prepare content
    $parametersdata = json_encode($parameters);

    // define url
    $url = 'https://a.wunderlist.com/api/v1/' . $endPoint;

    // init curl
    $curl = curl_init();
    // set options
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    // init headers
    $headers = array();

    // add to header
    $headers[] = 'X-Access-Token: XXX';
    $headers[] = 'X-Client-ID: XXX';

    // method is POST, used for login or inserts
    if ($method == 'POST') {
        // define post method
        curl_setopt($curl, CURLOPT_POST, 1);
    // method is DELETE
    } elseif ($method == 'DELETE') {
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
    } else {
        curl_setopt($curl, CURLOPT_HTTPGET, 1);
    }

    // parameters are set
    if (!empty($parameters)) {
        $headers[] = 'Content-Type: application/json';
        $headers[] = 'Content-Length: ' . strlen($parametersdata);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $parametersdata );
    }
    // define headers with the request
    if (!empty($headers)) {
        // add headers
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    }
    // execute
    $response = curl_exec($curl);
    // debug is on
    if (true) {
        echo $method." ".$url . '<br/><pre>';
        print"\n--headers--\n";
        print_r($headers);
        print"\n--parameters--\n";
        print_r($parameters);
        print"\n--parametersdata--\n";
        print_r($parametersdata);
        print"\n--response--\n";
        print_r($response);
        echo '</pre><br/><br/>';
    }
    // get HTTP response code
    $httpCode = (int) curl_getinfo($curl, CURLINFO_HTTP_CODE);
    // close
    curl_close($curl);
    // response is empty or false
    if (empty($response)) {
        //throw new Exception('Error: ' . $response);
        print "Error: ". $response." ".__LINE__;
    }
    // init result
    $result = false;
    // successfull response
    if (($httpCode == 200) || ($httpCode == 201)) {
        $result = json_decode($response, true);
    }
    // return
    return $result;
}

$listid = 123;
$url = 'tasks';
$tasks = doCall($url,array('list_id' => $listid), 'GET');
echo $tasks;

-- 追記を編集 --- 誰かが疑問に思った場合に備えて、これらの亜種も試しました。それらはすべて同じエラー「bad_request」を返します

GET a.wunderlist.com/api/v1/tasks{"list_id":"141329591"}
GET a.wunderlist.com/api/v1/tasks{"list_id":141329591}
GET a.wunderlist.com/api/v1/tasks/{"list_id":"141329591"} 
4

1 に答える 1

9

Rotem が指摘したように、$parameters配列を として追加していCURLOPT_POSTFIELDSます。名前が示すように、これは http POST リクエスト専用です。

パラメーターをクエリパラメーターとして入れて、クエリパラメーターを$url渡すnullと、あなたの例がうまくいきました。

$listid = 123;
$url = 'tasks?list_id=123';
$tasks = doCall($url,null,'GET');
echo $tasks;

注: 123 を使用する代わりに、アクセスできる list_id を使用しました。

于 2015-06-29T13:58:52.527 に答える