Cou*_*Ech 2 php facebook facebook-graph-api
来自stackoverflow的超级棒人!
我需要这个PHP脚本的帮助..我想在用户输入框中的facebook个人资料链接时获取用户身份的facebook id.配置文件链接的示例:https://www.facebook.com/profilename.我有收集的URL"PROFILENAME",并将其保存到$用户名,但现在我需要的脚本到PROFILENAME转换为轮廓的Facebook的ID,并将其保存到$用户名的脚本.现在我知道当你右键点击用户个人资料图片时,你可以轻松获得facebook id,而不是点击复制链接地址和后面的最后一个数字.(点)是用户个人资料ID.或者另一种方法是扫描页面<meta property="al:ios:url"或<meta property="al:android:url"这也将获得用户ID.这是具有该工作脚本的站点.http://findmyfbid.com/
这是我现在的代码:正如你所看到的那样只需要网址的最后一部分..请帮助将该profilename转换为ID并将其保存为$ username.谢谢.
/* CHECKING */
if (isset($_POST["urlCheck"])) {
$url = $_POST["urlCheck"];
$urlParts = explode("facebook.com/", $url);
$username = GetOnlyUsername($urlParts[1]);
if (filter_var($url, FILTER_VALIDATE_URL) !== false)
exit("success");
else
exit("error");
}
/* TAKING INFO */
if (isset($_POST["urlGetData"])) {
$url = $_POST["urlGetData"];
$urlParts = explode("facebook.com/", $url);
$username = GetOnlyUsername($urlParts[1]);
$name= GetData($username);
function GetOnlyUsername($username) {
if ((strpos($username, 'profile.php?id=')) !== false) {
$username = str_replace("profile.php?id=", "", $username);
if ((strpos($username, '&fref=ts')) !== false) {
$username = str_replace("&fref=ts", "", $username);
}
} else if ((strpos($username, '?')) !== false) {
$test = explode("?", $username);
$username = $test[0];
}
return $username;
}
Run Code Online (Sandbox Code Playgroud)
现在,GetOnlyUsername当提供URL时,您的函数会有一些奇怪的结果:
echo GetOnlyUsername('https://www.facebook.com/profilename'); // outputs https://www.facebook.com/profilename
Run Code Online (Sandbox Code Playgroud)
为了使函数更清晰,我建议重命名函数,使其更容易理解并具有一组清晰的验证.我是这样做的:
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];
}
Run Code Online (Sandbox Code Playgroud)
现在,将Facebook用户名转换为Facebook ID更加棘手.现在,这个问题有很多 重复 , 没有一个解决的答案,这给了我们一个提示,它不能通过官方API完成.
我猜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];
}
Run Code Online (Sandbox Code Playgroud)
因此,这段代码将用户代理更改为一些模糊的字符串,由于某些原因未知,在获取facebook.com/username时会触发积极的反应,在一段JS代码中暴露用户ID.
请注意,使用此脚本很可能违反Facebook的服务条款,它不是官方API,而只是一个黑客,它可能会在任何特定时刻停止工作,恕不另行通知.Facebook也可能随机抛出一个CAPTCHA页面,这也打破了代码执行.
但是现在似乎工作得很好.
| 归档时间: |
|
| 查看次数: |
10866 次 |
| 最近记录: |