見出し画像

PythonでGyazoに画像をアップロードする方法

Gyazoに画像をアップロードする必要があったため、PythonでGyazoのAPIを利用した画像のアップロード方法を紹介します。なお、Pythonの実行環境などの説明は省略します。

GyazoのAPIの公式ドキュメント

アクセストークンの取得

APIの認証のため、アクセストークンの取得を行います。アプリケーションの登録を行い、登録したアプリケーションでアクセストークンを生成します。アクセストークンには期限はなく、アプリケーションを削除するまで有効です。

アプリケーションの登録

GyazoのAPIのトップページにアクセスし、「アプリケーションを登録」をクリックします。

「アプリケーションを登録」をクリック

2 「New Application」をクリックします。

「New Application」をクリック

アクセストークンの生成

1 Name, Callback URLを入力して、Submitをクリックします。

アプリケーションの作成

2 作成したアプリケーション、Name部分のリンクをクリックします。

Name部分のリンクをクリック

3 Generateをクリックするとアクセストークンが生成されます。

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())
  1. アップロードのAPIのエンドポイント
    URLが他のAPIとは異なるため注意が必要です。

  2. ヘッダー情報
    アクセストークンをヘッダーにセットします。

  3. アップロードする画像のロード
    画像をバイナリとして読み込み、キー(imagedata)にセットします。
    "rb"は読み込み専用でバイナリモードで開くことを意味します。
    read()ではファイルの内容をバイナリで読み込みます。

  4. 説明文を設定
    説明文を指定します。不要な場合はなくても大丈夫です。

  5. POSTリクエストを送信
    requestsモジュールのrequestメソッドを使用して、POSTリクエストを送信します。

  6. HTTPステータスコードを取得
    HTTPステータスコードを取得します。200が返ってきていれば成功です。

  7. レスポンス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())


この記事が気に入ったらサポートをしてみませんか?