Набор данных Geckoboard PHP cURL API

Итак, я поигрался с новыми наборами данных от Geckoboard. Это (см. Пример № 1 ниже) является примером из документации (которую я пробовал в командной строке Unix, и она прекрасно работает). Но мне нужно запустить это в файле PHP (я собираю данные из WooCommerce перед этим в моем PHP).

Пример № 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);

Но ничего не происходит. Я не очень хорошо разбираюсь в cURL с PHP (или вообще в этом отношении). Есть ли кто-нибудь, кто мог бы помочь мне "перевести" командную строку cURL на "правильную" версию PHP? Кроме того, не уверен, что дата будет выводиться правильно, она должна быть в формате YYYY-MM-DDTHH:MM:SSZ

Благодарю за любую помощь!

2 ответа

Решение

Хорошо, после поиска и тестирования всю ночь я наконец пришел к рабочему решению. Я не уверен, почему я получил 411 в первую очередь, но оказывается, что удаление

CURLOPT_PUT => 1

и заменить его на

CURLOPT_CUSTOMREQUEST => 'PUT'

по крайней мере, позвольте мне отправить данные. Тогда я получил 401 (Плохой запрос) вместо этого. Это было просто из-за способа аутентификации. Поэтому мне пришлось удалить

'Authorization', 'OAuth ' . $key

из массива заголовков и вместо этого использовать

CURLOPT_USERPWD =>  $key . ': '

Таким образом, я передаю ключ API (как пользователь) от geckoboard с пустым паролем (пользователь: пароль).

Тогда там, где множество других вопросов, но я, наконец, получил это работает в любом случае:)

PS. Спасибо @Chris за попытку помочь! Всегда одинаково поражен общей полезностью сообщества stackru.

Назначьте команду 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); */
}

Взгляните на руководство php по curl здесь.

Другие вопросы по тегам