2015-06-25 16 views
5

Sono stato alla ricerca di un po 'ora e non è possibile ottenere una panoramica delle attività da un unico elenco con il punto terminale Wunderlist: https://a.wunderlist.com/api/v1/tasksWunderlist Compiti - Come faccio ad avere i compiti per un elenco utilizzando ricciolo in php

Posso ottenere liste, cartelle e creare liste, cartelle, attività in modo che funzioni bene. Ma come faccio ad avere i compiti da una lista? Ho cercato di interpretare la documentazione trovata qui: https://developer.wunderlist.com/documentation/endpoints/task

Quando faccio un metodo GET ricevo questo messaggio di errore:

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

Tuttavia, non voglio aggiungere un titolo, dal momento che non lo faccio voglio creare una nuova attività, voglio solo i compiti di quella lista.

Cosa sto facendo di sbagliato qui?

Ecco il mio codice finora:

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; 

- EDIT ADDENDUM --- Ho anche provato queste varianti nel caso qualcuno Wonders. Tutti danno lo stesso errore "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"} 
+0

^Si prega di aggiungere ulteriore materiale in questione (che possono essere modificati), e, idealmente, quindi eliminare il commento ridondante per riordinare . Grazie! – halfer

+0

Per questo endpoint è necessario inviare list_id come parametro querystring anziché postare dati. Prova invece https://a.wunderlist.com/api/v1/tasks?list_id=XXX. –

risposta

8

Come sottolineato da Rotem, si sta utilizzando aggiungendo la matrice $parameters come CURLOPT_POSTFIELDS. Come suggerisce il nome, questo è pensato solo per le richieste HTTP POST.

Inserendo i parametri come parametri di query nello $url e passando null per i parametri della query, il tuo esempio ha funzionato per me.

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

Nota: ho usato un list_id ho accesso a invece di utilizzare 123

+1

Così logico e semplice, come potrei mancarlo. Grazie! –