你好超级精彩的人来自stackoverflow!
我需要这个php脚本的帮助..我想在用户输入框中输入他的facebook个人资料链接时获取用户身份的facebook id。个人资料链接示例:https://www.facebook.com/profilename。我有一个脚本从URL收集&#34; profilename&#34;并将其保存到$ username但现在我需要脚本将该profilename转换为该配置文件的facebook ID并将其保存到$ username。现在我知道当你右键单击用户个人资料图片时,你可以手动轻松获取facebook id,而不是点击复制链接地址和之后的最后一个数字。(点)是用户个人资料ID。或者另一种方法是扫描页面{ {1}}或<meta property="al:ios:url"
这也将获得用户ID。这是具有该工作脚本的站点。 http://findmyfbid.com/
现在这是我的代码:正如您所看到的那样,它只占用了网址的最后一部分..请帮助将该profilename转换为ID并将其保存为$ username。谢谢。
<meta property="al:android:url"
答案 0 :(得分:8)
现在,当您提供网址时,您的函数GetOnlyUsername
会有一些奇怪的结果:
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更加棘手。现在,many duplicates of this question没有得到解决的答案,这提示我们无法通过官方API完成此操作。< / p>
我猜测findmyfbid.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也可能随机抛出一个CAPTCHA页面,这也会破坏代码执行。
但是现在似乎工作得很好。