[API] 串接 Imgur API 圖床服務,上傳到指定相簿
圖片是網頁不可或缺的元素,Github pages 不適合放入大量圖片,放到自己的雲端空間也不方便使用,免費的圖床服務就是很好的解決方案,imgur 非常多人使用(也是迷因圖的量產地),一開始參考了網路上的中文教學,發現有些操作已經變了,才有了這篇記錄目前的作法。
Imgur API Doc
Imgur API 的文件很詳細,是一個便利的操作介面,面板大致分四個區塊:
- 上方 header:可以內容排版是單欄或雙欄,最重要的是選擇範例程式碼的語言種類。
- 左側選單:選擇要查看的資訊類型,通常會用到的是 image。
- 中間區塊:顯示文件資訊。
- 右側區塊:顯示範例程式碼。
註冊 Imgur API 及取得授權
以下步驟參考 官方文件 簡略翻譯(圖片使用官方文件的):
事前準備
- 安裝 Postman
- 點擊官方文件最右上角的按鈕(Run in Postman)下載寫好的 postman 檔案,執行並 import 至 Postman 中。
前往 註冊 API 頁面 申請(要先有 Imgur 的帳號)
- Application name:自己取名
- Authorization type:選第一個
- Authorization callback URL:填入官方文件提供的網址
https://www.getpostman.com/oauth2/callback
- 除了信箱,其他可以不填,點擊 submit 送出。
- 送出後取得 Client ID 和 Client secret,
請務必把它記下來
。
開啟 Postman(
Postman 的介面隨著版本更新一直有變化,以下步驟都需要自行找到對應位置
)。點擊步驟 1 匯入的 Imgur API,找到 Auth 頁面中的 Type 選單,選擇「OAuth 2.0」。
拉到最底下,點擊「Get New Access Token」。
接下來會進入登入畫面,登入之後很有可能拿到 429 錯誤,需要等一段時間再嘗試(這段很浪費時間)。
1
{"data":{"error":"Too Many Requests","request":"\/oauth2\/authorize","method":"POST"},"success":false,"status":429}
上個步驟如果成功,就會取得一個 refresh token,
這個 token 一定要記下來
,攸關你的 API 能用多久。Postman 選單切換到 Environment,新增一個 ImgurAPI 的環境變數集合,並且在裡面加入前面取得的
refreshToken
、clientId
、clientSecret
。回到 API Collections,選擇 Imgur API > Account > Generate Access Token,並且設定環境變數使用上個步驟設定的 ImgurAPI 環境(選項應該會在介面右上方)。
送出後就會取得 Access Token 了,這個 Token 的有效時間大約是一個月,當 Access Token 過期時,需要重新執行一次「Generate Access Token」來取得新的 Access Token,所以
refreshToken
、clientId
、clientSecret
這三個千萬別弄丟了。補充:取得 Access Token 時會自動加入到設定好的環境變數中,可以直接使用 Postman 測試其他的功能,不需要再額外設定 headers authentication。
Imgur API 操作
Headers 權限
使用 Imgur API 時需要傳入 Authorization Headers,分別有兩種不同模式:
- 匿名用戶:
{"Authorization", "Client-ID {{clientId}}"}
- 登入用戶:
{"Authorization", "Bearer {{Access Token}}"}
使用匿名上傳的圖片不會出現在自己帳戶底下,一定得記住 response 給的網址,遺失了就找不到這張圖。
使用登入用戶來上傳圖片較可靠,也可以指定自己帳戶內的相簿來分類。
上傳圖片
上傳圖片的 API 可以參考 官方文件的 Image。
文件寫的路徑是 https://api.imgur.com/3/upload
範例程式碼卻是 https://api.imgur.com/3/image
實測目前兩個都可以用….
官方範例程式 headers 都是使用匿名,建議替換成 Access Token。
1 | // axios 的範例(官網也有 fetch、jquery 和 XMLHttpRequest 版本) |
上傳圖片到指定相簿
上傳圖片到指定相簿需要有相簿的 Hash,可以透過 API 建立相簿(官方網站抓的那包 Postman collection 有所有的 API),或是用網頁操作,流程如下:
- 登入 imgur 網頁。
- 進入 images 頁面新增一個要上傳的相簿。
- 點選右上選單,選擇 posts (或是直接點頭像也會到 posts)
- 在 posts 列表中點選要上傳的相簿。
- 網址會變成
https://imgur.com/a/xxxxxxx
,其中 xxxxxxx 就是相簿的專屬 Hash
取得 Hash 後使用在 FormData 裡面加入即可。
(Authentication 需要傳 Access Token 才有權限)
1 | data.append('album', 'xxxxxxx') |