1 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊
問題是所有 API 是如何工作的(不僅僅是imgur API)。
CLIENT_ID允許訪問 API,但只能作為匿名用戶。
具有相同內(nèi)容的程序CLIENT_ID可以由不同的用戶(不僅僅是您)使用,并且每個(gè)用戶都必須允許訪問他/她的數(shù)據(jù)。
第一個(gè)程序必須生成特殊的 URL imgur.com(我不確定是否需要CLIENT_SECRET這個(gè))
im = pyimgur.Imgur(CLIENT_ID)#, client_secret=CLIENT_SECRET)
auth_url = im.authorization_url('pin')
接下來(lái),您必須在網(wǎng)絡(luò)瀏覽器中打開此 URL,它會(huì)要求您登錄,imgur.com并且可能會(huì)詢問您是否允許該程序訪問您的數(shù)據(jù)。如果您允許,那么它將顯示帶有唯一編號(hào)的頁(yè)面pin,您必須在程序中使用該編號(hào)
access_token, refresh_token = im.exchange_pin(pin)
然后程序?qū)⒖梢栽L問您的數(shù)據(jù)并將其上傳到您的帳戶 - 直到您關(guān)閉程序。
這還為您提供了access_token(就像一個(gè)數(shù)字中的登錄名和密碼)在重新啟動(dòng)程序后可以使用哪個(gè)程序來(lái)訪問您的數(shù)據(jù) - 因此您不必再次登錄并imgur.com復(fù)制pin.
出于安全原因,access_token它會(huì)在 60 分鐘后過期,因此您還可以獲得refresh_token(永不過期)哪個(gè)程序必須每 60 分鐘使用一次來(lái)生成新的access_token.
im = pyimgur.Imgur(CLIENT_ID, access_token=access_token, refresh_token=refresh_token)
現(xiàn)在,它會(huì)在重新啟動(dòng)程序后將圖像上傳到您的帳戶。
最少的工作代碼。
我使用從文件try/except加載或打開網(wǎng)頁(yè)來(lái)生成. 我在 Google API 的一些示例中看到了這種方法(但它用于將令牌保存在文件中)。access_tokenrefresh_tokenpinaccess_tokenrefresh_tokenpickle
import pyimgur
import webbrowser
CLIENT_ID = "123456789012345"
#CLIENT_SECRET = 'xxxyyyzzz'
# access to user data
try:
# try to loading access_token, refresh_token from file
with open('tokens.txt') as f:
access_token, refresh_token = f.read().strip().split()
# run with access_token, refresh_token
im = pyimgur.Imgur(CLIENT_ID, access_token=access_token, refresh_token=refresh_token)
except FileNotFoundError as ex:
# ask for new access_token, refresh_token when file doesn't exists
# run without access_token, refresh_token
im = pyimgur.Imgur(CLIENT_ID) #, client_secret=CLIENT_SECRET)
# generate url
auth_url = im.authorization_url('pin')
# open url in web browser
webbrowser.open(auth_url)
# ask for `pin` from web page
pin = input("What is the pin? ")
# get access_token, refresh_token
access_token, refresh_token = im.exchange_pin(pin)
# save access_token, refresh_token in file
with open('tokens.txt', 'w') as f:
f.write(f'{access_token} {refresh_token}')
# upload image
PATH = "lenna.png"
uploaded_image = im.upload_image(PATH, title="Uploaded with PyImgur")
print('[upload] title:', uploaded_image.title)
print('[upload] link :', uploaded_image.link)
print('[upload] size :', uploaded_image.size)
print('[upload] type :', uploaded_image.type)
# share with community - to see image (as post) on imgur's main page
uploaded_image.submit_to_gallery(title='Shared with PyImgur')
這會(huì)將圖像添加到用戶帳戶,但我無(wú)法添加到選定的相冊(cè)。有upload_image(..., album=...),但需要專輯 ID,而不是名稱。使用im.search_gallery(query)我什至可以獲得相冊(cè)的 ID,但我總是收到錯(cuò)誤,無(wú)法更改圖庫(kù)中相冊(cè)中的信息。
編輯:
此代碼將圖像添加到您的帳戶,您可以獲取其鏈接并將此鏈接通過郵件、消息發(fā)送給其他人或?qū)㈡溄臃旁谀硞€(gè)論壇上,或使用它在您自己的網(wǎng)頁(yè)上顯示圖像
...但這不會(huì)將其發(fā)送到 Imgur 主頁(yè)上 - 它不會(huì)"share to community"。
你必須添加
uploaded_image.submit_to_gallery(title='Title of your post')
然后人們可以在Imgur 的主頁(yè)上看到它并投票。
我將這一行添加到上面的代碼中。
PyImgur源代碼:Image.submit_to_gallery()、Album.submit_to_gallery()
當(dāng)您允許程序訪問您的數(shù)據(jù)時(shí),您應(yīng)該會(huì)看到您的程序Apps Used,并且您可以使用revoke access禁止程序訪問您的數(shù)據(jù)
我用于Client ID我的應(yīng)用程序furas-imgur,因此在允許訪問我的數(shù)據(jù)后,我furas-imgur看到Apps Used
添加回答
舉報(bào)