Рубрики
Без рубрики

Управляйте своей фотографией Google с Python! (стр.1)

(Фото Brandon Erlinger-Ford на Unsplash) Скорее всего, если у вас есть устройство Android с G … Tagged с Python, фото, начинающим, учебником.

(Фото Brandon Erlinger-Ford на Unsplash)

Скорее всего, если у вас есть устройство Android с учетной записью Google, подключенной к ней, у вас уже есть много медиа, сохраненных в Google фотографии Отказ Как мы можем взаимодействовать с этими данными в Python? Google имеет Официальная поддержка только для PHP и Java; В противном случае мы должны действительно взаимодействовать с этим через отдых.

Gphotospy Является ли неофициальный пакет Python, который пытается заполнить этот разрыв.

Ярмарный кусок : Я также автор Gphotospy ; Так что теперь вы знаете. Во всяком случае, что нужно сказать, Сотрудничество и идеи очень приветствуются. Я сделал этот пакет через блокировку, чтобы пройти некоторое время полезным и инструктирующим образом.

Настройте ключи аутентификации OAuth

Чтобы начать надо настроить ключи аутентификации OAUTH и включить Google Photo Library.

Укажите свой браузер на Google Console Отказ В баре выберите раскрывающийся список вблизи текущего проекта, чтобы создать новый проект.

Создайте новый проект (кнопка справа).

Я позвонил мою Gphotospy

Затем на меню Burgher выберите: API и услуги > Библиотека Отказ

В библиотеке поиск “фото”, выберите Фото библиотеки API.

Затем нажмите на Включить Кнопка: это меняется на Управлять После нажатия.

Если вы нажмете до УПРАВЛЯТЬ Это позволяет вам прямо к странице управления Google Photo API.

На API и услуги, фото Библиотека API Выберите Реквизиты для входа

Затем выберите + Учетные данные и выберите в раскрывающемся списке: Oauth Client ID Отказ

Выберите тип приложения для создания ( для приложения для рабочего стола Выберите «Другое» , последний!) И дайте ему имя. (Я использовал Gphotospyoauth как имя, но любой сделает)

Осторожно! Если вы случайным пользователем, вы должны перед этой штукой выбрать дисплей авторизации ( Экран согласия OAUTH ), и сделайте его общественностью, если вы не являетесь пользователем G-Suite ($$$). Если вы никогда не делали его до того, как интерфейс уже не подскажет вам на этот момент, поэтому следуйте ссылке и инструкциям.

Не надо сохранять ключи сразу, на самом деле, возвращаясь к главному интерфейсу, вы можете скачать его как .json Файл, который более полезен. Выберите в строке идентификатора клиента OAUTT 2.0, только что создал кнопку загрузки (главное; на следующем изображении находится в правом нижнем углу).

Скачать .json Файл в корне проекта и дайте ему значимое имя (потому что он должен использоваться потом).

Я дал ему имя gphoto_oauth.json Какой я буду ссылаться в код, но не стесняйтесь менять его, как вы будете.

Не забудьте сохранить все эти секретные файлы далеко от Git Thses, если вы совершаете свой довод в репозиторий; Таким образом, добавьте загруженный файл на .gitignore Отказ

Давай началось

Первые вещи сначала давайте установим Gphotospy Использование PIP:

pip install gphotospy

Это установит официальные пакеты Google Google-API-Python-Client , Google-Auth-httplib2 , Google-Auth-Oauthlib и Oauth2Client Если еще не установлено.

Нам также потребуется библиотека для обработки изображений: Pil (подушка)

Так что если у вас не установлено, не забудьте

pip install Pillow

Далее нам нужен импорт. API Google Photos «REST API в основном разделен на три« модуля »плюс некоторые утилиты, такие как OAUTH и загрузки средств массовой информации. Gphotospy имеет три модуля для покрытия API, а также модуль для авторизации и один для загрузки носителя (это последний также покрыт удобной оберткой в Media Модуль):

gphotospy
├── album
├── authorize
├── media
├── sharedalbum
└── upload

Первое, что нам понадобится, то является авторизация:

>>> from gphotospy import authorize

Затем мы предоставляем файл секретов:

>>> CLIENT_SECRET_FILE = "gphoto_oauth.json"

Теперь нам нужно уполномочить Google, чтобы продолжить:

>>> service = authorize.init(CLIENT_SECRET_FILE)

В первый раз, когда служба откроет ваш браузер на странице авторизации (в любом случае он покажет также в терминале ссылка на следующую)

Поскольку наше приложение не (все же) Проверено, Google покажет нам довольно запугивающую страницу, которая предупреждает нас, что приложение не подтверждено.

Как только мы закончим построение нашего приложения, и мы хотим передать его на производство, мы должны представить его в Google для рассмотрения; Однако для личного пользования и для целей тестирования нам не нужно проверять наше приложение, мы можем продолжить, нажав на Продвинутый (Левый левый угол предупреждающего сообщения)

Теперь, после другого запугивающего сообщения, у нас наконец-то ссылка Перейти к что, наконец, завершит процесс авторизации.

Теперь нам нужно выбрать свою учетную запись Google и управлять разрешениями:

Нам нужно разрешить сейчас два вида разрешений (называемых Scopes): управление всей библиотекой (медиа и альбомами) и совместным использованием.

Как только мы уполномочиваем их, у нас еще одна страница для Recap, чтобы убедиться, что мы действительно действительно действительно (вы уверены?) Хотите разрешить наше приложение.

Все шутки друг от друга, на сегодняшний день Gphotospy не позволяет иметь других (более ограниченных) областей (разрешения), чем эти два, такие как Только чтение доступа (Это может быть особенность в одном из будущих выпусков библиотеки). В основном с этими двумя обладами пользователь позволяет приложение для доступа и управлять всей библиотекой; Ну, с некоторыми ограничениями (которые мы будем покрывать в другом уроке).

Итак, после того, как уделило наше согласие (помните, что вы должны повторить после меня громким голосом «Меня зовут главная Mira Killian, и я даю свое согласие», иначе Google не позволит вашему приложению) мы можем закрыть вкладку браузера/окна и Продолжить: Fianally мы авторизованы.

Как только аутент сделан, библиотека сохраняет маринованный файл, с расширением .token содержащий токен авторизации. Это позволит повторно использовать использование без необходимости снова авторизовать приложение снова.

Предупреждение! Если вы используете систему управления версиями, держите этот файл токена из ваших комментариев. Для Git добавьте его к .gitignore файл (вместе с ключами авторизации)

Примечание : Если вы собираетесь Sumbit ваше приложение для Google для просмотра, есть две страницы с рекомендациями, которые вы должны действительно прочитать, прежде чем начать писать свое приложение: UX Руководство и Допустимая политика использования Отказ Лучше их прочитать (UX самое тщательно), чтобы структурировать UX вашего приложения с нуля, способом приемлемым для политик Google.

Вернуться к коду.

Чтение носителей

Давайте начнем работать с альбомами. Нам нужно сначала импортировать менеджер альбома и все остальные объекты

>>> from gphotospy.album import *

Теперь нам нужно создать наш альбом-менеджер. Мы переходим к Альбом Класс Конструктор Объект сервиса Мы получили авторизацию

>>> album_manager = Album(service)

Для того, чтобы перечислить альбомы, мы будем использовать Альбом.List () Способ, который возвращает итератор по списку альбомов. Фотографии Google API перечислены альбом на Paginated Pay, а список итератор позаботится об этом на заднем плане. Больше информации в документах метода, с Помощь (ALBUM_MANAGER.LIST) .

>>> album_iterator = album_manager.list()
>>> album_iterator

Хорошо, давайте начнем перечислять наши альбомы.

>>> first_album = next(album_iterator)
>>> first_album

Вышеуказанная команда займет немного для выполнения, потому что он будет сначала опросить конечную точку API. Другие звонки будут быстрее, потому что список перечислений кэширует до 50 альбомов, прежде чем задавать следующую партию на конечную точку API. Это поведение можно изменить через Album.set_pagination () Метод (см. альбом.List () DOCSTRING для получения дополнительной информации); Однако не рекомендуется его изменить, поскольку количество вызовов на API увеличится, и есть ежедневно Квота установить Google.

Перечень ITERATOR возвращает объект JSON в виду:

{
  "id": "album_id",
  "title": "album_title", // Or None
  "productUrl": "album_product_url",
  "coverPhotoBaseUrl": "album_cover_base_url", // do not use directly, it needs extra parameters
  "coverPhotoMediaItemId": "album_cover_media_item_id", // you can use this to get the cover item id
  "isWriteable": "whether_you_can_write_to_this_album_or_not",
  "shareInfo": {}, // Object present only for albums shared through the API
  "mediaItemsCount": "number_of_media_items_in_album"
}

Объект отображается прямо в словарь Python. Работать с альбомом, мы должны получить его ID Отказ

>>> first_album_id = first_album.get("id")
>>> first_album_id
'AB1M5bIdR1....'

Мы могли бы легко получить его название, если присутствуют:

>>> first_album.get("title")
'Happy Birthday'

Как только у нас есть идентификатор альбома, мы можем перечислить все средства массовой информации в альбоме. Однако, чтобы сделать это, у нас есть сначала импортировать и построить медиа-менеджер

>>> from gphotospy.media import *
>>> media_manager = Media(service)

Теперь мы можем получить список всех средств массовой информации в альбоме

>>> album_media_list = list(media_manager.search_album(first_album_id))
>>> len(album_media_list)
10

Media.search_album () Возвращает итератор, который мы будем сразу же потреблять Список () и назначить переменной ALBUM_MEDIA_LIST Отказ Whatchout потому что Список () Потребляет весь итератор: если альбом содержит тысячи фотографий Список () Способ получает их все. В этом случае у нас есть только 10 фотографий.

Каждый медиа-элемент – это объект JSON (сопоставлен на словарь в Python), в этой форме:

{
  "id": "media_id",
  "description": "media_description", // If present
  "productUrl": "media_product_url",
  "baseUrl": "media_base_url", // do not use directly, it needs extra parameters
  "mimeType": "media mime-type",
  "mediaMetadata": {}, // Object with metadata. For a photo it can include the camera's settings, etc..
  "contributorInfo": {}, // Object containing the sharing info
  "filename": "assigned_file_name" // If present
}

Так как это второй раз, когда мы видели это, есть разница между “ProductUrl” и “BaseUrl” Отказ

  • ProductUrl ссылка на медиа-элемент внутри Google Photos; Таким образом, требуется подписать, чтобы просмотреть его

  • BaseUrl Позвольте вам получить доступ к байтам элементов медиа. Это позволяет вам с правильными параметрами, чтобы загрузить элемент медиа или отобразить его в вашем приложении.

Предупреждение : BaseUrl Действительно только в течение 60 минут. Чтобы использовать его в производстве, нам нужно хранить товар ID И снова спросите URL, если он истек.

Посмотреть изображение

Давайте просмотрите изображение, используя то, что мы узнали о BaseUrl имущество. Я проверил, что элемент в положении 0 внутри списка – это изображение (с Get («Mimetype») : он дает ‘Image/JPEG’ ); Итак, давайте получим его BaseUrl

>>> base_url = album_media_list[0].get("baseUrl")
>>> base_url
'https://lh3.googleusercontent.com/lr/AFBm1...'

Как вы можете видеть (в коде выше, он обрезан, но) BaseUrl довольно длинный, и доступен всего за 60 минут. Давайте поторопим.

Для изображений мы можем показать их с TK + Подушка . Ниже приведены все импорт, необходимые для этой операции (мы будем использовать URLOPEN открыть необработанное изображение):

>>> import io
>>> from urllib.request import urlopen
>>> from tkinter import *
>>> from gphotospy.authorize import get_credentials

Следующий код – все TK Boeterplate.

>>> root = Tk()

В этот момент следует появиться окно TK; просто оставьте его как и вернуться к терминалу, давайте создадим и упакуйте холст

>>> canvas = Canvas(root, width=320, height=320, bg='white')
>>> canvas.pack(side='top', fill='both', expand='yes')

Я выбрал небольшой холст, 320×320: не стесняйтесь, чтобы сделать его больше, если вы хотите.

Теперь мы построим наш URL. Параметры, которые нам нужны, – максимальная высота и максимальная ширина. URL-адрес должен быть построен таким образом:

=w-h

В этом случае Windows 320×320, поэтому мы оставим границу и получите изображение, то есть больше всего , Высокие 300 пикселей и шириной 300 пикселей.

Таким образом

>>> image_url = "{}=w300-h300".format(base_url)

Давайте использовать урлопень от Urllib.request Чтобы получить необработанное изображение

>>> image_bytes = urlopen(image_url).read()

Теперь, когда у нас есть сырье изображение, мы передаем его на изображение подушки, чтобы построить изображение для нас

>>> img = Image.open(io.BytesIO(image_bytes))

Теперь мы Prapare изображение будет отображаться, то мы отображим его в Windows TK

>>> photo = ImageTk.PhotoImage(img)
>>> canvas.create_image(10, 10, image=photo, anchor='nw')
1

Теперь, когда мы добавили наше изображение, он должен отображать его в нашем окне.

Миссия выполнена !!!

Если вам нужно поставить все это в скрипте, не забудьте пройти контроль на основной цикл, в противном случае скрипт закончится, как только изображение отображается, и окно будет прекращено.

Ниже приведено в скрипте, чтобы пройти контроль на главный цикл и держать окно «Жить на»:

root.mainloop()

На данный момент это все. Мы увидим еще в другом руководстве.

Код

Вы можете найти весь код в Этот гид Отказ

Проверьте также Примеры Папка в репо, я пытался прикрыть все основы там. В любом случае я собираюсь продолжить эту серию учебников, так что оставайтесь настроенными!

Оригинал: “https://dev.to/davidedelpapa/manage-your-google-photo-account-with-python-p-1-9m2”