PythonでGyazoに画像をアップロードする方法
Gyazoに画像をアップロードする必要があったため、PythonでGyazoのAPIを利用した画像のアップロード方法を紹介します。なお、Pythonの実行環境などの説明は省略します。
アクセストークンの取得
APIの認証のため、アクセストークンの取得を行います。アプリケーションの登録を行い、登録したアプリケーションでアクセストークンを生成します。アクセストークンには期限はなく、アプリケーションを削除するまで有効です。
アプリケーションの登録
1 GyazoのAPIのトップページにアクセスし、「アプリケーションを登録」をクリックします。
2 「New Application」をクリックします。
アクセストークンの生成
1 Name, Callback URLを入力して、Submitをクリックします。
2 作成したアプリケーション、Name部分のリンクをクリックします。
3 Generateをクリックするとアクセストークンが生成されます。
Pythonの実行環境
GyazoのAPIの利用にあたっては、requestモジュールを使用します。
requestモジュールのインストール
requestsモジュールがインストールされているか確認します。
> python --version
Python 3.11.4
> pip freeze
:
requests==2.31.0
:
requestsモジュールがインストールされていなければ、pipコマンドでインストールします。
python3 -m install requests
PythonによるAPIの利用
画像のアップロード、画像一覧の取得、画像情報の取得、画像の削除などあります。いずれもアクセストークンが必要で、URLやHTTPのメソッドが異なります。
画像のアップロード
from pprint import pprint
import requests
ACCESS_TOKEN="取得したアクセストークン"
# 1 アップロードのAPIのエンドポイント
URL="https://upload.gyazo.com/api/upload"
# 2 ヘッダー情報
auth_content = f"Bearer {ACCESS_TOKEN}"
headers = {"Authorization": auth_content}
# 3 アップロードする画像のロード
with open("test.png", "rb") as f:
# 画像のバイナリをキー(imagedata)にセット
files = {"imagedata": f.read()}
# 4 説明文を設定
description = "test upload"
# 5 POSTリクエストを送信
response = requests.request(
"post", URL, headers=headers, files=files, data={"desc": description}
)
# 6 HTTPステータスコードを取得し結果を表示
response_code = response.status_code
if response_code == 200:
print("Success")
else:
print(f"Error response_code={response_code}")
# 7 レスポンスの取得
pprint(response.json())
アップロードのAPIのエンドポイント
URLが他のAPIとは異なるため注意が必要です。ヘッダー情報
アクセストークンをヘッダーにセットします。アップロードする画像のロード
画像をバイナリとして読み込み、キー(imagedata)にセットします。
"rb"は読み込み専用でバイナリモードで開くことを意味します。
read()ではファイルの内容をバイナリで読み込みます。説明文を設定
説明文を指定します。不要な場合はなくても大丈夫です。POSTリクエストを送信
requestsモジュールのrequestメソッドを使用して、POSTリクエストを送信します。HTTPステータスコードを取得
HTTPステータスコードを取得します。200が返ってきていれば成功です。レスポンスJSONの取得
レスポンスのJSONを取得します。アップロードした画像のURLやID, 形式などが取得できます。
レスポンス(例)
{
"image_id" : "8980c52421e452ac3355ca3e5cfe7a0c",
"permalink_url": "http://gyazo.com/8980c52421e452ac3355ca3e5cfe7a0c",
"thumb_url" : "https://i.gyazo.com/thumb/180/afaiefnaf.png",
"url" : "https://i.gyazo.com/8980c52421e452ac3355ca3e5cfe7a0c.png",
"type": "png"
}
画像一覧の取得
APIのエンドポイントが異なり、HTTPリクエストのメソッドがPOSTではなくGETを使用します。そのほかは、アップロードの実装と変わりません。
from pprint import pprint
import requests
ACCESS_TOKEN = "取得したアクセストークン"
# 1 APIのエンドポイント
URL = "https://api.gyazo.com/api/images"
# 2 ヘッダー情報
auth_content = f"Bearer {ACCESS_TOKEN}"
headers = {"Authorization": auth_content}
# 5 GETリクエストを送信
response = requests.request("get", URL, headers=headers)
# 6 HTTPステータスコードを取得し結果を表示
response_code = response.status_code
if response_code == 200:
print("Success")
else:
print(f"Error response_code={response_code}")
# 7 レスポンスの取得
pprint(response.json())
画像の情報を取得
エンドポイントには画像のIDを指定してください。HTTPのメソッドは画像一覧の取得同様GETを使用します。
from pprint import pprint
import requests
ACCESS_TOKEN = "取得したアクセストークン"
# 1 アップロードのAPIのエンドポイント
URL = "https://api.gyazo.com/api/images"
IMG_ID = "ab796eb9cf9fa51e1a80c7c6c8a6636c"
URL = f"{URL}/{IMG_ID}"
# 2 ヘッダー情報
auth_content = f"Bearer {ACCESS_TOKEN}"
headers = {"Authorization": auth_content}
# 5 GETリクエストを送信
response = requests.request("get", URL, headers=headers)
# 6 HTTPステータスコードを取得し結果を表示
response_code = response.status_code
if response_code == 200:
print("Success")
else:
print(f"Error response_code={response_code}")
# 7 レスポンスの取得
pprint(response.json())
画像の削除
エンドポイントには画像のIDを指定してください。HTTPのメソッドはDELETEを使用します。
from pprint import pprint
import requests
ACCESS_TOKEN = "取得したアクセストークン"
# 1 アップロードのAPIのエンドポイント
URL = "https://api.gyazo.com/api/images/"
IMG_ID = "ab796eb9cf9fa51e1a80c7c6c8a6636c"
URL = f"{URL}{IMG_ID}"
# 2 ヘッダー情報
auth_content = f"Bearer {ACCESS_TOKEN}"
headers = {"Authorization": auth_content}
# 5 GETリクエストを送信
response = requests.request("delete", URL, headers=headers)
# 6 HTTPステータスコードを取得し結果を表示
response_code = response.status_code
if response_code == 200:
print("Success")
else:
print(f"Error response_code={response_code}")
# 7 レスポンスの取得
pprint(response.json())
この記事が気に入ったらサポートをしてみませんか?