web-dev-qa-db-ja.com

Googleカレンダーの予定のイベントIDを確認するにはどうすればよいですか?

Googleカレンダーのイベントをいくつか作成しましたが、プログラムでそれらの操作を実行したいと思います。

問題は、IDがないことです。

カレンダーに移動してイベントをクリックすると、IDを確認できる場所がありません。

どこに私がそれを見つけられるか知っていますか?

8
CodyBugstein

Googleカレンダーのウェブサイト

彼は最初にカレンダーにクリックして特定のイベントのIDを見つける方法を尋ねたので、それが私も方法を知るために必要だったので、

  1. Googleカレンダーで予定をクリックします。

  2. https://calendar.google.com/calendar/render?pli=1#eventpage_6%7Ceid-NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw-1-0-などのURLのページに移動します

  3. URLで「eid」を探します。

  4. eid-と次の-の間の文字列を選択してコピーします。 (ここでの私の例では、NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZwです。)

  5. 次に、Base64形式からデコードする必要があります。その文字列を https://www.base64decode.org/ などのツールに貼り付けることができます。

  6. 結果は、スペースで区切られた2つの文字列になります。最初の文字列はイベントIDです。

11
Ryan

イベントIDを確認する別の方法があります。

  1. https://www.google.com/calendar/render?gsessionid=OK&eventdeb=1 でイベントデバッグURLに移動します
  2. 影響を受けるイベントを表示するには、ダブルクリックします。
  3. ドロップダウンメニュー[その他のアクション]を選択します。
  4. 「トラブルシューティング情報」をクリックします。
  5. 表示されるテキストをコピーして、サポートへの返信に貼り付けます。

出典: http://googleappstroubleshootinghelp.blogspot.com/2012/09/how-to-find-troubleshooting-information.html

他にすばやく簡単な方法が1つあります。

  • カレンダーでイベントをクリックします。デバッグモードである必要はありません。
  • URLから、最後のスラッシュと疑問符の間の文字列をコピーします。
  • この文字列をbase64エンコーダーに貼り付けます。 ( https://www.base64decode.org/
  • イベントIDとカレンダーの所有者(あなた?)のメールが届きます。
  • (eventIdは最初の文字列です。)
2
user3596751

TL; DR

これには高度なAPIを使用する必要があります。

_Calendar.Events.list(calendarId).items[0].id; // returns the id of the first event
_

特定のイベントのイベントIDだけが必要で、手動のアプローチを使用しても問題ない場合は、 次に_eventdeb=1_が最善の策 です。

プログラムによるソリューションが必要な場合は、標準API(CalendarApp)を使用できないことに注意してください。これは、CalendarEventの-​​ getId() のドキュメントに、 :

イベントの一意のiCalUIDを取得します。 Calendar v3 APIとCalendar Advanced Serviceで使用されるiCalUIDとイベントIDは同一ではなく、相互に使用することはできません。セマンティクスの1つの違いは、繰り返し発生するイベントでは、1つのイベントのすべての発生が異なるIDを持ち、すべて同じiCalUIDを共有することです。

つまり、繰り返し発生するイベントのURLを作成する場合、特に繰り返し発生するイベントではgetId()を適切に使用できないため、問題が発生します。最良の修正は、Advanced Calendar APIを使用することです。 (また、 カレンダーイベントへのリンクを作成する を試みている場合、高度なAPIには、エンコードされたcalendarId + realEventIdを持つhtmlLinkプロパティさえあります。


繰り返しイベントでgetId()が機能しない理由の詳細を次に示します。これは、繰り返し発生するイベントでevent.getId()を呼び出すと、同じIDが取得されるためです。単純なカレンダーAPIを使用してカレンダーイベントの特定のインスタンスを参照する方法はありません。 URLは、__20190626T000000Z_などの形式を追加することにより、イベントの特定のインスタンスを参照できます。ただし、そこで提供する必要のある値は明確ではありません。 ___が__R_に置き換えられ、Zが_@google.com_に置き換えられる場合もあり、問題はさらに複雑になります。

これが問題であることを証明するには:

  1. 定期的なカレンダーイベントを見つけます。
  2. そのURLを解析します(特定のインスタンスを参照することが保証されています)。
  3. CalendarApp.getEventById(parsedId1).getId()を呼び出すと、返される値に注意してください。
  4. 次に、イベントの別のインスタンスのURLを解析します。
  5. CalendarApp.getEventById(parsedId2).getId()を呼び出すと、返される値に注意してください。 _parsedId1_と_parsedId2_は異なる文字列ですが(特定のインスタンスを参照)、getId()の戻り値はどちらも同じです。イベントは実際には特定のインスタンスへの参照ですが、それらのIDをシリアル化することはできません。

単純なカレンダーAPIを本当に使用したい場合は、何らかの同期プロセスが必要で、カレンダーイベントの各インスタンスにメタデータ/タグを次のように保存する必要があります この回答で言及 。ただし、 Advanced API を使用すると、作業がはるかに簡単になります。

1
Senseful
  • calを取得
  • 問題の期間中にすべてのイベントをループする
function myFunction() {
  var cal = CalendarApp.getCalendarById(id);
  var events = cal.getEvents(startTime, endTime);
  for ( var i in events ) {
    var id = events[i].getId();
  }
}
0
Bryan P

簡単な答えは、eventId = event.get( 'id')です。あなたはイベントオブジェクトについて質問しませんでしたが、他の人へのガイドとして、これは私がGoogleカレンダー用に作成した方法ですpythonスクリプト:

creds = get_credentials()
http = creds.authorize(httplib2.Http())
calendar_service = discovery.build('calendar', 'v3', http=http)
event = calendar_service.events().insert(calendarId='primary', 
body=event).execute()

その後

eventId = event.get('id')
0
Donagh McCarthy