Part 1 Docs
01
Go to google drive and go to the folders section
02
Go to the documentation for the create
method.
https://developers.google.com/drive/api/reference/rest/v3/files/create
We use this to upload files
Part 2 - Script Create new Folder and upload file
02
Create a new folder random files
with the script in 02-createFolders
Use the mime type found at
https://developers.google.com/drive/api/guides/mime-types
application/vnd.google-apps.folder
from googleServiceCreate import create_service
CLIENT_SECRET = 'credentials.json'
API_NAME = 'drive'
API_VERSION = 'v3'
SCOPES = ['https://www.googleapis.com/auth/drive']
service = create_service(CLIENT_SECRET,API_NAME,API_VERSION,SCOPES)
national_parks = ['Yellowstone','Rocky Moutains','Yosemite']
file_metadata = {
'name': 'random files',
'mimeType': 'application/vnd.google-apps.folder'
}
service.files().create(body=file_metadata).execute()
02
Click on the folder and get the 'id' of the folder from the URL.
1JWqwvybul0ZlvgcYkP53FxozYJUq9JYp
03
The example files are an excel file and jpeg, use the folder id in the previous step,
and get the 'mimeType' for excel files and jpeg from,
https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
Insert the folder id, names of files and mime types into variables,
from googleServiceCreate import create_service CLIENT_SECRET = 'credentials.json' API_NAME = 'drive' API_VERSION = 'v3' SCOPES = ['https://www.googleapis.com/auth/drive'] service = create_service(CLIENT_SECRET,API_NAME,API_VERSION,SCOPES) folder_id = '1JWqwvybul0ZlvgcYkP53FxozYJUq9JYp' file_names = ['Untitled spreadsheet.xlsx', 'Automn_landscape.jpg'] mime_types = ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet','image/jpeg']
04
Create a loop and add the names to a dict's name 'key', and the folder_id to 'parents'
05
Import the class MediaFileUpload from the googleapiclient.http
library
Add the path to the files as the first argument to a MediaFileUpload
class, format with file_name and mimeType with mime type.
Make sure to use the zip() function in loop
from googleapiclient.http import MediaFileUpload
from googleServiceCreate import create_service
CLIENT_SECRET = 'credentials.json'
API_NAME = 'drive'
API_VERSION = 'v3'
SCOPES = ['https://www.googleapis.com/auth/drive']
service = create_service(CLIENT_SECRET,API_NAME,API_VERSION,SCOPES)
folder_id = '1JWqwvybul0ZlvgcYkP53FxozYJUq9JYp'
file_names = ['Untitled spreadsheet.xlsx', 'Automn_landscape.jpg']
mime_types = ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet','image/jpeg']
for file_name,mime_type in zip(file_names,mime_types):
file_metadata = {
'name': file_name,
'parents': [folder_id]
}
media = MediaFileUpload('./exFiles/{0}'.format(file_name),mimetype=mime_type)
service.files().create(
body=file_metadata,
media_body=media,
fields='id'
).execute()
06
The files should now appear in the folder
Part 3 - Both Scripts
01
Full Codes
from googleapiclient.http import MediaFileUpload
from googleServiceCreate import create_service
CLIENT_SECRET = 'credentials.json'
API_NAME = 'drive'
API_VERSION = 'v3'
SCOPES = ['https://www.googleapis.com/auth/drive']
service = create_service(CLIENT_SECRET,API_NAME,API_VERSION,SCOPES)
folder_id = '1JWqwvybul0ZlvgcYkP53FxozYJUq9JYp'
file_names = ['Untitled spreadsheet.xlsx', 'Automn_landscape.jpg']
mime_types = ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet','image/jpeg']
for file_name,mime_type in zip(file_names,mime_types):
file_metadata = {
'name': file_name,
'parents': [folder_id]
}
media = MediaFileUpload('./exFiles/{0}'.format(file_name),mimetype=mime_type)
service.files().create(
body=file_metadata,
media_body=media,
fields='id'
).execute()
import os.path
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
def create_service(client_secret,api_name,api_version,*scopes):
CLIENT_SECRET = client_secret
API_NAME = api_name
API_VERSION = api_version
SCOPES = [scope for scope in scopes[0]]
creds = None
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json',SCOPES)
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file('credentials.json',SCOPES)
creds = flow.run_local_server(port=0)
with open ('token.json','w') as token:
token.write(creds.to_json())
try:
service = build(API_NAME,API_VERSION,credentials=creds)
return service
except HttpError as e:
print('error', e)