Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Facebook个人资料或页面URL获取数字ID?PHP、Facebook图形API_Php_Facebook_Facebook Graph Api - Fatal编程技术网

如何从Facebook个人资料或页面URL获取数字ID?PHP、Facebook图形API

如何从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

你好,来自stackoverflow的超级棒的人


我需要这个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];
}