2016-03-12 21 views
1

你好來自超級棒的人來自stackoverflow!如何從Facebook個人資料或網頁URL中獲取數字ID? PHP,Facebook圖形API

我需要幫助這個PHP腳本..我想從用戶獲取Facebook ID時,它在輸入框中進入他的Facebook配置文件鏈接。個人資料鏈接示例:https://www.facebook.com/profilename。我有一個腳本,它從url中收集「profilename」並將其保存到$ username,但現在我需要腳本將該profilename轉換爲該配置文件的Facebook ID並將其保存到$ username。現在,我知道你可以手動輕鬆地獲得Facebook ID,當你右鍵點擊用戶個人資料圖片比點擊複製鏈接地址和最後一個數字後。(點)是用戶配置文件ID ..或另一種方法是掃描頁面的<meta property="al:ios:url"<meta property="al:android:url"這也將獲得用戶ID。這是具有該工作腳本的網站。 http://findmyfbid.com/

這是我現在的代碼:正如你可以看到它只需要URL的最後一部分..請幫助正確地將該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; 
    } 
+0

因此,給定'https:// www.facebook.com/profilename'的輸入,你想1)從URL中提取'profilename'或者2)提取'profilename'並將其轉換爲數字Facebook ID? – jehna1

+0

正確!當用戶輸入https://www.facebook.com/profilename時,我只想將「profilename」轉換爲Facebook ID並保存到該函數GetOnlyUsername($ username),因爲腳本的其餘部分在輸入時工作正常是https://www.facebook.com/ID。所以答案是1)從URL中提取配置文件名並將其轉換爲數字Facebook ID。 –

+0

爲了獲得更好的代碼可讀性,您可以對用戶標識和用戶名使用不同的命名。我建議你分別使用變量名'$ userid'和'$ username'。你也想從'GetOnlyUsername($ username)'將你的函數命名爲'GetUsernameFromFacebookURL($網址)'。我還建議使用註釋優先的方法來編碼,因爲現在很難弄清楚你想用該代碼完成的邏輯。 – jehna1

回答

7

現在你的函數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更爲棘手。現在,有manyduplicatesofthisquestion沒有一個解決的答案,這給了我們一個暗示,它不能通過官方的API來完成。

我猜findmyfbid.com和替代品正在使用一些非官方的API來獲取數據(如直接scraping 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代碼中暴露了用戶標識。

請注意,使用這個腳本很可能違反Facebook的服務條款,它不是官方的api,而只是一個黑客,它可能在任何時候停止工作,恕不另行通知。 Facebook可能會隨機向你扔一個CAPTCHA頁面,這也會破壞代碼的執行。

但現在它似乎工作得很好。

+0

謝謝!這解決了我的問題! –

+0

工作很棒!謝謝。 – JoyGuru

+0

此腳本不再有效,facebook api不支持從用戶名中獲取id,而findmyfbid.com無法找到在設置中禁用搜索引擎的用戶的id。但是,http://fbid.co可以找到禁用了搜索引擎設置的用戶的數字ID。有誰知道該怎麼做? –

相關問題