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

如何使用Python Unsplash API获取随机图片URL而非仅返回照片ID

第三方Unsplash Python SDK图片URL获取异常解决方案

问题根因

  • 你的接口调用全程没有报错,说明鉴权、请求链路都是通的,之前误以为接口只返回照片ID,本质是没正确解析SDK返回的结构化对象。
  • 这个SDK不会直接把返回结果转成可读的字符串给你,而是映射成自定义类实例,直接print整个实例只会显示类的内存标识,根本看不到内部嵌套的图片地址字段,很容易造成“只返回了个ID”的错觉。
  • 图片可访问的直链是嵌套在照片对象的urls子属性下的,不是照片对象的顶层字段,之前没拿到结果就是因为没按字段层级访问。

修正后的可运行代码

衔接你现有测试代码的调整逻辑如下:

from unsplash.api import Api
from unsplash.auth import Auth

# 替换为你在Unsplash开发者后台申请的对应密钥
client_id = "你的公开访问密钥"
client_secret = "你的应用密钥"
redirect_uri = "你在后台配置的回调地址"
code = "你的授权校验码"

auth = Auth(client_id, client_secret, redirect_uri, code=code)
api = Api(auth)

# 调用随机图片接口:注意该接口返回值是列表,默认返回多张结果
random_photos = api.photo.random(orientation="landscape")
# 取列表中第一张图片的对象
first_photo = random_photos[0]

# 打印对象的全部字段,确认结构(不要直接print整个photo对象)
print("照片对象全部可访问字段:", first_photo.__dict__)

# 按层级取不同尺寸的图片直链
raw_link = first_photo.urls.raw       # 原图无压缩直链
full_link = first_photo.urls.full      # 全尺寸适配直链
regular_link = first_photo.urls.regular  # 网页常规展示尺寸直链
small_link = first_photo.urls.small   # 列表加载用小图直链

# 按指定ID查询照片URL的测试逻辑
target_photo = api.photo.get("wzfOt1uwzxc")
print("指定ID照片的常规访问地址:", target_photo.urls.regular)

高频踩坑点

  • 直接打印SDK返回的photo自定义类实例,输出会是类似<unsplash.models.Photo object at 0x102b47f10>的内存标识,完全看不到内部字段,必须通过__dict__查看所有可用属性,或者按SDK约定的字段层级访问。
  • api.photo.random()方法默认返回10条随机图片结果的列表,不是单张图片对象,直接遍历列表取单个元素即可拿到对应照片的完整属性。
  • 如果访问urls字段时报属性不存在的错误,大概率是本地安装的SDK版本过旧,和当前接口的字段映射不一致,升级到最新版本的SDK即可解决。
  • 拿到的图片直链支持自定义参数调整尺寸、压缩质量、输出格式,可根据业务需求拼接对应参数直接使用,不需要额外携带鉴权头就能正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 19:36:00