2

OK、Geckoboardの新しいデータ セットをいじっ てみました。これはドキュメントの例です (UNIX コマンド ラインで試したところ、問題なく動作しました)。しかし、これを PHP ファイルで実行する必要があります (PHP でこの前に WooCommerce からデータを収集しています)。

例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 の形式にする必要があります。

助けてくれてありがとう!

4

2 に答える 2

2

OK、一晩中検索してテストした後、ようやく実用的なソリューションにたどり着きました。そもそもなぜ 411 を入手したのかはわかりませんが、

CURLOPT_PUT => 1

そしてそれを

CURLOPT_CUSTOMREQUEST => 'PUT'

せめてデータを送らせてください。その後、代わりに 401 (Bad request) を受け取りました。これは単純に、認証の通過方法が原因でした。だから私は削除しなければなりませんでした

'Authorization', 'OAuth ' . $key

ヘッダー配列から、代わりに使用します

CURLOPT_USERPWD =>  $key . ': '

このようにして、空のパスワード (user:password) を使用して geckoboard から API キーを (ユーザーとして) 渡しています。

次に、他の一連の問題がありますが、とにかくこれが機能するようになりました:)

PS。助けてくれてありがとう@Chris!stackoverflow コミュニティの一般的な有用性には、常に等しく驚かされます。

于 2016-10-04T08:01:11.880 に答える
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のphpマニュアルを見てください。

于 2016-10-03T13:14:22.573 に答える