私は Web 開発者で、ビジネス ソフトウェアから Google API にアクセスしたいと考えています。ドライブ アカウントを作成し、コード (VB.NET) を介してフォルダーとファイルを作成したいと考えています。ドキュメントに従い、JWT (Json Web Token) を作成し、サービス アカウントを使用して、アクセス トークンを取得しました。
次に、Google API にアクセスしたいと思います。コンソール アプリケーションを使用して、いくつかのフォルダーを作成しました。コードを介して、作成されたフォルダーの一覧を取得できます。しかし、Google ドライブ アカウントにそれらのフォルダが表示されません。それはどのように可能ですか?
フォルダとファイルのリストを表示するためにサーバーに送信するリクエストは次のとおりです: https://www.googleapis.com/files/ {FILE_ID}?key={API_KEY}
FILE_ID 要素に関連する情報を含む JSON 文字列を応答として取得します。例えば:
{ "kind":"drive#file", "id":"FILE_ID", "mimeType":"application/vnd.google-apps.folder"(フォルダの場合) / "FILE_MIMETYPE"(ファイルの場合) , "タイトル":"フォルダ名" / "ファイル名", ... }
Google API へのアクセスに使用したコードは次のとおりです: (VB.NET)
...
Public Function browseFile(ByVal fId As String) As List (Of FileSourceElement)
Dim webclient As New WebClient()
webclient.Headers.Add("Authorization", " Bearer " & _accessToken)
webclient.Headers.Add("X-JavaScript-User-Agent", "Google APIs Explorer")
Dim res As String = webclient.DownloadString("https://www.googleapis.com/drive/v2/files?key=" & _apiKey).Trim()
'res contains the JSON with the informations of the file/folder
...
End Function
Public Sub createContainer(ByVal path As String)
Dim webclient As New WebClient()
webclient.Headers.Add("Authorization", " Bearer " & _accessToken)
webclient.Headers.Add("X-JavaScript-User-Agent", "Google APIs Explorer")
webclient.Headers.Add("Content-Type", "application/json")
webclient.UploadString("https://www.googleapis.com/drive/v2/files", _
"POST", _
"{""title"":""daEliminare2"", ""parents"":[{""id"":""" & path & """}], ""mimeType"":""application/vnd.google-apps.folder""}")
End Sub
...
私のGoogleドライブでは、フォルダーを手動で作成したり、ファイルを手動でアップロードしたりしていません。コードを介してのみすべての操作を行う必要があります。
あなたに言ったように、フォルダーを正常に作成し、ファイルのリストを (コードを介して) 正常に印刷しましたが、私の GDrive には、UI によって作成された要素が表示されません。なんで?
サービス アカウントで読みましたが、アクセス トークンを取得するには、ヘッダー、クレーム セット、および署名 (base64 文字列) で構成される Json Web トークン (JWT) と呼ばれる特別な JSON 文字列が必要です。文字列は次のとおりです。
{base64 形式の JWT ヘッダー}.{base64 形式の JWT claimSet}.{base64 形式の JWT 署名}
私のJWTは:
ヘッダ
{
"alg": "RS256",
"typ": "JWT"
}
Claim set { "iss": "0123456789@developer.gserviceaccount.com", // ここで、'0123456789' は CLIENT_ID です。"scope": "https://www.googleapis.com/auth/drive", "aud": "https://accounts.google.com/o/oauth2/token", "exp": timeStamp + 3600, //ここで、'timeStamp' は 1970-01-01T00:00:00 からの秒数です。"iat": タイムスタンプ}
署名を書くには、このページで説明されている手順に従いました。
https://developers.google.com/accounts/docs/OAuth2ServiceAccount#computingsignature
JWT を作成したら、それをサーバーに送信し、このモードで応答として JSON 文字列を取得します。
{
"access_token": "ACCESS_TOKEN", // (e.g.: 1/8xbJqaOZXS...)
"type_token": "Bearer",
"expire_in": 3600
}
アクセス トークン (AT) を取得したら、それを使用して Google API にアクセスします。たとえば、ファイルとフォルダーのすべてのリストを表示する場合、次のようなヘッダーを持つ要求を送信します。
Authorization: Bearer AT X-JavaScript-User-Agent: Google APIs Explorer
URL: https://www.googleapis.com/drive/v2/files?key= {MY_API_KEY}
ただし、リストには (VB.NET コンソール アプリケーションを使用して) いくつかの項目があることを強調しておきますが、Google ドライブには何もありません。
Access Token は取得できたのですが、Google API にアクセスできません。
PS: ブラウザを使用せずに Google API にアクセスする必要があります。
パート2:
アクセス トークンを取得するには、ヘッダー、クレーム セット、および署名 (base64 文字列) で構成される Json Web トークン (JWT) と呼ばれる特別な JSON 文字列が必要であるとサービス アカウントで読みました。文字列は次のとおりです。
{base64 形式の JWT ヘッダー}.{base64 形式の JWT claimSet}.{base64 形式の JWT 署名}
私のJWTは:
ヘッダ
{
"alg": "RS256",
"typ": "JWT"
}
Claim set { "iss": "0123456789@developer.gserviceaccount.com", // ここで、'0123456789' は CLIENT_ID です。"scope": "https://www.googleapis.com/auth/drive", "aud": "https://accounts.google.com/o/oauth2/token", "exp": timeStamp + 3600, //ここで、'timeStamp' は 1970-01-01T00:00:00 からの秒数です。"iat": タイムスタンプ}
署名を書くには、このページで説明されている手順に従いました。
https://developers.google.com/accounts/docs/OAuth2ServiceAccount#computingsignature
JWT を作成したら、それをサーバーに送信し、このモードで応答として JSON 文字列を取得します。
{
"access_token": "ACCESS_TOKEN", // (e.g.: 1/8xbJqaOZXS...)
"type_token": "Bearer",
"expire_in": 3600
}
アクセス トークン (AT) を取得したら、それを使用して Google API にアクセスします。たとえば、ファイルとフォルダーのすべてのリストを表示する場合、次のようなヘッダーを持つ要求を送信します。
Authorization: Bearer AT X-JavaScript-User-Agent: Google APIs Explorer
URL: https://www.googleapis.com/drive/v2/files?key= {MY_API_KEY}
ただし、リストには (VB.NET コンソール アプリケーションを使用して) いくつかの項目があることを強調しておきますが、Google ドライブには何もありません。
Access Token は取得できたのですが、Google API にアクセスできません。
PS: ブラウザを使用せずに Google API にアクセスする必要があります。
これからもよろしくお願いします
MP