こんにちは、エンジニアのオオバです。
Gyazoは2009年から存在する
老舗のアプリ。
画像のアップロード先として
ブロガーやクリエーター、
ビジネスマンたちの味方です。
ぼくもブログ執筆時にお世話になっています。
ところでGyazoにはAPIが
公開されているのをご存知でしょうか。
- アップロード画像リスト取得
- 画像のアップロード
といったことを
プログラムで操作できます。
本記事ではPythonを使った
Gyazoへ画像のアップロード方法を紹介します。
→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら
全体で大きく2ステップ
- アクセストークンを取得
- Pythonでアップロード
2ステップとすごく簡単です。
APIを実行するためのアクセストークンを取得するのが、
メインのミッションになります。
結果だけを知りたい方は、
最後のソースコードだけ
読んでもらえれば大丈夫です。
1. アプリの登録とアクセストークンの取得
公式ページhttps://gyazo.com/apiにアクセスします。
アプリケーションの登録
アプリケーションを登録をクリックします。
既に作成済みのアプリケーションはリストアップされます。
初めて作る場合は空っぽです。
New Application をクリックします
- Name : アプリケーション名
- Callback URL : 今回は使用しないので適当なURLを入力
アプリケーション名はどこかに公開されるわけではないため、
好きな名前を入力して大丈夫です。
入力が完了したら Submit をクリックします。
アクセストークンの生成
アプリを登録した直後では、
アクセストークンは存在しません。
Generateボタン をクリックしてください。
するとアクセストークンが生成されます。
このトークンを使って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
を書いていきます。
- アクセストークンを含んだヘッダー情報を作成
- アップロードする画像をロード
- 画像のバイナリをキー(
imagedata
)にセット 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メソッド
はバイナリを返却します。
ここでimagedata
というキーはどこから出てきたのか?
気になる人がいると思いますので補足します。
APIを実行する時は基本的に公式ドキュメントに従います。
画像アップロードAPIのドキュメントキャプチャです。
このようにKey:
imagedata
に画像データのバイナリをセットするように指示されています。
もしAPIの実行方法がわからなくなった場合は、
公式ドキュメントを見に行ってみましょう。
4.,[object Object],で画像を送信
# 通信開始
response = requests.request('post', URL, headers=headers, files=files)
ヘッダ、画像データをセットして、
POSTで送信します。
通信が完了したら(成功・失敗問わず)
戻り値に結果が格納されます。
通信の結果はJSON形式
response.text
には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を使った画像アップロード方法を紹介しました。
- アクセストークンの取得
- アクセストークンをヘッダに埋め込んで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