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

无法通过Facebook Graph API获取公开视频源URL的技术求助

问题描述

调用Facebook Graph API请求:

graph.facebook.com/v20/1075751080778492?fields=source,title

返回结果仅包含标题和ID,无视频源URL:

{
  "title": "5 Moments You Wouldn't Believe if Not Filmed",
  "id": "1075751080778492"
}

已尝试使用用户访问令牌和页面访问令牌,且权限已获取,但仍无法拿到视频源URL,需要在Express.js应用中下载该视频,同时想确认Facebook是否仍允许获取公开视频的源URL。

核心结论

Facebook目前不再允许通过Graph API获取公开(或非公开)视频的源URL,即使source字段仍在API文档列表中,实际调用已不会返回有效链接,这是平台政策限制导致的,和权限、令牌类型无关。

可行方案(需注意合规性)
  • 若仅需播放视频:使用官方提供的视频嵌入代码,直接在前端页面嵌入播放,这是Facebook允许的合规方式。
  • 若必须下载视频:
    1. 权限路径已失效:即使拥有video_read、pages_show_list等权限,当前API也无法返回源URL,此路径走不通。
    2. 非合规网页解析方式(风险提示:违反Facebook服务条款,且页面结构随时可能变更):
      • 在Express.js中,用HTTP库(如axios)请求该视频的Facebook网页地址。
      • 用HTML解析库(如cheerio)提取页面中的视频播放链接(通常在video标签或相关脚本中)。
      • 拿到链接后再发起下载请求。示例代码片段:
        const axios = require('axios');
        const cheerio = require('cheerio');
        const fs = require('fs');
        
        async function downloadFacebookVideo(videoId) {
          try {
            const pageUrl = `https://www.facebook.com/watch?v=${videoId}`;
            const response = await axios.get(pageUrl);
            const $ = cheerio.load(response.data);
            
            // 示例:提取video标签中的src属性(实际需根据页面结构调整)
            const videoSrc = $('video').attr('src');
            if (!videoSrc) throw new Error('未找到视频链接');
            
            const videoStream = await axios.get(videoSrc, { responseType: 'stream' });
            videoStream.data.pipe(fs.createWriteStream('downloaded_video.mp4'));
          } catch (err) {
            console.error('下载失败:', err.message);
          }
        }
        
      注意:此方法稳定性极低,Facebook会频繁更改页面结构,且可能触发反爬机制导致请求被拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:42:09