使用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
相关产品推荐
相关产品推荐

