Итак, я поигрался с новыми наборами данных из 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: ММ: SSZ
Благодарю за любую помощь!
Хорошо, после поиска и тестирования всю ночь я наконец пришел к рабочему решению. Я не уверен, почему я получил 411 в первую очередь, но оказывается, что удаление
CURLOPT_PUT => 1
и заменить его на
CURLOPT_CUSTOMREQUEST => 'PUT'
по крайней мере, позвольте мне отправить данные. Тогда я получил 401 (Плохой запрос) вместо этого. Это было просто из-за способа прохождения аутентификации. Поэтому мне пришлось удалить
'Authorization', 'OAuth ' . $key
из массива заголовков и вместо этого использовать
CURLOPT_USERPWD => $key . ': '
Таким образом, я передаю ключ API (как пользователь) из geckoboard с пустым паролем (пользователь: пароль).
Тогда там, где множество других вопросов, но я, наконец, получил это работает в любом случае 🙂
PS. Спасибо @Chris за попытку помочь! Всегда одинаково поражен общей полезностью сообщества stackoverflow.
Присвойте команду 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 Вот.