Facebook Graph API - 从 Facebook 页面 URL 获取 ID

39

我看到了这个问题,但我的需求有所不同。

我想通过使用Graph API从Facebook页面中获取Facebook ID,而不是从一个通用的URL(因此需要判断它是否具有“赞”按钮)。请注意,Facebook页面可以有多种格式,例如:

http://www.facebook.com/my_page_name
http://www.facebook.com/pages/my_page_name
http://www.facebook.com/my_page_ID
我知道我可以使用一些正则表达式来获取my_page名称或者my_page_ID,但我想知道是否有人知道GraphAPI是否支持我所需的功能。

1
值得注意的是,尽管Facebook API指定页面通过{page-id}查找,而ID是“数字字符串”,但文本名称似乎同样有效。 - Kylotan
9个回答

31

根据您的描述,我认为最简单的解决方案是使用lastIndexOf("/")从您拥有的URL中获取id/name(大多数语言都有相应的等效函数),然后得到"https://graph.facebook.com/" + id

此URL返回的数据包含id(例如:6708787004)和用户名(例如:southpark),因此无论您使用哪个标识符(使用lastIndexOf从url中提取的标识符),都应该得到相同的结果。


编辑

这段代码:

identifier = url.substring(url.lastIndexOf("/"))
graphUrl = "https://graph.facebook.com/" + identifier
urlJsonData = getGraphData(graphUrl)

这应该对两者都起作用(也就是说,产生相同的数据结果):

url = http://www.facebook.com/southpark

并且

url = http://www.facebook.com/6708787004

(显然,你需要实现getGraphData方法。)

此外,问题中的第二个URL表单不是页面的有效URL,至少根据我的测试,我会得到以下结果:

  

您可能单击了已过期的链接或输入了错误的地址。某些网址区分大小写。


你能否请再解释一下这个?这对我也很有用。 我理解你的意思,但是我没有使用lastindexof()得到id或name。 你能否请提供完整的代码? - Abdullah Adam
2
这并不总是有效。我正在查看一个URL形式为http://www.facebook.com/pages/<Name>/<Number>的页面。我尝试请求graph.facebook.com/<Number>,但是我收到了一个错误:{ "error": { "message": "Unsupported get request.", "type": "GraphMethodException", "code": 100 } }。使用整个路径也不起作用。这是由测试用户创建的未发布页面(我正在尝试测试需要以编程方式获取页面ID的应用程序)。 - Chris Westin
@NitzanTomer 这个可以用:graph.facebook.com/<数字> - bart
@NitzanTomer 如果URL以斜杠结尾,此代码将无法正常工作。而Facebook上的事件URL似乎现在都是这样的。 - Jon Koops
4
这个不再有效吗?如果你访问http://graph.facebook.com/my_name,它会显示需要一个访问令牌。 - Link14
显示剩余2条评论

10

这个问题的答案已经发布在上面,但是下面展示的方法也可以正常工作,我们不必在Facebook页面URL上执行regex

我是通过这种方式获得答案的。

FB.api('/any_fb_page_url', function(response){
  console.log(response);
}); 

any_fb_page_url可以是以下任一类型

https://www.facebook.com/my_page_name
https://www.facebook.com/pages/my_page_name
https://www.facebook.com/my_page_ID

这些也在上面的问题中列出。

此代码已在Facebook开发者站点工具上可用的JS控制台上进行了测试。


6

运行良好。不要忘记用有效的令牌替换 access_token - Daniel Bonnell

6
此答案已于2019年更新和核对:因为您不需要从链接中提取任何内容,所以它非常简单。例如:
  1. https://www.facebook.com/pg/Vaireo-Shop-2138395226250622/about/
  2. https://www.facebook.com/withminta
  3. https://www.facebook.com/2138395226250622

https://graph.facebook.com/?id=link&access_token=xxxxxxxx

响应: { "name": "Vaireo Shop", "id": "2138395226250622" }

完整的nodeJS答案:

async function getBusinessFromFBByPageURL(pageURL: string) {
    const accessToken = process.env.fb_app_access_token;
    const graphUrl = `https://graph.facebook.com/?id=${pageURL}? access_token=${accessToken}`;
    const fbGraphResponse = await Axios.get(graphUrl);

任何 Facebook 的 URL 都可以直接传递到 API 中,然后返回一个个人资料对象吗? - Lobstw

5
<?php

function getFacebookId($url) {

    $id =  substr(strrchr($url,'/'),1); 

    $json = file_get_contents('http://graph.facebook.com/'.$id);

    $json = json_decode($json);

    return $json->id;

}


echo getFacebookId($_GET['url']);


?>

这是一个关于如何获取ID的PHP示例。

1
你怎么知道你总是会得到具有Facebook页面ID的URL。可能会有页面名称而不是页面ID。在这种情况下,你会怎么做? - Maha Dev

1

0

这个答案考虑到URL可能以斜杠结尾,而Facebook活动页面的URL现在似乎都有这种情况。

function getId(url) {
  var path = new URL(url).pathname;
  var parts = path.split('/');

  parts = parts.filter(function(part) {
    return part.length !== 0;
  });

  return parts[parts.length - 1];
}

0
您可以在 Python 中使用 Requests 和 re 模块。
代码:
import requests,re

profile_url = "https://www.facebook.com/alanwalker97"

idre = re.complie('"entity_id":"([0-9]+)"')

con = requests.get(profile_url).content

id = idre.findall(con)

print("\n[*] ID: "+id[0])

输出:

[*] ID:100001013078780


-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接