2012-04-19 2 views
1

Я пытаюсь выполнить Curl запрос на Google Calendar API, используя , который говорит:Вставить событие в Календаре Google с помощью PHP

POST https://www.googleapis.com/calendar/v3/calendars/{name_of_my_calendar}/events?sendNotifications=true&pp=1&key={YOUR_API_KEY} 

Content-Type: application/json 
Authorization: OAuth 1/SuypHO0rNsURWvMXQ559Mfm9Vbd4zWvVQ8UIR76nlJ0 
X-JavaScript-User-Agent: Google APIs Explorer 

{ 
"start": { 
    "dateTime": "2012-06-03T10:00:00.000-07:00" 
}, 
"end": { 
    "dateTime": "2012-06-03T10:20:00.000-07:00" 
}, 
"summary": "my_summary", 
"description": "my_description" 
} 

Как я должен сделать это в PHP? Интересно, какие параметры я должен отправить и какие константы я должен использовать. Я сейчас делаю:

 $url = "https://www.googleapis.com/calendar/v3/calendars/".urlencode('{name_of_my_calendar}')."/events?sendNotifications=true&pp=1&key={my_api_key}"; 

     $post_data = array( 
      "start" => array("dateTime" => "2012-06-01T10:00:00.000-07:00"), 
      "end" => array("dateTime" => "2012-06-01T10:40:00.000-07:00"), 
      "summary" => "my_summary", 
      "description" => "my_description" 
     ); 

     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_POST, 1); 
     // adding the post variables to the request 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 

     $output = curl_exec($ch); 

     curl_close($ch); 

но ответ:

{ 
    error: { 
     errors: [ 
     { 
      domain: "global", 
      reason: "required", 
      message: "Login Required", 
      locationType: "header", 
      location: "Authorization" 
     } 
     ], 
     code: 401, 
     message: "Login Required" 
    } 
} 

Как отформатировать мои параметры?

+0

Вы прочитали https://developers.google.com/google-apps/calendar/auth? – Daan

+0

Да, мой код работает на примере, где я просто разбираю события из одного и того же календаря. – Gustav

+0

Хм. Не уверен, я никогда раньше не работал с этим API. Вы можете попробовать официальный пакет API PHP: http://code.google.com/p/google-api-php-client/ Надеюсь, это поможет! – Daan

ответ

2

Я заметил, что этот вопрос задан довольно давно, однако после выяснения постпараметрической проблемы через некоторое время я подумал, что может быть полезно другим, чтобы ответить на него. Во-первых в '$ post_data', я включил 'начало' и 'конец':

$post_data = array(
    "end" => array("dateTime" => "2012-06-01T10:40:00.000-07:00"), 
    "start" => array("dateTime" => "2012-06-01T10:00:00.000-07:00"), 
    "summary" => "my_summary", 
    "description" => "my_description" 
); 

Во-вторых, я понял, Google Calendar API ожидается, что данные будут в формате JSON, поэтому в curl_setopt:

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data)); 

Это отлично сработало для меня, надеюсь, что это полезно и для кого-то другого!

+0

Для меня не работает. Я пробовал этот код, или я делаю неправильный ключ, но я так не думаю. один из них: «Ключ для серверных приложений (с блокировкой IP)». Я разрешил весь IP на данный момент. авторизация требуется даже для меня. Могу ли я получить доступ к вашему полному примеру, пожалуйста? – AndreaBogazzi

Смежные вопросы