0

Google カレンダー API を使用して、Google App Engine アプリ内から単一の発生イベントを作成しています。

JSON でエンコードされたイベントは次のようになります。

event = {"data":{
             "title": "Test Event",
             "details": "Details of test event",
             "transparency": "opaque",
             "status": "confirmed",
             "location": "My Place",
             "when": [{
                 "start": "2013-03-05T15:00:00.000Z",
                 "end": "2013-03-05T17:00:00.000Z"
             }]
}}

イベントを追加するために使用しているコードは次のとおりです。

def sendGCalEvent(self, event):
    scope = "https://www.google.com/calendar/feeds/"
    authorization_token, _ = app_identity.get_access_token(scope)
    logging.info("Using token %s to represent identity %s",
             authorization_token, app_identity.get_service_account_name())
    payload = simplejson.dumps(event)

    response = urlfetch.fetch(
        "https://www.google.com/calendar/feeds/default/private/full",
        method=urlfetch.POST,
        payload=payload,
        headers = {"Content-Type": "application/json",
                   "Authorization": "OAuth " + authorization_token})
    if response.status_code == 201:
        result = simplejson.loads(response.content)
        logging.info("Status code was %s, and the returned event looks like %s", response.status_code, result)
        return
    raise Exception("Call failed. Status code %s. Body %s",
                response.status_code, response.content)

すべてが機能しているようで、認証は正常に行われ、イベントが投稿され、201 応答が返され、カレンダーからフィールドが追加されたイベント JSON が返されます。

しかし、イベントは作成されず、カレンダーに表示されません。返されたイベント データの [代替リンク] フィールドの URL に移動すると、カレンダーに「イベントが存在しません」というエラー メッセージが表示されます。

これに関するヘルプは非常に高く評価されます。私は Google の API に非常に慣れていないので、明らかな何かが欠けていることを願っています。

4

1 に答える 1

0

動作しました。Calendar API のプロトコル ガイドによると、次のようになります。

エントリを投稿するには、特別な「デフォルト」URL (および Authorization ヘッダー。上記の認証に関するセクションを参照) を使用して、次の HTTP リクエストをカレンダーに送信します。カレンダーは、既定の URL を、認証されたユーザーに属するカレンダーの読み取り/書き込みプライベート フィードの URL に自動的にリダイレクトします。(デフォルトの URL を使用して POST リクエストをカレンダーに送信する必要はありません。必要に応じて、「デフォルト」の代わりにユーザー ID を指定できます。詳細については、カレンダーのフィード タイプのリファレンスをご覧ください。)

POST https://www.google.com/calendar/feeds/default/private/full

これは 201 応答を返しましたが、イベントを追加しませんでした。ただし、デフォルト ユーザーのユーザー ID を指定すると機能します。

POST https://www.google.com/calendar/feeds/user@website.com/private/full

デフォルトのフィードが機能しない理由はまだわかりません。

于 2013-03-03T00:51:36.447 に答える