首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python保存/显示giphy?

如何使用python保存/显示giphy?
EN

Stack Overflow用户
提问于 2019-03-04 22:33:13
回答 1查看 1.8K关注 0票数 1

我正在创建一个很酷的移动相框,最终用我自己的照片,但现在我只想搜索,保存/显示一个gif。

下面是我从他们的API接口中收集到的代码。

代码语言:javascript
复制
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))

我得到一个类型的对象:类‘gi菲_client.model s.gif.Gif’,我想保存这个gif并在监视器上显示它。我知道我在这方面还有很长的路要走,但我仍然在学习API以及如何使用它们。如果有人能帮我找到一个方法来保存这个礼物或者直接从他们的网站上显示它,那将是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-05 01:08:09

欢迎dbarth!

我看到您的代码成功地检索了一个随机图像,这很好。要获得图像,需要三个步骤:

  1. 获取GIF URL。

您使用的giphy_client客户端是用Swagger制作的,因此,您可以像任何其他对象一样访问REST响应元素,或者打印它们。

例如:

代码语言:javascript
复制
>>> 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)检索的所有元素

因此,我将把这个添加到您的代码中:

代码语言:javascript
复制
gif_url = gif_id.images.downsized.url
  1. 下载GIF

现在您有了URL,现在是下载GIF的时候了。我将使用请求库来完成此操作,如果您在您的环境中没有请求库,请使用pip安装它。似乎你已经试过这样做了,但是有一个错误。

代码语言:javascript
复制
import requests
[...]
with open('test.gif','wb') as f:
    f.write(requests.get(url_gif).content)
  1. 显示GIF

Python可以使用大量GUI来完成这个任务,或者甚至可以调用浏览器来显示它。您需要研究哪个GUI更适合您的需要。在本例中,我将使用张贴在这里的例子 (经过一些修改)来使用TKinter显示Gif。安装Tkinter不包括在Python安装中。

最终代码:

代码语言:javascript
复制
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()

继续学习如何使用REST和昂首阔步,如果您想继续使用giphy_client库的话。如果没有,可以直接使用请求库发出请求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54992629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档