2016-07-02 7 views
0

Versuchen Sie, auf die Dropbox V2-API-Aufrufe zuzugreifen, indem Sie PHP und einen CURL-Aufruf verwenden. Basierend auf der Sandbox hier https://dropbox.github.io/dropbox-api-v2-explorer/#files_search sieht der "Show Code" so aus.Dropbox v2 API-Problem mit PHP CURL-Aufruf funktioniert nicht

curl -X POST https://api.dropboxapi.com/2/files/search \ 
    --header 'Authorization: Bearer myAccessTokenHere \ 
    --header 'Content-Type: application/json' \ 
    --data '{"path":"/My Cars","query":"\".j\"","start":0,"max_results":50}' 

Mein PHP-Code wie folgt aussieht

function performSearch() 
{ 
    $cheaders = array("Authorization: Bearer myAccessTokenHere", 
       'Content-Type: application/json', 
       'Dropbox-API-Arg: {"path":"/My Cars","query":"\".j\"","start":"0","max_results":"50"}'); 

    $ch = curl_init('https://content.dropboxapi.com/2/files/search'); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $cheaders); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $response = curl_exec($ch); 

    echo "\n response = $response"; 
    curl_close($ch); 
} 

Als ich es ausführen, ich

response = get { "error": "Not Found"}

Antwort

1

Bitte versuchen Sie dies:

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, "https://api.dropboxapi.com/2/files/search"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"path\":\"/My Cars\",\"query\":\"\".j\"\",\"start\":0,\"max_results\":50}"); 
curl_setopt($ch, CURLOPT_POST, 1); 

curl_setopt($ch, CURLOPT_HTTPHEADER, [ 
    "Authorization: Bearer myAccessTokenHere", 
    "Content-Type: application/json" 
]); 

$result = curl_exec($ch); 
if (curl_errno($ch)) { 
    echo 'Error:' . curl_error($ch); 
} 
curl_close ($ch); 
echo "\n response = $result"; 
+0

Danke für die Antwort , viel näher als ich, aber dieser Code kommt mit einem Fehler zurück, nicht sicher, über welchen Teil es spricht - response = Fehler beim Aufruf der API-Funktion "files/search": Anfragekörper: Eingabe konnte nicht dekodiert werden als JSON – JMoskwa

+0

Der Fehler besagt, dass der JSON in Ihrem Anfragetext (also für Ihre Parameter zum AP Ich rufe) ist ungültig. Es sieht so aus, als ob du ein extra Paar '' ''drin hast. Du meinst wahrscheinlich:' "{\" Pfad \ ": \" \\ Meine Autos \ ", \" Frage \ ": \". J \ " , \ "start \": 0, \ "max_results \": 50} ")' – Greg

0

Danke für die Zeiger Jungs - Neuer Code - funktioniert w/o bekommen die Fehler, aber jetzt bekomme ich keine Ergebnisse zurückgegeben .... Ich habe einige Conversions außerhalb der eigentlichen Anruf, so dass ich was sehen konnte json Zeichenfolge wurde in

Hier übergeben wird ist der neue Code

$path = "/My Cars"; 
$query = ".j"; 
$start = 0; 
$max_results = 50; 

$accessToken = $this->accessToken; 
$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, "https://api.dropboxapi.com/2/files/search"); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
      curl_setopt($ch, CURLOPT_POST, 1); 


$arr = array('path'=>$path, "query"=>$query, "start"=>$start, "max_results"=>$max_results, 
            "mode"=>(array(".tag"=>"filename_and_content"))); 
$jArr = json_encode($arr); 

$arrNull = array("body"=>""); 
$jNull = json_encode($arrNull); 

echo "\n\n" . $jArr; 
echo "\n\n" . $jNull; 

curl_setopt($ch, CURLOPT_POSTFIELDS, $jArr); 

curl_setopt($ch, CURLOPT_HTTPHEADER, [ 
          "Authorization: Bearer $accessToken", 
          "Content-Type: application/json" 
      ]); 


$result = curl_exec($ch); 
if (curl_errno($ch)) { 
      echo 'Error:' . curl_error($ch); 
} 
curl_close ($ch); 
echo "\n result = $result"; 

return ($result); 

Hier ist, was ich für die Ausgabe zu bekommen - kein erros aber keinen Inhalt ???? (Ich habe verschiedene Verzeichnisse ausprobiert, in der Sandbox gibt "/ My Cars" 6 Ergebnisse zurück)

{"path": "/ Meine Autos", "query": ". J", "start": 0 "max_results": 50 "Modus": {“. Tag ":" filename_and_content "}}

{" body ":" "}

result = {" matches "[]" mehr ": false, "start": 6}

+0

Scheint, dass die Sandbox anders als der tatsächliche API-Endpunkt funktioniert. Statt "query": ", j" habe ich "query" versucht: " .jpg "und das hat die 6 jpg-Dateien zurückgegeben, die ich in diesem Verzeichnis habe. Ich habe auch versucht, den, mode": {"anzuhängen.tag ":" filename_and_content "}} aber ich bekomme einen Fehler, also habe ich es weggelassen. Ich hoffe, dieser Thread hilft jemandem, der Probleme mit der v2-Schnittstelle hatte – JMoskwa

0

gelöst - der $ query zu

$ query = Ändern" .jpg ";

Ich bekomme jetzt Ergebnisse zurück.

FYI: nicht mehr erforderlich, in dem obigen Code sind die folgenden Zeilen

$ arrNull = array ("body" => ""); $ jNull = json_encode ($ arrNull);

und entfernen Sie das „Echo“ -Funktion in der Produktion zu verwenden, ruft ...

Dank für die Hilfe meiner Fehler zu lösen, hoffentlich jemand helfen wird, sonst

John