2

この質問は何度も見つけましたが、解決策のインスタンスが 1 つも見つからないため、自分で試しています。

雇用主がイベントを Google カレンダーにスケジュールするのに役立つ単純な Web アプリケーションを作成しています。カレンダーを作成し、Google API に登録し、cURL 関数を記述して、既存の予定を確認し、時間と日付を返しました。新しいイベントを作成する関数に夢中です。私が書いた関数 (わかりやすくするためにいくつかの変数名を展開しています) は次のとおりです。

function post_cal($url, $header, $post_content)
{
   global $authtoken, $curlDefaults;
   $request = $url;
   $headers = array('Content-Type: application/json; Authorization: OAuth ' . $authtoken . $header);
   $options = array (
      CURLOPT_URL => $request,
      CURLOPT_HTTPHEADER => $headers,
      CURLOPT_POST => 1,
      CURLOPT_POSTFIELDS => $post_content,
   );
   $ch = curl_init();
   curl_setopt_array($ch, ($curlDefaults + $options));
   $result = curl_exec($ch);
   curl_close($ch);
   $json = json_decode($result, true);
   return $json;
}

次のように post_cal 関数を実行しようとすると、「401 - ログインが必要です」というエラー オブジェクトが表示されます。

$scheduled = post_cal('https://www.googleapis.com/calendar/v3/calendars/xxxxxx/events, '', $apptInfo);

cURL 関数は、イベントを読み取って既存の値を返すために用意した関数とほぼ同じです。どちらも正常に機能します。「https://www.googleapis.com/auth/calendar」スコープが明示的に定義された更新トークンを介して収集された、同じ $authtoken 変数を使用します。Google OAuth のドキュメントを読み直しましたが、このエラーの原因が正確にはわかりません。

$apptInfo は、予定情報を含む JSON にエンコードされた配列であり、開始時刻と終了時刻、概要、および説明が含まれています。

これは、Google が提供する PHP ライブラリ、または Zend/GData フレームワークを使用すると、より簡単に実行できることがわかっています。ただし、私はこのプロジェクトを PHP を独学する方法として使用しています。これまでの経験はほとんどありません。ログイン エラーがどこから来ているのか、落ちる前にそれを克服する方法を少なくとも理解したいと考えています。既存のショートカットに戻ります。これは必要なプロジェクトではないので、私には時間の余裕があります。それは私が助けようとしているものです。

私が間違っていること、または問題を特定するために共有する必要がある情報を誰かに説明してもらえますか? 学習の機会としてこれを逃したくありません!

ありがとう!

4

1 に答える 1

0

firebug を使用すると、送信しているヘッダーを正確に確認できます。すべて問題ないように見えるので、デバッグの問題だと思います。ただし、Google の PHP API SDK を使用することをお勧めします。

$events = $service->events->listEvents('primary');

while(true) {
  foreach ($events->getItems() as $event) {
  echo $event->getSummary();
}
$pageToken = $events->getNextPageToken();
  if ($pageToken) {
     $optParams = array('pageToken' => $pageToken);
     $events = $service->events->listEvents('primary', $optParams);
} else {
   break;
 }
}

https://developers.google.com/google-apps/calendar/v3/reference/events/list

于 2013-12-29T22:18:35.777 に答える