ゲームエンジニアの雑記ブログ

ゲームエンジニアの雑記ブログ。テーマ自由、技術について解説します

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

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

こんにちは、エンジニアのオオバです。

Gyazoは2009年から存在する
老舗のアプリ。

画像のアップロード先として
ブロガーやクリエーター、
ビジネスマンたちの味方です。

ぼくもブログ執筆時にお世話になっています。

ところでGyazoにはAPIが
公開されているのをご存知でしょうか。

  • アップロード画像リスト取得
  • 画像のアップロード

といったことを
プログラムで操作できます。

本記事ではPythonを使った
Gyazoへ画像のアップロード方法を紹介します。

→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら

全体で大きく2ステップ

  1. アクセストークンを取得
  2. Pythonでアップロード

2ステップとすごく簡単です。

APIを実行するためのアクセストークンを取得するのが、
メインのミッションになります。

結果だけを知りたい方は、
最後のソースコードだけ
読んでもらえれば大丈夫です。

1. アプリの登録とアクセストークンの取得

公式ページhttps://gyazo.com/apiにアクセスします。

アプリケーションの登録

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

アプリケーションを登録をクリックします。

アプリケーションリストページ

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

既に作成済みのアプリケーションはリストアップされます。
初めて作る場合は空っぽです。

New Application をクリックします

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

  • Name : アプリケーション名
  • Callback URL : 今回は使用しないので適当なURLを入力

アプリケーション名はどこかに公開されるわけではないため、
好きな名前を入力して大丈夫です。

入力が完了したら Submit をクリックします。

アクセストークンの生成

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

アプリを登録した直後では、
アクセストークンは存在しません。

Generateボタン をクリックしてください。

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

するとアクセストークンが生成されます。
このトークンを使ってAPIを実行していきます。

2.Pythonでアップロード

Pythonでコードを書いていきます。

通信処理にrequestsモジュールを使用します。

requestsがインストールされているかどうか
以下のコマンドでチェックしてみてください。

$ python3 -m pip list | grep requests  

ぼくの環境は以下のように出力されているため
インストール済み状態です。

requests           2.26.0  

何も表示されていない場合は未インストールです。

requestsモジュールのインストール

$ python3 -m install requests  

↑こちらのコマンドで
requestsはインストールされます。

フォルダ構成

今回のサンプルを開発する上で、
フォルダ構成を確認します。

.  
├── upload_gyazo.py (アップロードスクリプト)  
└── a.png  (アップロードする画像)  

アップロードする画像a.png
アップロードスクリプトupload_gyazo.py
同階層に配置しています。

アップロードスクリプトを書く

upload_gyazo.pyを書いていきます。

  1. アクセストークンを含んだヘッダー情報を作成
  2. アップロードする画像をロード
  3. 画像のバイナリをキー(imagedata)にセット
  4. requestsで画像を送信

1.アクセストークンを含んだヘッダー情報を作成

# 1.アクセストークンを含んだヘッダー情報を作成
headers = {'Authorization': "Bearer {}".format(【アクセストークン】)}  

オブジェクト型でアクセストークンを
ヘッダー情報に追加します。

2.アップロードする画像をロード

# 2.アップロードする画像をロード
with open("a.png", "rb") as f:  

openメソッドを使って
画像をロードします。

第2引数を"rb"とすることで
バイナリ形式で読み取ることができます。

3.画像のバイナリをキー(,[object Object],)にセット

files = {'imagedata':f.read()}  

オブジェクト型でimagedataをキーにして
画像のバイナリをセットします。

openメソッドの第2引数を"rb"としているため、
readメソッドはバイナリを返却します。

※openメソッドの第2引数が`"r"`だった場合は文字列で返却
#### imagedataになぜセットするのか?

ここでimagedataというキーはどこから出てきたのか?
気になる人がいると思いますので補足します。

APIを実行する時は基本的に公式ドキュメントに従います。

Gyazo公式ドキュメントより

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

画像アップロードAPIのドキュメントキャプチャです。
このようにKey:imagedata
画像データのバイナリをセットするように指示されています。

もしAPIの実行方法がわからなくなった場合は、
公式ドキュメントを見に行ってみましょう。

4.,[object Object],で画像を送信

# 通信開始
response = requests.request('post', URL, headers=headers, files=files)  

ヘッダ、画像データをセットして、
POSTで送信します。

通信が完了したら(成功・失敗問わず)
戻り値に結果が格納されます。

通信の結果はJSON形式

response.textにはJSON形式の
通信結果が格納されています。

Gyazo画像アップロード通信成功時の結果JSON
{
    "type": 画像形式,           // png, jpg, gifなど  
    "thumb_url": サムネールパス, // https://~~~~.png  
    "created_at": 生成日時,     // 例: 2021-09-09T09:33:35+0000  
    "image_id": ユニークID,  
    "permalink_url": Gyazoページのリンク, // 例 : https://gyazo.com/ユニークID  
    "url": 画像リンク // https://i.gyazo.com/ユニークID.png  
}

アプリを作っていく際に、
このJSONをパースすることになります。

ちなみにHTTPステータスコードの取得は
response.status_codeです。

まとめ

画像アップロードの老舗Gyazoに
Pythonを使った画像アップロード方法を紹介しました。

  1. アクセストークンの取得
  2. アクセストークンをヘッダに埋め込んでrequestでPOST

この2ステップで画像をアップロードできました。
Gyazoは日本製ということで
ドキュメントも日本語なので
理解しやすいです。

最後にソースコード全文を添付しておきます。
参考にしていただければと思います!

ソースコード全文

💻ソースコード : upload.py
import requests

YOUR_ACCESS_TOKEN="【ご自身のアクセストークン】"  
URL="https://upload.gyazo.com/api/upload"  

# 1.アクセストークンを含んだヘッダー情報を作成
headers = {'Authorization': "Bearer {}".format(YOUR_ACCESS_TOKEN)}  

# 2.アップロードする画像をロード
with open("a.png", "rb") as f:  
    # 3.画像のバイナリをキー(imagedata)にセット  
    files = {'imagedata':f.read()}  

    # 通信開始  
    response = requests.request('post', URL, headers=headers, files=files)  

    # HTTPステータスコードを取得  
    print(response.status_code)  

    # レスポンスJSONの取得  
    print(response.text)  
アップロードスクリプトを実行
$ python3 upload.py  
※作成したスクリプトは↑のコマンドで実行できます。

「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
ぜひチャンネル登録をお願いします!

最後まで読んでいただきありがとうございました!
すばらしいPythonライフをお過ごしください。

オススメ記事
検証環境
  • Python v3.9.6
  • requests v2.26.0
参考サイト