如何使用 python API save/display giphy gif?
How to save/display giphy gif using python API?
我正在创建一个很酷的移动相框,最终用我自己的照片,但现在我只想搜索 giphy 和 save/display 一个 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))
我得到一个类型的对象:class 'giphy_client.models.gif.Gif',我想保存这个 gif 并将其显示在监视器上。我知道我在这方面还有很长的路要走,但我仍在学习 API 以及如何使用它们。如果有人能帮助我找到一种方法来保存此 gif 或直接从他们的网站上显示它,那将不胜感激!
欢迎 dbarth!
我看到你的代码确实成功地检索了一张随机图像,这很好。
获取图片需要3个步骤:
- 获取 GIF URL。
您正在使用的 giphy_client
客户端是用 Swagger 制作的,因此,您可以像访问任何其他对象一样访问 REST 响应元素,或打印它们。
例如:
>>> 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 更适合您的需求。对于这种情况,我将使用 并进行一些修改,以使用 TKinter 显示 Gif。如果 Python 安装中未包含 Tkinter,请安装 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()
继续学习如何使用 REST API 和 Swagger, if you want to keep using the giphy_client
library. If not, you can make the requests directly using the requests 库。
我正在创建一个很酷的移动相框,最终用我自己的照片,但现在我只想搜索 giphy 和 save/display 一个 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))
我得到一个类型的对象:class 'giphy_client.models.gif.Gif',我想保存这个 gif 并将其显示在监视器上。我知道我在这方面还有很长的路要走,但我仍在学习 API 以及如何使用它们。如果有人能帮助我找到一种方法来保存此 gif 或直接从他们的网站上显示它,那将不胜感激!
欢迎 dbarth!
我看到你的代码确实成功地检索了一张随机图像,这很好。 获取图片需要3个步骤:
- 获取 GIF URL。
您正在使用的 giphy_client
客户端是用 Swagger 制作的,因此,您可以像访问任何其他对象一样访问 REST 响应元素,或打印它们。
例如:
>>> 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 更适合您的需求。对于这种情况,我将使用
最终代码:
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 API 和 Swagger, if you want to keep using the giphy_client
library. If not, you can make the requests directly using the requests 库。