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

使用Facebook Graph API获取本人原账号音视频帖URL遇无数据问题

问题描述

用户最初询问是否可通过Facebook Graph API抓取非本人公共账号下所有视频和照片帖子的URL,后说明目标账号实际为自己曾拥有的账号。用户编写了Python代码尝试实现需求,但调用接口后始终无法获取返回数据中的data字段,导致照片和视频URL列表为空,用户认为已配置好所需权限,疑惑问题产生的原因。

用户提供的代码如下:

#url = "https://www.facebook.com/profile.php?id=myid&sk=videos"
access_token = "mytoken"
import requests
user_id = "myid"

def retrieve_urls(access_token, user_id):
    url = f"https://graph.facebook.com/v7.0/{user_id}/posts?fields=attachments&access_token={access_token}"
    print(url)
    response = requests.get(url)
    data = response.json()

    video_urls = []
    photo_urls = []
    
    if 'data' in data:
        for post in data['data']:
            if 'attachments' in post:
                for attachment in post['attachments']['data']:
                    if attachment['type'] == 'video':
                        video_urls.append(attachment['media']['source'])
                    elif attachment['type'] == 'photo':
                        photo_urls.append(attachment['media']['image']['src'])
    else:
        print("notta")
    return photo_urls, video_urls
photo_urls, video_urls = retrieve_urls(access_token, user_id)

print("Photo URLs:", photo_urls)
print("Video URLs:", video_urls)
#myid/target id and mytoken have been replaced that is not the issue.
#I never received the 'data' therefore all my lists were returned empty. I do not understand why. I believe I have all the permissions.
排查与解决方案
  • API版本过时:你使用的Graph API v7.0属于老旧废弃版本,权限规则和响应格式已发生变化,建议更换为最新稳定版本(如v18.0),保障兼容性和功能支持。
  • 权限与账号状态验证:
    • 确认access_token是否包含user_posts权限,且该token是通过目标账号(你曾拥有的账号)授权生成;若账号当前已不属于你管理,即使曾拥有,权限也可能已失效。
    • 检查目标账号隐私设置:如果账号设置了严格的隐私权限,API无法获取公开范围外的内容。
  • 打印错误信息:你的代码仅判断data是否存在,未处理错误场景。当无data返回时,JSON中大概率包含error字段,打印该字段可直接定位问题(如权限不足、用户ID无效、API版本错误等)。
  • 更换精准端点:/posts端点返回所有类型帖子,过滤附件效率低。针对视频和照片建议使用专门端点:
    • 获取视频:/{user_id}/videos
    • 获取照片:/{user_id}/photos
      这些端点直接返回对应类型内容,无需额外过滤附件。
优化后的代码示例
import requests

access_token = "mytoken"
user_id = "myid"
api_version = "v18.0"

def retrieve_media_urls(access_token, user_id, api_version):
    photo_urls = []
    video_urls = []
    
    # 获取照片
    photo_url = f"https://graph.facebook.com/{api_version}/{user_id}/photos?fields=images&access_token={access_token}"
    photo_response = requests.get(photo_url)
    photo_data = photo_response.json()
    
    if 'error' in photo_data:
        print(f"照片接口错误: {photo_data['error']}")
    elif 'data' in photo_data:
        for photo in photo_data['data']:
            # 取分辨率最高的图片链接
            photo_urls.append(photo['images'][0]['source'])
    
    # 获取视频
    video_url = f"https://graph.facebook.com/{api_version}/{user_id}/videos?fields=source&access_token={access_token}"
    video_response = requests.get(video_url)
    video_data = video_response.json()
    
    if 'error' in video_data:
        print(f"视频接口错误: {video_data['error']}")
    elif 'data' in video_data:
        for video in video_data['data']:
            video_urls.append(video['source'])
    
    return photo_urls, video_urls

photo_urls, video_urls = retrieve_media_urls(access_token, user_id, api_version)

print("Photo URLs:", photo_urls)
print("Video URLs:", video_urls)

内容的提问来源于stack exchange,提问作者A New Soul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:15:43