Skip to content

Instantly share code, notes, and snippets.

@sonpython
Created April 7, 2017 17:54
Show Gist options
  • Save sonpython/0657ca303e68656606c88ff1ea325637 to your computer and use it in GitHub Desktop.
Save sonpython/0657ca303e68656606c88ff1ea325637 to your computer and use it in GitHub Desktop.
list and get slide + thumbnail in google drive
from __future__ import print_function
import httplib2
from apiclient import discovery
from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpResponseRedirect
from oauth2client.client import flow_from_clientsecrets, OAuth2WebServerFlow
from oauth2client.contrib import xsrfutil
from oauth2client.contrib.django_util.storage import DjangoORMStorage
class GoogleDrive():
# ggd = GoogleDrive(request, CredentialsModel, CLIENT_ID, CLIENT_SECRET, scopes,
# redirect_uri, APPLICATION_NAME, allow_file_types)
def __init__(self, *args, **kwargs):
for k, v in kwargs.iteritems():
setattr(self, k, v)
self.FLOW = OAuth2WebServerFlow(
client_id = self.CLIENT_ID,
client_secret = self.CLIENT_SECRET,
scope=self.scopes,
redirect_uri=self.redirect_uri
)
NewCredentialsModel, NewCredentialsModel_created = self.CredentialsModel.objects.get_or_create(
user=self.request.user,
)
self.storage = DjangoORMStorage(self.CredentialsModel, 'user', self.request.user, 'credential')
def save_credentials(self):
credential = self.FLOW.step2_exchange(self.request.GET)
self.storage.put(credential)
return True
def get_credentials(self):
credential = self.storage.get()
status = False
authorize_url = ''
if not credential or credential.invalid:
self.FLOW.params['state'] = '%s|||%s' % (xsrfutil.generate_token(self.CLIENT_SECRET,
self.request.user),self.request.build_absolute_uri())
authorize_url = self.FLOW.step1_get_authorize_url()
return {'status':status,'authorize_url':authorize_url,'credential':credential}
else:
self.credential = credential
status = True
return {'status':status,'authorize_url':authorize_url,'credential':credential}
def get_list_slides(self):
credential = self.get_credentials()['credential']
http = credential.authorize(httplib2.Http())
items = []
# drive
drive_service = discovery.build('drive', 'v3', http=http)
slide_service = discovery.build('slides', 'v1', http=http)
results = drive_service.files().list(fields="nextPageToken, files(id, name, mimeType)").execute()
all_items = results.get('files', [])
for item in all_items:
if item['mimeType'] in self.allow_file_types:
presentation = slide_service.presentations().get(presentationId=item['id']).execute()
slide = presentation.get('slides')[0]
objectId = slide.get('objectId')
slide_thumbnail = slide_service.presentations().pages().getThumbnail(presentationId=item['id'],
pageObjectId=objectId).execute()
item['thumbnail'] = slide_thumbnail
items.append(item)
return items
def get_page_thumbnail(self, slide_id, page_number):
page_number = page_number -1
credential = self.get_credentials()['credential']
http = credential.authorize(httplib2.Http())
# drive
slide_service = discovery.build('slides', 'v1', http=http)
presentation = slide_service.presentations().get(presentationId=slide_id).execute()
slides = presentation.get('slides')
max_page_number = len(slides) - 1
if page_number > max_page_number:
page_number = max_page_number
slide = slides[page_number]
objectId = slide.get('objectId')
thumbnail = slide_service.presentations().pages().getThumbnail(presentationId=slide_id,
pageObjectId=objectId).execute()
return thumbnail['contentUrl']
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment