Как сохранить / отобразить giphy gif с помощью Python API? - PullRequest
0 голосов
/ 05 марта 2019

Я создаю одну из этих крутых движущихся рамок для фотографий, в конце концов с моими собственными фотографиями, но сейчас я просто хочу найти giphy и сохранить / отобразить gif.

Вот код, который я собрал, было бы полезноиз их API .

import giphy_client as gc
from giphy_client.rest import ApiException
from random import randint

api_instance = gc.DefaultApi()
api_key = 'MY_API_KEY'
query = 'art'
fmt = 'gif'

try:
    response = api_instance.gifs_search_get(api_key,query,limit=1,offset=randint(1,10),fmt=fmt)
    gif_id = response.data[0]
except ApiException:
    print("Exception when calling DefaultApi->gifs_search_get: %s\n" % e)

with open('test.txt','w') as f:
    f.write(type(gif_id))

Я получаю объект типа: класс 'giphy_client.models.gif.Gif', я хочу сохранить этот рисунок и отобразить его на мониторе.Я понимаю, что мне далеко до этого, но я все еще изучаю API и как их использовать.Если кто-нибудь может помочь мне найти способ сохранить этот GIF-файл или отобразить его прямо на своем веб-сайте, это будет очень цениться!

1 Ответ

0 голосов
/ 05 марта 2019

Добро пожаловать, Барт!

Я вижу, ваш код успешно извлекает случайное изображение, и это хорошо.Чтобы получить изображение, необходимо выполнить 3 шага:

  1. Получить URL-адрес GIF.

Этот giphy_client клиент, который вы используете, сделан с помощью Swagger, поэтому выможет получить доступ к элементам REST Response, как и любой другой объект, или распечатать их.

Например:

>>> print(gif_id.images.downsized.url)
'https://media0.giphy.com/media/l3nWlvtvAFHcDFKXm/giphy-downsized.gif?cid=e1bb72ff5c7dc1c67732476c2e69b2ff'

Обратите внимание, что при печати я получаю URL-адрес.Полученный вами объект Gif с именем gif_id имеет несколько URL-адресов для загрузки GIF или MP4 в различных разрешениях.В этом случае я пошел с уменьшенным GIF.Вы можете увидеть все элементы, полученные с помощью print(gif_id)

Итак, я добавлю это в ваш код:

gif_url = gif_id.images.downsized.url
Загрузить GIF

Теперь, когда у вас есть URL, пришло время загрузить GIF.Для этого я буду использовать библиотеку запросов, установите ее с помощью pip, если у вас ее нет в вашей среде.Кажется, вы уже пытались это сделать, но с ошибкой.

import requests
[...]
with open('test.gif','wb') as f:
    f.write(requests.get(url_gif).content)
Отображение GIF

Существует множество графических интерфейсов для Python, чтобы сделать это, или вы даже можете вызвать браузер, чтобы показать это.Вам нужно выяснить, какой графический интерфейс лучше адаптируется к вашим потребностям.В этом случае я буду использовать пример , размещенный здесь , с некоторыми изменениями, чтобы отобразить Gif с помощью TKinter.Установите Tkinter, если он не включен в вашу установку Python.

Окончательный код:

import giphy_client as gc
from giphy_client.rest import ApiException
from random import randint
import requests
from tkinter import *
import time
import os

root = Tk()

api_instance = gc.DefaultApi()
api_key = 'YOUR_OWN_API_KEY'
query = 'art'
fmt = 'gif'

try:
    response = api_instance.gifs_search_get(api_key,query,limit=1,offset=randint(1,10),fmt=fmt)
    gif_id = response.data[0]
    url_gif = gif_id.images.downsized.url
except ApiException:
    print("Exception when calling DefaultApi->gifs_search_get: %s\n" % e)

with open('test.gif','wb') as f:
    f.write(requests.get(url_gif).content)

frames = []
i = 0
while True:  # Add frames until out of range
    try:
        frames.append(PhotoImage(file='test.gif',format = 'gif -index %i' %(i)))
        i = i + 1
    except TclError:
        break

def update(ind):  # Display and loop the GIF
    if ind >= len(frames):
        ind = 0
    frame = frames[ind]
    ind += 1
    label.configure(image=frame)
    root.after(100, update, ind)

label = Label(root)
label.pack()
root.after(0, update, 0)
root.mainloop()

Example of gif show

Продолжайте изучать, как использоватьREST API и Swagger , если вы хотите продолжать использовать библиотеку giphy_client.Если нет, вы можете делать запросы напрямую, используя библиотеку запросы .

...