我正在创建其中一个很酷的动态相框,最终使用我自己的照片,但是现在我只想搜索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”的对象,我想保存此gif并将其显示在监视器上。我知道我在这方面还有很长的路要走,但我仍在学习API及其使用方法。如果有人可以帮助我找到一种方法来保存此gif或直接从他们的网站上显示它,将不胜感激!

最佳答案

欢迎dbarth!

我看到您的代码确实成功检索了随机图像,这很好。
获取图像需要3个步骤:


获取GIF URL。


您正在使用的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的GUI可以执行此操作,或者甚至可以调用浏览器来显示它。您需要研究哪种GUI更适合您的需求。对于这种情况,我将使用example posted here,并进行一些修改以使用TKinter显示Gif。如果您的Python安装未随附Tkinter,请安装。

最终代码:

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()


python - 如何使用python API保存/显示giphy gif?-LMLPHP

如果要继续使用giphy_client库,请继续学习如何使用REST API和Swagger。如果没有,您可以直接使用requests库发出请求。

关于python - 如何使用python API保存/显示giphy gif?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54992629/

10-11 22:27
查看更多