如何从新版Facebook链接中获取匹配webhook的post_id?
提取匹配Facebook Webhook的Post ID(针对新pfbid格式链接)
针对你提供的Facebook permalink链接(含新格式pfbid开头的story_fbid),要提取与Webhook推送一致的post_id,可以通过解析页面元数据的方式实现,具体步骤如下:
核心逻辑
Facebook Webhook推送的post_id格式为{page_id}_{actual_numeric_fbid},而新的pfbid是加密的永久标识符,无法直接映射为该格式。需要从目标页面的HTML元标签中提取原始的数字FBID,再与链接中的page_id组合得到匹配的post_id。
具体实现方法
步骤1:解析链接中的Page ID
从链接的id参数中提取页面ID,比如你提供的链接中,id=101398992546060就是页面ID。
步骤2:爬取页面元数据获取数字FBID
通过模拟浏览器请求获取页面HTML,查找以下两类元标签来提取数字FBID:
al:android:url:内容格式为fb://post/{page_id}_{numeric_fbid},直接截取后面的组合ID即可og:url:内容格式为https://www.facebook.com/{page_name}/posts/{numeric_fbid},提取posts/后的数字部分,再与页面ID拼接
代码示例(Python)
import requests from bs4 import BeautifulSoup # 目标Facebook链接 target_url = "https://www.facebook.com/permalink.php?story_fbid=pfbid0KG7oNvji6Vkj924pvCDhw9pDjGZVArrXsRdtVTS2FVumGR126VLc8CxWQ9oAkz15l&id=101398992546060" # 设置浏览器请求头,避免被Facebook反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } # 获取页面内容 response = requests.get(target_url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") # 尝试从al:android:url提取完整post_id android_meta = soup.find("meta", property="al:android:url") if android_meta and "fb://post/" in android_meta["content"]: post_id = android_meta["content"].split("fb://post/")[-1] print(f"匹配Webhook的post_id:{post_id}") else: # fallback:从og:url提取数字FBID并拼接页面ID og_meta = soup.find("meta", property="og:url") if og_meta and "/posts/" in og_meta["content"]: numeric_fbid = og_meta["content"].split("/posts/")[-1].split("?")[0] page_id = target_url.split("id=")[-1].split("&")[0] post_id = f"{page_id}_{numeric_fbid}" print(f"匹配Webhook的post_id:{post_id}") else: print("无法提取有效post_id,请检查帖子是否公开或请求头是否正确")
注意事项
- 确保帖子是公开可见的,否则需要携带登录后的Cookie才能访问页面
- 若批量处理,建议添加请求间隔,避免触发Facebook的反爬机制
- Facebook页面结构可能会调整,需定期验证元标签的有效性
内容的提问来源于stack exchange,提问作者xion
相关产品推荐
相关产品推荐

