環境変数にクレデンシャル情報を設定しておく。
(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.contentb'{"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}}