環境変数にクレデンシャル情報を設定しておく。
(setenv "GIPHY_USERNAME" giphy-config-username) (setenv "GIPHY_API_KEY" giphy-config-api-key)
今回はGIFの共有サービスであるGIPHYにAPIを利用してGIFアニメをアップロードする。 アップロードするファイルはこれ。
- GIPHYのAPIドキュメント https://developers.giphy.com/docs/
APIキーの取得
GIPHYのAPIを利用するためにはAPIキーを取得する。
アプリケーションを作成する。
アプリケーションの情報を入力する。
PythonでUpload
今回はサードパーティ製のHTTPライブラリであるrequestsを使ってGIFファイルをアップロードする。
requestsをインストールする。
pip install requests
ファイルをアップロードする。
import os
import requests
GIPHY_USERNAME = os.environ["GIPHY_USERNAME"]
GIPHY_API_KEY = os.environ["GIPHY_API_KEY"]
with open("./tetris.gif", "rb") as fp:
gif_data = fp.read()
res = requests.post(
"https://upload.giphy.com/v1/gifs",
params={"api_key": GIPHY_API_KEY, "username": GIPHY_USERNAME, "tags": "tetris, emacs"},
files={'file': ('tetris.gif', gif_data)})
# Return value for org-babel.
return res.content
b'{"data":{"id":"cPNPDGKLTdOB6oBtaT"},"meta":{"msg":"OK","status":200}}'
アップロードしたGIFファイルの詳細情報を取得する。
import os
import requests
GIPHY_API_KEY = os.environ["GIPHY_API_KEY"]
gif_id = "cPNPDGKLTdOB6oBtaT"
res = requests.get(
f"https://api.giphy.com/v1/gifs/{gif_id}",
params={"api_key": GIPHY_API_KEY})
# Return value for org-babel.
import pprint
return pprint.pformat(res.json())
{'data': {'bitly_gif_url': 'https://gph.is/g/46pnwVa', 'bitly_url': 'https://gph.is/g/46pnwVa', 'content_url': '', 'embed_url': 'https://giphy.com/embed/cPNPDGKLTdOB6oBtaT', 'id': 'cPNPDGKLTdOB6oBtaT', 'images': {'480w_still': {'height': '439', 'url': 'https://media3.giphy.com/media/cPNPDGKLTdOB6oBtaT/480w_s.jpg', 'width': '480'}, 'downsized': {'height': '543', 'size': '56582', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/giphy.gif', 'width': '594'}, 'downsized_large': {'height': '543', 'size': '56582', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/giphy.gif', 'width': '594'}, 'downsized_medium': {'height': '543', 'size': '56582', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/giphy.gif', 'width': '594'}, 'downsized_small': {'height': '542', 'mp4': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/giphy-downsized-small.mp4', 'mp4_size': '40881', 'width': '594'}, 'downsized_still': {'height': '543', 'size': '16832', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/giphy_s.gif', 'width': '594'}, 'fixed_height': {'height': '200', 'mp4': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/200.mp4', 'mp4_size': '16047', 'size': '22266', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/200.gif', 'webp': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/200.webp', 'webp_size': '21668', 'width': '219'}, 'fixed_height_downsampled': {'height': '200', 'size': '13218', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/200_d.gif', 'webp': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/200_d.webp', 'webp_size': '13344', 'width': '219'}, 'fixed_height_small': {'height': '100', 'mp4': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/100.mp4', 'mp4_size': '9429', 'size': '12163', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/100.gif', 'webp': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/100.webp', 'webp_size': '10720', 'width': '110'}, 'fixed_height_small_still': {'height': '100', 'size': '2741', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/100_s.gif', 'width': '110'}, 'fixed_height_still': {'height': '200', 'size': '5410', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/200_s.gif', 'width': '219'}, 'fixed_width': {'height': '183', 'mp4': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/200w.mp4', 'mp4_size': '16138', 'size': '20118', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/200w.gif', 'webp': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/200w.webp', 'webp_size': '20220', 'width': '200'}, 'fixed_width_downsampled': {'height': '183', 'size': '12020', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/200w_d.gif', 'webp': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/200w_d.webp', 'webp_size': '11612', 'width': '200'}, 'fixed_width_small': {'height': '92', 'mp4': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/100w.mp4', 'mp4_size': '8852', 'size': '11289', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/100w.gif', 'webp': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/100w.webp', 'webp_size': '11794', 'width': '100'}, 'fixed_width_small_still': {'height': '92', 'size': '2542', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/100w_s.gif', 'width': '100'}, 'fixed_width_still': {'height': '183', 'size': '4946', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/200w_s.gif', 'width': '200'}, 'looping': {'mp4': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/giphy-loop.mp4', 'mp4_size': '45375'}, 'original': {'frames': '56', 'hash': '5611b4186ca7be7da20bc7ec11f227ea', 'height': '543', 'mp4': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/giphy.mp4', 'mp4_size': '35535', 'size': '56582', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/giphy.gif', 'webp': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/giphy.webp', 'webp_size': '45920', 'width': '594'}, 'original_mp4': {'height': '438', 'mp4': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/giphy.mp4', 'mp4_size': '35535', 'width': '480'}, 'original_still': {'height': '543', 'size': '16832', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/giphy_s.gif', 'width': '594'}, 'preview': {'height': '542', 'mp4': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/giphy-preview.mp4', 'mp4_size': '40881', 'width': '594'}, 'preview_gif': {'height': '543', 'size': '47430', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/giphy-preview.gif', 'width': '594'}, 'preview_webp': {'height': '543', 'size': '45920', 'url': 'https://media1.giphy.com/media/cPNPDGKLTdOB6oBtaT/giphy-preview.webp', 'width': '594'}}, 'import_datetime': '2019-05-01 14:17:02', 'is_sticker': 0, 'rating': '', 'slug': 'tetris-emacs-cPNPDGKLTdOB6oBtaT', 'source': '', 'source_post_url': '', 'source_tld': '', 'title': '', 'trending_datetime': '0000-00-00 00:00:00', 'type': 'gif', 'url': 'https://giphy.com/gifs/tetris-emacs-cPNPDGKLTdOB6oBtaT', 'user': {'avatar_url': 'https://media.giphy.com/avatars/default4.gif', 'banner_url': '', 'display_name': 'sallies', 'guid': '', 'is_verified': False, 'profile_url': 'https://giphy.com/channel/sallies/', 'username': 'sallies'}, 'username': 'sallies'}, 'meta': {'msg': 'OK', 'response_id': '5cc9ae15414e675273b0965e', 'status': 200}}