建立 imgur 帳戶,就是一般申請帳號的節奏。
前往API文件閱讀官方資訊是開發者的好習慣!如果英文啃不下去善用翻譯。
在 API 文件裡找到Register your application的連結,大膽點下去準備申請 Client ID
及 Client secret
。
申請 API,本次採用 OAuth2驗證,完成後會取得專屬的 Client ID
及 Client secret
。
日後至 https://imgur.com/account/settings/apps 取用,但 Client Secret
如果沒記起來的話,按下 generate new secret 將重新產生 Client secret
。
在官方API文件有Official Python library的連結,連至 GitHub 可見到包含說明、範例介紹及開源的程式碼。
官方已表示此 Python 模組
imgurpython
不再維護。不過實測仍可使用,後續也會再介紹另外模組。
測試是否可以順利連線,第一組範例只要只要複製程式碼、換上 Client ID
及 Client secret
即可完成,輸出為近期上傳至 Imgur 圖床的超連結。
from imgurpython import ImgurClient
client_id = 'YOUR CLIENT ID'
client_secret = 'YOUR CLIENT SECRET'
client = ImgurClient(client_id, client_secret)
# Example request
items = client.gallery()
for item in items:
print(item.link)
取得 [Access token]
以減少輸入 pin
碼進行程式操作,imgurpython 有介紹如何取得,過程全放在文章開頭的 Colab 範例支援 您可以自行測試。
上傳圖片測試,這段需要建立一個相簿並取得相簿代碼,請至官網操作:
我們先在網路上任意下載一張圖片,假設就是這張https://i.imgur.com/qs1mqDf.png
。
以wget
指令並指定檔案名稱,筆記本環境在指令前增加 !
魔術指令,您的指令為!wget -O <檔案名稱> <下載連結>
,範例如下:
!wget -O test.jpg https://i.imgur.com/qs1mqDf.png
接著至 Imgur 網站的您右上方名子下拉選 "imges"。
選擇相簿或新建相簿:
在 Edit this album 下拉選單選擇 "Embed Album":
看到一串 Embed Code ,其中相簿ID藏在 data-id = "a/<相簿id>"
裡,把ID複製下來。
#上傳圖片,修改自官方Example
from imgurpython import ImgurClient
from datetime import datetime
def upload(client_data, album , name = 'test-name!' ,title = 'test-title' ):
config = {
'album': album,
'name': name,
'title': title,
'description': f'test-{datetime.now()}'
}
print("Uploading image... ")
image = client_data.upload_from_path('test.jpg', config=config, anon=False)
print("Done")
return image
if __name__ == "__main__":
client_id ='YOUR CLIENT ID'
client_secret = 'YOUR CLIENT SECRET'
access_token = "YOUR ACCESS TOKEN"
refresh_token = "YOUR REFRESH TOKEN"
album = "YOUR ALBUM ID"
local_img_file = "test.jpg"
client = ImgurClient(client_id, client_secret, access_token, refresh_token)
image = upload(client, local_img_file, album)
print(f"圖片網址: {image['link']}")
print()
輸出確認。由於後續找到較單純且符合需求的 PyImgur
模組,官方模組 ImgurPython 介紹到此,您可以依自己需求選用。
CLIENT_ID
,就可以讓您上傳圖片、取得圖床連結,比起官方建議的 imgurpython
簡化許多,符合我們後續只管上傳資料使用,缺點是傳送的結果不會出現在您 Imgur 的 Images 裡面,也不會出現在相簿裡,如果您要做比較具有隱私性的服務建議改回官方模組。PyImgur
模組為熟悉的 pip install pyimgur
指令,筆記本環境則在指令前加上 !
魔術指令。
$ pip install pyimgur
CLIENT_ID
,指令參考如下:
#顯示在imgur的圖片
import pyimgur
CLIENT_ID = "Your_applications_client_id"
im = pyimgur.Imgur(CLIENT_ID)
image = im.get_image('f1WHMuW')
print(image.title)
print(image.link)
!wget
下載的圖片, Colab 指令為 !wget -O test.jpg https://i.imgur.com/qs1mqDf.png
,下載的 test.jpg
路徑無須變更,修改模組範例如下:
import pyimgur
CLIENT_ID = "Your_applications_client_id"
PATH = "test.jpg" #A Filepath to an image on your computer"
title = "Uploaded with PyImgur"
im = pyimgur.Imgur(CLIENT_ID)
uploaded_image = im.upload_image(PATH, title=title)
print(uploaded_image.title)
print(uploaded_image.link)
print(uploaded_image.type)
本篇介紹如何申請 Imgur 權限,用 Python 的 imgurpython
及 PyImgur
兩個模組將圖片上傳至 imgur 圖床,下篇將結合股市線圖、雲端圖床做成 LINE 聊天機器人功能,作為串接資料視覺化的簡單卻強大的範例,我們下篇見。
問個 我是用jupyter
在官方模組那邊 upload 時 會出現 (417) Internal expectation failed 錯誤
且在獲取 pin code 那邊再jupyter中點網址也是出錯(連不上),必須複製網址下來另外貼上才會通過
不知道是否是jupyter本生的問題?
您好,經自己的測試都正常,針對您的問題試著協助如下:
您的第一個問題417屬於網路連線錯誤碼的一種,查閱相關資訊似乎跟您所提供伺服器所需的header不符,另位參考網路的討論似乎因為檔案過大所導致,您可以換張圖再測試看看。
我測試取得pin code是會另開分頁的,是否屬於jupyter的問題要您再自行測試看看。
感謝~ 我再試試