In part 3 of the Google Photos API and Python tutorial series, we will be learning how to use mediaItems resource to access and manage your media item information.


Buy Me a Coffee? Your support is much appreciated!
PayPal Me: https://www.paypal.me/jiejenn/5
Venmo: @Jie-Jenn





demo_mediaItems.py (part 1)

from pprint import pprint
from init_photo_service import service
import pandas as pd


"""
list method
"""
response = service.mediaItems().list(pageSize=25).execute()

lst_medias = response.get('mediaItems')
nextPageToken = response.get('nextPageToken')

while nextPageToken:
    response = service.mediaItems().list(
        pageSize=25,
        pageToken=nextPageToken
    ).execute()

    lst_medias.extend(response.get('mediaItems'))
    nextPageToken = response.get('nextPageToken')

df_media_items = pd.DataFrame(lst_medias)    


"""
get method
"""
media_id = df_media_items['id'][108]
response = service.mediaItems().get(mediaItemId=media_id).execute()


"""
batchGet method
"""
media_ids = df_media_items['id'][107:112].to_list()
response = service.mediaItems().batchGet(mediaItemIds=media_ids).execute()
print(pd.DataFrame(response.get('mediaItemResults'))['mediaItem'].apply(pd.Series))


"""
search method (by album id)
"""
response_albums_list = service.albums().list().execute()
albums_list = response_albums_list.get('albums')

album_id = next(filter(lambda x: "Google Product Icons" in x['title'], albums_list))['id']

request_body = {
    'albumId': album_id,
    'pageSize': 25
}

response_search = service.mediaItems().search(body=request_body).execute()

lstMediaItems = response_search.get('mediaItems')
nextPageToken = response_search.get('nextPageToken')

while nextPageToken:
    request_body['pageToken'] = nextPageToken

    response_search = service.mediaItems().search(body=request_body).execute()
    lstMediaItems.extend(response_search.get('mediaItems'))
    nextPageToken = response_search.get('nextPageToken')

df_search_result = pd.DataFrame(lstMediaItems)    


def response_media_items_by_filter(request_body: dict):
    try:
        response_search = service.mediaItems().search(body=request_body).execute()
        lstMediaItems = response_search.get('mediaItems')
        nextPageToken = response_search.get('nextPageToken')

        while nextPageToken:
            request_body['pageToken'] = nextPageToken
            response_search = service.mediaItems().search(body=request_body).execute()

            if not response_search.get('mediaItem') is None:
                lstMediaItems.extend(response_search.get('mediaItems'))
                nextPageToken = response_search.get('nextPageToken')
            else:
                nextPageToken = ''
        return lstMediaItems
    except Exception as e:
        print(e)
        return None

"""
search method (by date)
"""
request_body = {
    'pageSize': 100,
    'filters': {
        'dateFilter': {
            # 'ranges': [
            #     {
            #         'startDate': {
            #             'year': 2019,
            #             'month': 1,
            #             'day': 1
            #         },
            #         'endDate': {
            #             'year': 2019,
            #             'month': 12,
            #             'day': 31
            #         }
            #     }
            # ]
            'dates': [
                {
                    'year': 2019,
                    'month': 12,
                    'day': 23
                },
                {
                    'year': 2019,
                    'month': 11,
                    'day': 19
                },
                {
                    'year': 2019,
                    'month': 11,
                    'day': 20
                }
            ]
        }
    }
}

df_search_result = pd.DataFrame(response_media_items_by_filter(request_body))



"""
search method (content filter)
"""
request_body = {
    'pageSize': 100,
    'filters': {
        'contentFilter': {
            'includedContentCategories': [
                'LANDMARKS', 'GARDENS'
            ],
            'excludedContentCategories': [
                'SPORT', 'ANIMALS'
            ]
        }
    }
}

df_search_result = pd.DataFrame(response_media_items_by_filter(request_body))


"""
search method (media type)
"""
request_body = {
    'pageSize': 100,
    'filters': {
        'mediaTypeFilter': {
            'mediaTypes': ['VIDEO']
        }
    }
}

df_search_result = pd.DataFrame(response_media_items_by_filter(request_body))


"""
search method (feature filter)
"""
request_body = {
    'pageSize': 100,
    'filters': {
        'featureFilter': {
            'includedFeatures': ['FAVORITES']
        }
    }
}

df_search_result = pd.DataFrame(response_media_items_by_filter(request_body))


"""
search method (includedArchiveMedia, excludedAppCreatedData)
"""
request_body = {
    'pageSize': 100,
    'filters': {
        'includeArchivedMedia': True,         
        'excludeNonAppCreatedData': False
    }
}
df_search_result = pd.DataFrame(response_media_items_by_filter(request_body))