2016-10-03 4 views
2

OK, 새로운 데이터 세트를 가지고 놀았습니다. Geckoboard 이 문서는 (예 1 참조) 유닉스 명령어로 시도한 문서의 예입니다. 줄을 잘 작동합니다). 하지만 PHP 파일에서 실행해야합니다. (필자는 PHP에서 WooCommerce 데이터를 수집하고 있습니다.)Geckoboard 데이터 세트 PHP cURL API

예 번호 1

curl https://api.geckoboard.com/datasets/sales.gross/data \ 
     -X PUT \ 
     -u '222efc82e7933138077b1c2554439e15:' \ 
     -H 'Content-Type: application/json' \ 
     -d '{ 
     "data": [ 
      { 
      "timestamp": "2016-01-01T12:00:00Z", 
      "amount": 819 
      }, 
      { 
      "timestamp": "2016-01-02T12:00:00Z", 
      "amount": 409 
      }, 
      { 
      "timestamp": "2016-01-03T12:00:00Z", 
      "amount": 164 
      } 
    ] 
}' 

나는이

/***************** 
* 
* GECKOBOARD 
* 
*****************/ 

// API URL 
$url = 'https://api.geckoboard.com/datasets/sales.[DATA_SET_NAME]/data'; 
$key = '[MY_API_KEY]'; 

$data_array = array(
    'net' => $weeklynet, 
    'timestamp' => date('Y-m-d h:m:s') 
); 

// create a new cURL resource 
$ch = curl_init(); 

// set URL and other appropriate options 
$options = array(
    CURLOPT_URL => $url, 
    CURLOPT_PUT => 1, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_HTTPHEADER => array(
     'Content-Type: application/json', 
     'Authorization', 'OAuth ' . $key 
     ), 
    CURLOPT_POSTFIELDS => $data_array 
); 

curl_setopt_array($ch, $options); 

// grab URL and pass it to the browser 
curl_exec($ch); 

// close cURL resource, and free up system resources 
curl_close($ch); 

을 시도했다 그러나 아무 반응이 없습니다. 나는 PHP에 대한 cURL에 정통하지 않을 것입니다 (또는 전혀 중요하지 않습니다). 커맨드 라인 cURL을 "올바른"PHP 버전으로 "번역"할 수있는 사람이 있습니까? 또한 날짜가 올바르게 출력되지 않을 수도 있습니다. YYYY-MM-DDTHH : MM : SSZ

감사합니다!

+0

"하지만 아무 일도 일어나지 않습니다." 가능한 구체적으로 - 뭔가 일어나고있다; 아무것도 돌려주지 않니? 특정 줄에서 실행이 멈췄습니까? 기타 –

답변

2

좋아, 밤새도록 검색하고 테스트 한 후 마침내 작동하는 해결책을 찾았습니다. 나는 처음에 411을 얻는 이유를 잘 모르겠지만, 그것은

CURLOPT_PUT => 1 

을 제거하고

CURLOPT_CUSTOMREQUEST => 'PUT' 

로 대체하는 것은 적어도 나에게 데이터를 보낼 수 있음을 밝혀졌습니다. 그런 다음 401 (잘못된 요청)을 대신 받았습니다. 이는 단순히 인증이 통과 된 방식 때문이었습니다. 그래서 헤더 배열에서

'Authorization', 'OAuth ' . $key 

를 제거하고 대신

CURLOPT_USERPWD => $key . ': ' 

이 방법 나는 빈 암호 (사용자와 geckoboard에서 (사용자로) API 키를 전달하고 있습니다를 사용했다 : 암호). 다른 문제의 설정,하지만 난 마침내 어쨌든 작업 :

PS를 가지고

그리고있다. 도움을 주신 것에 대해 @ 크리스에게 감사드립니다! 항상 똑같이 stackoverflow 커뮤니티의 일반적인 유용성에 놀랐습니다.

0

변수에 curl_exec() 명령을 할당하고 반환 값을 확인하십시오.

$content = curl_exec($ch); 
$headers = curl_getinfo($ch); 
curl_close($ch); 
if($headers['http_code'] < 400){ 
    /* Do stuff as needed starting with perhaps: 
     echo "<pre>"; 
     print_r($content); */ 
} 

curl here의 PHP 설명서를 살펴보십시오.

+0

답장을 보내 주셔서 감사합니다. 나는 그것을 시도하고 "411 Length Required"를 되 찾는다. 그러나 나는 그걸로 무엇을해야하는지 정말로 모른다. 그걸 알아보고 나는 훨씬 더 진보 된 것처럼 보이는 몇 가지 질문을 생각해 냈습니다. PHP의 cURL에서 API 키를 어떻게 전달하는지 잘 모르겠습니다. 그것은 유닉스 명령 줄에서 할 때 잘 작동하지만, 나는 그 명령이 PHP에서 무엇인지 찾을 수 없다. – axelra82

+0

어쩌면이게 내가해야할 일 (geckoboard의 "지원"에서)을 해결할 수있다. curl https://api.geckoboard.com/ -u "[API_KEY] :"는 명령 행. 이것은 PHP에서 cURL로 어떻게 변환됩니까? :) – axelra82

+0

"Content-Length : $ length"를 CURLOPT_HTTPHEADER 배열에 추가하고 $ length = count ($ data_array);를 설정하십시오. $ data_array 할당 직후. – Chris