In this tutorial, we are going to learn how to download photos or videos to your PC from your Google Photos account using Google Photos API and few other libraries in Python.
From my older videos, I went over how to use Google Photos API (upload media files, get album/media item metadata, search media files) in Python. And this tutorial is a follow up how we can use the same Google Photos API to export the files.
Buy Me a Coffee? Your support is much appreciated!
PayPal Me: https://www.paypal.me/jiejenn/5
Venmo: @Jie-Jenn
Google_Photos_Backup.py
import os
from Google import Create_Service
import pandas as pd # pip install pandas
import requests # pip install requests
pd.set_option('display.max_columns', 100)
pd.set_option('display.max_rows', 150)
pd.set_option('display.max_colwidth', 150)
pd.set_option('display.width', 150)
pd.set_option('expand_frame_repr', True)
CLIENT_SECRET_FILE = 'client_secret_GoogleCloudDemo.json'
API_NAME = 'photoslibrary'
API_VERSION = 'v1'
SCOPES = ['https://www.googleapis.com/auth/photoslibrary']
service = Create_Service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)
myAblums = service.albums().list().execute()
myAblums_list = myAblums.get('albums')
dfAlbums = pd.DataFrame(myAblums_list)
travel_album_id = dfAlbums[dfAlbums['title'] == 'Travel']['id'].to_string(index=False).strip()
def download_file(url:str, destination_folder:str, file_name:str):
response = requests.get(url)
if response.status_code == 200:
print('Downloading file {0}'.format(file_name))
with open(os.path.join(destination_folder, file_name), 'wb') as f:
f.write(response.content)
f.close()
media_files = service.mediaItems().search(body={'albumId': travel_album_id}).execute()['mediaItems']
destination_folder = r'.\Photos Backup'
for media_file in media_files:
file_name = media_file['filename']
download_url = media_file['baseUrl'] + '=d'
download_file(download_url, destination_folder, file_name)
Google.py
import pickle
import os
from google_auth_oauthlib.flow import Flow, InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload
from google.auth.transport.requests import Request
def Create_Service(client_secret_file, api_name, api_version, *scopes):
print(client_secret_file, api_name, api_version, scopes, sep='-')
CLIENT_SECRET_FILE = client_secret_file
API_SERVICE_NAME = api_name
API_VERSION = api_version
SCOPES = [scope for scope in scopes[0]]
print(SCOPES)
cred = None
pickle_file = f'token_{API_SERVICE_NAME}_{API_VERSION}.pickle'
# print(pickle_file)
if os.path.exists(pickle_file):
with open(pickle_file, 'rb') as token:
cred = pickle.load(token)
if not cred or not cred.valid:
if cred and cred.expired and cred.refresh_token:
cred.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRET_FILE, SCOPES)
cred = flow.run_local_server()
with open(pickle_file, 'wb') as token:
pickle.dump(cred, token)
try:
service = build(API_SERVICE_NAME, API_VERSION, credentials=cred)
print(API_SERVICE_NAME, 'service created successfully')
return service
except Exception as e:
print('Unable to connect.')
print(e)
return None

I am making a website. I was wondering how I would go about displaying my code on my website like you
I am using Markdown for all my posts.
With the script you can only download the first 25 Images
you can do this by “next_page_token” trick, in other part of the series you can understand it
Hi I’ve copied your demo but the code have a error.
“myAblums = service.albums.list.execute()” the “service” have a this error “Instance of ‘Resource’ has no ‘albums’ member”.
and google.py have this error “from google.auth.transport.requests import Request” the keyword form have error “No name ‘auth’ in module ‘google’”
please help me.
Tnk you so much
Hey, i’m really late to answer this but it might help someone else so I will go ahead and answer it. I faced the same issue. So there’s a module called google and the package was looked for in that module and not Google.py file. So i would suggest you to uninstall it using ‘pip uninstall google’ and then try running the code.
Hey, you need to modify “service = build(API_SERVICE_NAME, API_VERSION, credentials=cred)” in Google.py to “service = build(API_SERVICE_NAME, API_VERSION, credentials=cred,static_discovery=False)”, this will resolve your first error.
Thanks this helped.
I have a problems with the videos in mp4 and .MOV some one have the solution to download it?
The document “IMG_0161.MOV” could not be opened.