スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Google APIのサンプル

GoogleのカレンダーやToDo(Tasks)をコントロールするAPI群の使い方まとめです。
※ VB6です

HTTP操作をするため、以下のライブラリを参照設定する必要があります。
「Microsoft WinHTTP Services」

手順は、まずログインプロセスでトークンを取得し、そのトークンを使って必要なAPIをHTTP経由で操作するといった感じです。
なので、したい操作によって接続先アドレスがちょいちょい変わります。

スケジュールやタスクを登録する際はPOST、登録されている情報を取得する際はGETですが、その際、JSONというデータ形式を使ってやりとりします。
※ JSONをデコードするクラスも記事投稿していますので、ご参照ください。
記事

日付・時間形式など、Google APIのヘルプページには載ってない気がするんですよね。。試行錯誤で形式を探り当てたので、形式で困ってらっしゃる方は以下ご参考。


● ログイン & トークン・承認コード取得
以下のような感じでログインし、APIをコントロールする際のトークンなどを取得します。
なお、接続先アドレスは、
Private Const URI_GOOGLE_LOGIN As String = "https://www.google.com/accounts/ClientLogin"
です。

Private http As WinHttp.WinHttpRequest

'*--------------------------------------------------------------------*
'*-- Google へのログイン ---------------------------------------------*
'*--------------------------------------------------------------------*
Public Function login(email As String, password As String) As Boolean
Dim Body As String

login = False

Body = "Email=" & email & "&Passwd=" & password & "&service=cl&source=Microsoft-VisualBasic-6.0"
Set http = New WinHttp.WinHttpRequest
http.Open "POST", URI_GOOGLE_LOGIN, False
http.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
http.Send CVar(Body)

If http.Status <> HTTP_STATUS_OK Then
login = False
ErrMsg = http.StatusText
Exit Function
End If
If InStr(1, http.ResponseText, "Auth=") = 0 Then
login = False
ErrMsg = http.StatusText
Exit Function
End If

token = Right(http.ResponseText, Len(http.ResponseText) - InStrRev(http.ResponseText, "Auth=") - 4)
authorization = "GoogleLogin auth=" & token

login = True
ErrMsg = ""
End Function


●Tasksのコントロール(リスト取得)

ログインする際に取得したトークンを利用して、以下のような感じでアクセスします。
以下は、Tasksのリストを取得するためのものです。
※ RepStrは文字置換関数です。ググるとヒットしますので、そちらをご参照ください。

Private Const URI_GOOGLE_TASKS_TASKLISTID As String = "https://www.googleapis.com/tasks/v1/users/@me/lists?key=<>"


uri = RepStr(URI_GOOGLE_TASKS_TASKLISTID, "<>", API_KEY)
http.Open "GET", uri, False
http.Option(WinHttpRequestOption_EnableRedirects) = False
http.SetRequestHeader "Authorization", authorization
http.SetRequestHeader "Content-Type", "application/json"
http.Send


●Tasksのコントロール(Taskの取得)
同じく、リスト内にあるTaskを取得するための接続先です。
なお、TaskListIDは、上の「リスト取得」で取ることができる、リスト固有のIDです。

uri = RepStr(RepStr(URI_GOOGLE_TASKS, "<>", API_KEY), "<>", TaskListID)
http.Open "GET", uri, False
http.Option(WinHttpRequestOption_EnableRedirects) = False
http.SetRequestHeader "Authorization", authorization
http.SetRequestHeader "Content-Type", "application/json"
http.Send


●カレンダーの種類の取得

Private Const URI_GOOGLE_CALENDARLIST As String = "https://www.googleapis.com/calendar/v3/users/me/calendarList?key=<>"

uri = RepStr(URI_GOOGLE_CALENDARLIST, "<>", API_KEY)
http.Open "GET", uri, False
http.Option(WinHttpRequestOption_EnableRedirects) = False
http.SetRequestHeader "Authorization", authorization
http.SetRequestHeader "Content-Type", "application/json"
http.Send


●スケジュールの取得
スケジュールを普通に読み込むと、大量にデータが流れ込んでくると思うので、そこで固まります。(一回、大泣きしました。。)

なので、日付指定オプション(timeMin, timeMax)で期間を指定してあげましょう。
また、念のため、maxResults(とってくる上限個数)も指定しておいた方がいいかも。

指定する日付は、yyyy-MM-ddT00:00:00Z というようにTだのZだのが付きます。
2012/4/1だったら、2012-04-01T00:00:00Zですね。時間部分は省けないようでした。

Private Const URI_GOOGLE_CALENDAR As String = "https://www.googleapis.com/calendar/v3/calendars/<>/events?key=<>"

uri = RepStr(RepStr(URI_GOOGLE_CALENDAR, "<>", API_KEY), "<>", CalendarID)
http.Open "GET", uri _
& "&timeMin=" & Format(dt_from, "yyyy-MM-dd") & "T" & Format(dt_from, "HH:mm:ss") & "Z" _
& "&timeMax=" & Format(dt_to, "yyyy-MM-dd") & "T" & Format(dt_to, "HH:mm:ss") & "Z" _
& "&maxResults=100" _
, False
http.Option(WinHttpRequestOption_EnableRedirects) = False
http.SetRequestHeader "Authorization", authorization
http.SetRequestHeader "Content-Type", "application/json"
http.Send


● カレンダー登録
アクセス自体は上のような感じですが、渡すデータの形式でちょっと悩みました。
要はJSON形式なのですが、日付指定がちょっと変わった感じ。
 {・・・, "start":{"dateTime":"2012-04-01T12:00:00+09:00"}, ・・・}
といった感じです。詳細は以下ご参考。


Private Const URI_GOOGLE_CALENDAR As String = "https://www.googleapis.com/calendar/v3/calendars/<>/events?key=<>"


Dim sCmd As String
sCmd = "{ ""summary"":""" & Title & """,""description"":""" & Content & """,""location"":""" & Location & """,""start"": {""dateTime"": ""2012-04-27T12:00:00+09:00""}, ""end"": {""dateTime"": ""2012-04-27T12:30:00+09:00""}}"
' If DueDate <> 0 _
Then sCmd = sCmd & ",""due"": """ & Format(DueDate, "yyyy-MM-dd") & "T" & Format(DueDate, "HH:nn:ss") & ".000Z"" }" _
Else sCmd = sCmd & " }"

uri = RepStr(RepStr(URI_GOOGLE_CALENDAR, "<>", API_KEY), "<>", CalendarID)

http.Open "POST", uri, False
http.Option(WinHttpRequestOption_EnableRedirects) = False
http.SetRequestHeader "Authorization", authorization
http.SetRequestHeader "Content-Type", "application/json"
http.Send CVar(sCmd)


後ほどサンプルエクセルを掲載予定です。


スポンサーサイト

トラックバック

コメント

助かりました
ほしいものドストライクです。
ありがとうございます。
これからクラスを作るためにドキュメントを読むのですが、
サンプルでだいたいの勘所をつかむことができました。
  • 2013-05-09│13:15 |
  • yonep URL│
  • [edit]
承認待ちコメント
このコメントは管理者の承認待ちです
  • 2014-11-23│12:01 |
  • [edit]
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
  • 2014-11-24│12:51 |
  • [edit]

コメントを残す

Secret



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。