使用PyImgur有案可稽的上传方式,上传到gallery中

2024-06-01 01:36:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用PyImgur文档中的代码:

import pyimgur

CLIENT_ID = "xxx"
PATH = "image.jpg"

im = pyimgur.Imgur(CLIENT_ID)
uploaded_image = im.upload_image(PATH, title="Uploaded with PyImgur")
print(uploaded_image.title)
print(uploaded_image.link)
print(uploaded_image.size)
print(uploaded_image.type)

但它没有出现在我的画廊里


Tags: path代码文档imageimportclientidtitle
1条回答
网友
1楼 · 发布于 2024-06-01 01:36:26

问题是所有API如何工作(不仅仅是imgur API

CLIENT_ID允许访问API,但只能作为匿名用户访问

具有相同CLIENT_ID的程序可由不同的用户使用(不仅仅是您),每个用户都必须允许访问其数据

第一个程序必须生成到imgur.com的特殊URL(我不确定它是否需要CLIENT_SECRET

 im = pyimgur.Imgur(CLIENT_ID)#, client_secret=CLIENT_SECRET)

 auth_url = im.authorization_url('pin')

接下来,您必须在web浏览器中打开此URL,它将要求您登录到imgur.com,它可能会询问您是否允许此程序访问您的数据。如果您允许,它将显示带有唯一编号pin的页面,您必须在程序中使用该编号

 access_token, refresh_token = im.exchange_pin(pin)

然后程序将有权访问您的数据,它可以上传到您的帐户-直到您关闭程序

这还为您提供了access_token(就像一个数字中的登录名和密码一样),在重新启动程序后,该程序可以用来访问您的数据-因此您不必再次登录到imgur.com并复制pin

出于安全原因access_token在60分钟后过期,因此您还可以得到refresh_token(永不过期),该程序必须每60分钟使用一次来生成新的access_token

 im = pyimgur.Imgur(CLIENT_ID, access_token=access_token, refresh_token=refresh_token)

现在它将上传图像到您的帐户后重新启动程序


最小工作代码

我使用try/except从文件中加载access_tokenrefresh_token,或者打开网页为pin生成access_tokenrefresh_token。我在GoogleAPI的一些示例中看到了这个方法(但它使用pickle将令牌保存在文件中)

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')

此操作将图像添加到用户帐户,但我无法添加到所选相册。有upload_image(..., album=...)但它需要相册的ID,而不是它的名称。使用im.search_gallery(query)我甚至可以得到相册的ID,但我总是得到一个错误,即我无法更改相册中的信息,该相册位于gallery中


编辑:

此代码将图像添加到您的帐户中,您可以获取其链接并通过邮件、消息或在某个论坛上放置链接将此链接发送给其他人,或者使用它在您自己的网页上显示图像

。。。但这并没有在Imgur的主页上发送它-它没有"share to community"

你必须加上

uploaded_image.submit_to_gallery(title='Title of your post')

然后人们可以在Imgur's main page上看到它并投票

我在上面的代码中添加了这一行

PyImgur源代码:Image.submit_to_gallery()Album.submit_to_gallery()


当您允许您的程序访问您的数据时,您应该在Apps Used中看到您的程序,并且您可以使用revoke access来禁止程序访问您的数据

我使用Client ID作为我的应用程序furas-imgur,因此在允许访问我的数据后,我在Apps Used中看到furas-imgur

enter image description here

相关问题 更多 >