Календарь Служб Google: запрос занятости / занятости POST с curl
Я пытаюсь выполнить запрос о занятости в Календаре ресурсов Google (Службы Google). Документация API для запроса Freebusy дает следующие указания относительно запроса:
HTTP-запрос:
POST https://www.googleapis.com/calendar/v3/freeBusy
Структура тела запроса:
{ "timeMin": {datetime},
"timeMax": {datetime},
"items": [
{"id": {string}
}
]
}
Вот моя попытка с использованием curl:
$url = "https://www.googleapis.com/calendar/v3/freeBusy";
global $headers; // holds ClientLogin authentification
$freebusy_post = array(
"timeMin" => '2012-12-31T00:00:00',
"timeMax" => '2013-01-08T23:00:00',
"timeZone" => 'America/New York',
/*** "items" below commented out because posting a multidimensional array returns an
"Array to string conversion" error. However, I think the API requires
"items" to be an array. ***/
//"items" => array(
// "id" => "https://www.googleapis.com/calendar/v3/calendars/gdev.wellesley.edu_313736333535343332@resource.calendar.google.com"
// )
/*** My attempt at using a plain string instead of an array ***/
"items" => "gdev.wellesley.edu_313736333535343332@resource.calendar.google.com",
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $freebusy_post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
print_r($data);
Моя проблема: $data ничего не печатает.
Я новичок в PHP, curl и API Google Apps Calendar. Я хотел бы любую помощь / уроки / советы, которые вы можете предложить!
2 ответа
Не уверен, но вы должны сначала преобразовать массив php в json.
$freebusyjson = json_encode($freebusy_post);
Я начал с вашего кода и изменил его, и у меня сработало следующее...
Обратите внимание, как я отформатировал идентификатор календаря в переменной элемента. Мне также нужно было только прикрепить ключ API к URL, так как это общедоступный календарь. Я не думаю, что мне это было нужно изначально, но потом я достиг количества запросов, которые можно было бы сделать без использования API-ключа.
Наконец, обратите внимание на формат времени / даты. Я говорю, что это единственный способ сделать это, но это сработало для меня.
$url = "https://www.googleapis.com/calendar/v3/freeBusy/?key=MY_API_KEY";
$freebusy_post = array(
"timeMin" => '2016-11-01T00:00:00.000Z',
"timeMax" => '2016-12-21T00:00:00.000Z',
"timeZone" => ' America/New York',
"items" => array(array('id'=>"mywebsite.com_randomlettershere@group.calendar.google.com")),
);
$freebusy_post = json_encode($freebusy_post);
$ch = curl_init();curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $freebusy_post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
print_r($data);