如何从Facebook个人资料或页面URL获取数字ID?PHP、Facebook图形API
你好,来自stackoverflow的超级棒的人如何从Facebook个人资料或页面URL获取数字ID?PHP、Facebook图形API,php,facebook,facebook-graph-api,Php,Facebook,Facebook Graph Api,你好,来自stackoverflow的超级棒的人 我需要这个php脚本的帮助。。当用户在输入框中输入他的facebook个人资料链接时,我想从用户那里获得facebook id。配置文件链接的示例:。我有一个从url收集“profilename”并将其保存到$username的脚本,但现在我需要该脚本将该profilename转换为该配置文件的facebook ID并将其保存到$username。现在我知道,当你右键点击用户档案图片而不是点击复制链接地址时,你可以很容易地手动获取facebook
我需要这个php脚本的帮助。。当用户在输入框中输入他的facebook个人资料链接时,我想从用户那里获得facebook id。配置文件链接的示例:。我有一个从url收集“profilename”并将其保存到$username的脚本,但现在我需要该脚本将该profilename转换为该配置文件的facebook ID并将其保存到$username。现在我知道,当你右键点击用户档案图片而不是点击复制链接地址时,你可以很容易地手动获取facebook id。后面的最后一个数字。(点)是用户档案id。或者另一种方法是扫描页面以查找
,现在你的函数GetOnlyUsername
在提供URL时会有一些奇怪的结果:
echo GetOnlyUsername('https://www.facebook.com/profilename'); // outputs https://www.facebook.com/profilename
为了使函数更清晰,我建议重命名该函数,使其更易于理解,并具有一组清晰的验证。我会这样做:
function GetUsernameFromFacebookURL($url) {
/**
* Taken from http://findmyfbid.com/, the valid formats are:
* https://www.facebook.com/JohnDoe
* https://m.facebook.com/sally.struthers
* https://www.facebook.com/profile.php?id=24353623
*/
$correctURLPattern = '/^https?:\/\/(?:www|m)\.facebook.com\/(?:profile\.php\?id=)?([a-zA-Z0-9\.]+)$/';
if (!preg_match($correctURLPattern, $url, $matches)) {
throw new Exception('Not a valid URL');
}
return $matches[1];
}
现在,将Facebook用户名转换为Facebook ID更为棘手。现在,还没有一个解决的答案,这给了我们一个提示,它不能通过官方API完成
我猜FindMyBid.com和其他网站正在使用一些非官方API获取数据(比如直接抓取facebook.com网站)。我必须说,我不鼓励你这么做,因为非官方API往往会在没有通知的情况下中断,而Facebook的服务条款可能会禁止删除该网站
但是,如果这只是为了你的爱好项目,而你不在乎它是否在一周内中断,我发现以下代码可以从网站获取用户ID:
function GetUserIDFromUsername($username) {
// For some reason, changing the user agent does expose the user's UID
$options = array('http' => array('user_agent' => 'some_obscure_browser'));
$context = stream_context_create($options);
$fbsite = file_get_contents('https://www.facebook.com/' . $username, false, $context);
// ID is exposed in some piece of JS code, so we'll just extract it
$fbIDPattern = '/\"entity_id\":\"(\d+)\"/';
if (!preg_match($fbIDPattern, $fbsite, $matches)) {
throw new Exception('Unofficial API is broken or user not found');
}
return $matches[1];
}
因此,这段代码将用户代理更改为一些模糊的字符串,由于未知的原因,在获取facebook.com/username时会触发积极的反应,在一段JS代码中公开用户id
请注意,使用此脚本很可能违反Facebook的服务条款,它不是一个官方api,只是一个黑客行为,它可能会在任何给定时刻停止工作,而不会发出任何通知。Facebook可能还会随机向您抛出验证码页面,这也会破坏代码的执行
但目前看来,它似乎工作得很好。因此,如果输入https://www.facebook.com/profilename
,您想1)从URL提取档案名称
,还是2)提取档案名称
并将其转换为数字Facebook ID?正确!当用户输入时,我只希望将“profilename”转换为Facebook ID并保存到函数GetOnlyUsername($username),因为输入完成后脚本的其余部分工作正常。因此,答案是1)从URL中提取profilename,并将其转换为数字Facebook ID。为了提高代码可读性,您可以对用户ID和用户名使用不同的命名。我建议您分别使用变量名$userid
和$username
。此外,您还需要将函数的名称从GetOnlyUsername($username)
命名为,例如GetUsernameFromFacebookURL($url)
。我还建议使用注释优先的方法进行编码,因为现在很难弄清楚您试图用该代码实现的逻辑。您现在看到的代码仅从url中提取“profilename”。假设url的输入是这样的_italic_https://www.facebook.com/profilename?fref=ts 函数GetOnlyUsername($username)仅提取该profilename,并删除url中的其余部分。。。现在,我需要在该函数完成后继续将“profilename”转换为ID。我希望现在可以理解。该脚本不再工作,facebook api不支持从用户名获取ID,FindMyBid.com无法找到在设置中禁用搜索引擎的用户的ID。但是,您可以找到其搜索引擎设置已禁用的用户的数字id。有人知道怎么做吗?@TruongHua自己刚测试过,似乎效果很好。你是如何测试脚本的?
function GetUserIDFromUsername($username) {
// For some reason, changing the user agent does expose the user's UID
$options = array('http' => array('user_agent' => 'some_obscure_browser'));
$context = stream_context_create($options);
$fbsite = file_get_contents('https://www.facebook.com/' . $username, false, $context);
// ID is exposed in some piece of JS code, so we'll just extract it
$fbIDPattern = '/\"entity_id\":\"(\d+)\"/';
if (!preg_match($fbIDPattern, $fbsite, $matches)) {
throw new Exception('Unofficial API is broken or user not found');
}
return $matches[1];
}