3

GoogleAPIV3を使用してGoogleカレンダーにイベントを追加しようとしています。私はGoogleのライブラリを使用していないので、これを行う方法について本当に困惑しています。Googleのドキュメントによると、リクエスト本文で「イベントリソース」を送信する必要があります。有効なJSON「文字列」を作成したと思いますが、適切に準備して、いわゆる「リクエスト本文」で送信する方法がわかりません。私を混乱させるのは、文字列値が引用符で囲まれ、非文字列値がそうではない方法です。これは、全体を文字列としてラップし、各二重引用符を二重引用符または二重引用符で囲む必要があることを意味しますか?

これが私が書いたJSONですが、これをGoogleに渡す方法がまだわからないため、テストできませんでした。

{
  "kind": "calendar#event",
  "start": {
    "dateTime": 04/10/2012 08:00 AM
  },
  "end": {
    "dateTime": 04/10/2012 08:00 AM
  },
  "attendees": [
    {
      "email": "myemailaddress@gmail.com",
      "displayName": "My Name",
      "organizer": True,
      "self": True
    }
  ],
  "reminders": {
    "useDefault": True
  }
}

Access/VBAデータベースにVBJSONコードモジュールがインストールされています。そこに文字列を返すStringToJSONという関数があります。私はまだ困惑しています。このJSONをGoogleに渡すと、コード内の1つの大きな文字列値になりますか?

4

1 に答える 1

1

OK、それで私はついに私のJSON文字列を構築して渡す方法を理解しました。私はVBJSONを使用してJSON文字列を作成しています。JSONは大文字と小文字を区別することを忘れないでください(または少なくともGoogleは大文字と小文字を区別すると解釈します)。キーdateTimeとのペアは、キーdatetimeとのペアと同じではなく、Googleは後者を拒否します。

'Code to create JSON using Dictionary Objects and Collection Objects
Dim d As New Scripting.Dictionary
Dim c As New Collection

d.Add "kind", "calendar#event"
d.Add "summary", "Event Title/Summary"

Dim d2(4) As New Scripting.Dictionary

d2(0).Add "dateTime", "2012-04-14T16:00:00.000-04:00"
d.Add "start", d2(0)

d2(1).Add "dateTime", "2012-04-14T18:00:00.000-04:00"
d.Add "end", d2(1)

'First Attendee
d2(2).Add "email", "john.doe@gmail.com"
d2(2).Add "displayName", "John Doe"
d2(2).Add "organizer", True
d2(2).Add "self", True
'Add attendee to collection
c.Add d2(2)

'Second attendee
d2(3).Add "email", "suzy.doe@gmail.com"
d2(3).Add "displayName", "Suzy Doe"
'Add attendee to collection
c.Add d2(3)

'Add collection to original/primary dictionary object
d.Add "attendees", c

'Add more nested pairs to original/primary dictionary object
d2(4).Add "useDefault", True
d.Add "reminders", d2(4)

'Now output the JSON/results
'This requires the VBJSON module (named just JSON, a module, not a class module)
Debug.Print JSON.JSONToString(d)

きれいにされていない出力はこれです:

{"kind":"calendar#event","summary":"Event Title\/Summary","start":{"dateTime":"2012-04-14T16:00:00.000-04:00"},"end":{"dateTime":"2012-04-14T18:00:00.000-04:00"},"attendees":[{"email":"john.doe@gmail.com","displayName":"John Doe","organizer":true,"self":true},{"email":"suzy.doe@gmail.com","displayName":"Suzy Doe"}],"reminders":{"useDefault":true}}

次に、GoogleCalendarAPIのV3を使用してGoogleに送信する方法を示します。V3では、OAuth2.0を使用する必要があるため、以下に示すように、URLに追加する有効なアクセストークンが必要です。また、通常はURLエンコードされたメールアドレスであるCalendarIDを知っている必要があります。たとえば、calendaridは次のようになります:john.doe%40gmail.com

Dim objXMLHTTP As MSXML2.ServerXMLHTTP
Set objXMLHTTP = New MSXML2.ServerXMLHTTP
Dim sPostData As String
sPostData = JSON.JSONToString(d)

Dim sURL As String
sURL = "https://www.googleapis.com/calendar/v3/calendars/{mycalendarid}/events?sendNotifications=false&fields=etag%2ChtmlLink%2Cid&pp=1&access_token={my oauth2.0 access token}"

With objXMLHTTP
    .Open "POST", sURL, False
    .setRequestHeader "Content-Type", "application/json"
    .Send (sPostData)
End With

Debug.Print objXMLHTTP.ResponseText

Set objXMLHTTP = Nothing
于 2012-04-14T03:56:08.987 に答える