Googleカレンダーのイベントをいくつか作成しましたが、プログラムでそれらの操作を実行したいと思います。
問題は、IDがないことです。
カレンダーに移動してイベントをクリックすると、IDを確認できる場所がありません。
どこに私がそれを見つけられるか知っていますか?
彼は最初にカレンダーにクリックして特定のイベントのIDを見つける方法を尋ねたので、それが私も方法を知るために必要だったので、
Googleカレンダーで予定をクリックします。
https://calendar.google.com/calendar/render?pli=1#eventpage_6%7Ceid-NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw-1-0-
などのURLのページに移動します
URLで「eid」を探します。
eid-
と次の-
の間の文字列を選択してコピーします。 (ここでの私の例では、NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw
です。)
次に、Base64形式からデコードする必要があります。その文字列を https://www.base64decode.org/ などのツールに貼り付けることができます。
結果は、スペースで区切られた2つの文字列になります。最初の文字列はイベントIDです。
イベントIDを確認する別の方法があります。
他にすばやく簡単な方法が1つあります。
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
_に置き換えられる場合もあり、問題はさらに複雑になります。
これが問題であることを証明するには:
CalendarApp.getEventById(parsedId1).getId()
を呼び出すと、返される値に注意してください。CalendarApp.getEventById(parsedId2).getId()
を呼び出すと、返される値に注意してください。 _parsedId1
_と_parsedId2
_は異なる文字列ですが(特定のインスタンスを参照)、getId()
の戻り値はどちらも同じです。イベントは実際には特定のインスタンスへの参照ですが、それらのIDをシリアル化することはできません。単純なカレンダーAPIを本当に使用したい場合は、何らかの同期プロセスが必要で、カレンダーイベントの各インスタンスにメタデータ/タグを次のように保存する必要があります この回答で言及 。ただし、 Advanced API を使用すると、作業がはるかに簡単になります。
function myFunction() {
var cal = CalendarApp.getCalendarById(id);
var events = cal.getEvents(startTime, endTime);
for ( var i in events ) {
var id = events[i].getId();
}
}
簡単な答えは、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')