You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Flickr API下载个人相册遇认证问题求助

解决flickr.rb访问私有相册的认证问题

你遇到的「Photoset not found」错误,核心原因是当前的初始化方式只做了未认证的API请求——仅用api_key和shared_secret只能访问Flickr上的公开内容,而你的相册如果是私有(或者需要用户权限才能访问),就会被判定为“找不到”。要访问自己的私有相册,必须完成OAuth认证,获取用户级别的访问令牌。

下面是完整的正确认证流程:

1. 生成授权链接(首次认证)

首先初始化Flickr对象,然后获取请求令牌并生成用户授权URL:

# 初始化基础对象
@flickr = Flickr.new(api_key: 'YOUR_API_KEY', shared_secret: 'YOUR_SHARED_SECRET')

# 获取请求令牌(桌面应用用'oob'作为回调,Web应用填你的回调URL)
request_token = @flickr.get_request_token(oauth_callback: 'oob')

# 生成授权链接,perms参数设为'read'即可满足下载需求
puts "请打开以下链接完成授权,然后复制验证码:"
puts @flickr.get_authorize_url(request_token['oauth_token'], perms: 'read')

2. 交换访问令牌

用户在浏览器中完成授权后,会得到一个6位左右的验证码。用这个验证码和请求令牌交换长期有效的访问令牌:

# 让用户输入授权后的验证码
print "请输入授权验证码:"
oauth_verifier = gets.chomp.strip

# 交换获取访问令牌
access_token = @flickr.get_access_token(
  request_token['oauth_token'],
  request_token['oauth_token_secret'],
  oauth_verifier
)

# 保存这两个值!下次使用直接加载,不用重复授权
puts "请保存以下访问令牌:"
puts "oauth_token: #{access_token['oauth_token']}"
puts "oauth_token_secret: #{access_token['oauth_token_secret']}"

3. 使用访问令牌初始化(后续所有请求)

之后每次需要访问相册时,用保存的访问令牌初始化Flickr对象,就能正常访问私有资源了:

@flickr = Flickr.new(
  api_key: 'YOUR_API_KEY',
  shared_secret: 'YOUR_SHARED_SECRET',
  oauth_token: '你保存的oauth_token',
  oauth_token_secret: '你保存的oauth_token_secret'
)

# 现在可以正常获取相册了
p = @flickr.photoset('YOUR_PHOTOSET_ID')

额外注意事项

  • 确认Photoset ID正确性:你可以在Flickr网页端打开相册,URL中的类似72157719012345678的字符串就是正确的photoset ID,不要搞错。
  • 权限选择:perms参数选read足够读取相册和下载照片,如果需要上传/修改照片可以用write或delete。
  • SSL验证:尽量不要用verify_ssl: false,生产环境开启SSL验证更安全,除非是测试环境的特殊需求。

内容的提问来源于stack exchange,提问作者Farhad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:41:08