Julian Nikadie
Julian Nikadie

Reputation: 51

Get Google Drive file owner email address using Google Drive API V3 via python

I'm having trouble getting the owner of a file on Google Drive via the Google Drive API v3.

I could do this under v2, but things have changed.

According to the documentation I need to:

  1. List the permissions on a file (no problem)
  2. Find Id of the permission with the 'owner' role from that list of permissions (no problem)
  3. Get that permission ... which should return a permissions resource which should include the email address (problem!)

Unfortunately, what I'm getting back includes some of the information, but not the email address.

I suspect that I need to change my "get" call to tell the API which fields I'm after, but I can't see how to do this.

This is what I've got (v3):

from oauth2client.service_account import ServiceAccountCredentials
from httplib2            import Http
from apiclient.discovery import build

def build_service(user):
  keyfile = 'C:\Python27\Scripts\Certificates for Transfer owner script\Transfer Ownership on Drive-f240cff252af.json'
  SCOPE = 'https://www.googleapis.com/auth/drive'
  credentials = ServiceAccountCredentials.from_json_keyfile_name(keyfile, scopes=SCOPE).create_delegated(user)
  http_auth = credentials.authorize(Http())
  return build('drive', 'v2', http=http_auth)

service = build_service('[email protected]')
f = service.files().get(fileId='1lASRBuAHRxEC-T0X5SdlF3w7X_168Q2QV9L0V6QaXUk').execute()

p = service.permissions().get(fileId='1lASRBuAHRxEC-T0X5SdlF3w7X_168Q2QV9L0V6QaXUk',permissionId='18137907375963748644').execute()
currentOwner = p['emailAddress']

Unfortunately I get a "KeyError: 'emailAddress'" (and if I look at the contents of "p", there's role, kind, type and id, but no email Address).

This works for me (using v2):

from oauth2client.service_account import ServiceAccountCredentials
from httplib2            import Http
from apiclient.discovery import build

def build_service(user):
  keyfile = 'C:\Python27\Scripts\Certificates for Transfer owner script\Transfer Ownership on Drive-f240cff252af.json'
  SCOPE = 'https://www.googleapis.com/auth/drive'
  credentials = ServiceAccountCredentials.from_json_keyfile_name(keyfile, scopes=SCOPE).create_delegated(user)
  http_auth = credentials.authorize(Http())
  return build('drive', 'v2', http=http_auth)

service = build_service('[email protected]')
f = service.files().get(fileId='1lASRBuAHRxEC-T0X5SdlF3w7X_168Q2QV9L0V6QaXUk').execute()

currentOwner = f['owners'][0]['emailAddress']

Upvotes: 2

Views: 2912

Answers (1)

Julian Nikadie
Julian Nikadie

Reputation: 51

Too simple ... just needed to add the following to the get call:

,fields='emailAddress'

i.e.

currentOwner = service.permissions().get(fileId='1lASRBuAHRxEC-T0X5SdlF3w7X_168Q2QV9L0V6QaXUk',permissionId='18137907375963748644',fields='emailAddress').execute()['emailAddress']

Upvotes: 2

Related Questions