为了账号安全,请及时绑定邮箱和手机立即绑定

使用 PyImgur 的记录方式上传,上传拒绝显示在图库中

使用 PyImgur 的记录方式上传,上传拒绝显示在图库中

慕的地8271018 2023-07-18 14:56:23
我使用 PyImgur 文档中的代码:import pyimgurCLIENT_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)但它没有出现在我的画廊中
查看完整描述

1 回答

?
森栏

TA贡献1810条经验 获得超5个赞

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


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


具有相同内容的程序CLIENT_ID可以由不同的用户(不仅仅是您)使用,并且每个用户都必须允许访问他/她的数据。


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


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


 auth_url = im.authorization_url('pin')

接下来,您必须在网络浏览器中打开此 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加载或打开网页来生成. 我在 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')

这会将图像添加到用户帐户,但我无法添加到选定的相册。有upload_image(..., album=...),但需要专辑 ID,而不是名称。使用im.search_gallery(query)我什至可以获得相册的 ID,但我总是收到错误,无法更改图库中相册中的信息。


编辑:


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


...但这不会将其发送到 Imgur 主页上 - 它不会"share to community"。


你必须添加


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

然后人们可以在Imgur 的主页上看到它并投票。


我将这一行添加到上面的代码中。


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


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


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

//img1.sycdn.imooc.com//64b637c600011e6b10580379.jpg

查看完整回答
反对 回复 2023-07-18
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信