環境変数にクレデンシャル情報を設定しておく。

(setenv "GIPHY_USERNAME" giphy-config-username)
(setenv "GIPHY_API_KEY" giphy-config-api-key)

今回はGIFの共有サービスであるGIPHYにAPIを利用してGIFアニメをアップロードする。 アップロードするファイルはこれ。

https://res.cloudinary.com/symdon/image/upload/v1641911739/blog.symdon.info/tetris_f6vhmp.gif

APIキーの取得

GIPHYのAPIを利用するためにはAPIキーを取得する。

https://res.cloudinary.com/symdon/image/upload/v1641911775/blog.symdon.info/01.get-account-key_pm12ir.png

アプリケーションを作成する。

https://res.cloudinary.com/symdon/image/upload/v1641911828/blog.symdon.info/02.create-app_r2h54d.png

アプリケーションの情報を入力する。

https://res.cloudinary.com/symdon/image/upload/v1641911857/blog.symdon.info/03.create-new-app-dialog_hjp9ym.png

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}}