无法通过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允许的合规方式。
- 若必须下载视频:
- 权限路径已失效:即使拥有
video_read、pages_show_list等权限,当前API也无法返回源URL,此路径走不通。 - 非合规网页解析方式(风险提示:违反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); } }
- 在Express.js中,用HTTP库(如
- 权限路径已失效:即使拥有
内容的提问来源于stack exchange,提问作者Cute Boy
相关产品推荐
相关产品推荐

