In this article, I would like to share my solution to get a Facebook group ID number from its URL.
Right now, this operation could not be done using Facebook Graph API or FQL. I have no idea why that old dated issue still not fixed by Facebook !
In this solution I have used a bot which login to Facebook, then go to the target group and extracts group id in somewhere from the HTML content.
Here is the code source of a working solution based on PHP cURL library and DOM Xpath.
FacebookBot.php
<?php class FacebookBot { public static $HTTP_POST = "http-post"; public static $HTTP_GET = "http-get"; private $email; private $pass; private $uagent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)"; private $cookies = "./cookies.txt"; public function __construct($email, $pass) { $this->email = $email; $this->pass = $pass; touch($this->cookies); } private static function toFbMobileUrl($url) { return str_replace('//www.facebook.', '//m.facebook.', $url); } private function callUrl($url, $calltype, $data, &$output) { try { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_TIMEOUT, 30); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //return or not output data curl_setopt($curl, CURLOPT_ENCODING, ""); curl_setopt($curl, CURLOPT_COOKIEFILE, $this->cookies); curl_setopt($curl, CURLOPT_COOKIEJAR, $this->cookies); curl_setopt($curl, CURLOPT_USERAGENT, $this->uagent); if ($calltype == self::$HTTP_POST) { $tmp = array(); foreach ($data as $param_key => $param_value) { $tmp[] = "$param_key=$param_value"; } $data_str = implode("&", $tmp); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data_str); } $output = curl_exec($curl); curl_close($curl); unset($curl); } catch (Exception $e) { echo $e->getMessage(); } } public function login() { $url = "https://m.facebook.com/login.php"; $post_data = array(); $post_data['email'] = $this->email; $post_data['pass'] = $this->pass; $this->callUrl($url, self::$HTTP_POST, $post_data, $output); } public function logout() { $this->callUrl("https://m.facebook.com/", self::$HTTP_GET, null, $html); $dom = new DOMDocument; @$dom->loadxml($html); $links = $dom->getElementsByTagName('a'); foreach ($links as $link) { if (strpos($link->getAttribute('href'), 'logout.php')) { $logout = $link->getAttribute('href'); break; } } $url = 'https://m.facebook.com' . $logout; $this->callUrl($url, self::$HTTP_GET, null, $html); } public function destroyCookies() { unlink($this->cookies); } public function getGroupIdByUrl($url) { try { $this->callUrl(self::toFbMobileUrl($url), self::$HTTP_GET, null, $html); $dom = new DOMDocument; @$dom->loadHTML($html); $xpath = new DOMXpath($dom); $elements = $xpath->query("//a[starts-with(@href, '/groups/')]"); if ($elements->length > 0) { $element = $elements->item(0); preg_match("/([0-9]+)/", $element->getAttribute('href'), $matches); } else { throw new Exception("could not find group id", 1); } return $matches[0]; } catch (Exception $e) { throw $e; } } }
GetGroupIdFromUrl.php
<?php $group_url=<a facebook group url>; $email=<your facebook login>; $pass=<your facebook password>; try { include_once './FacebookBot.php'; $fbbot = new FacebookBot($email, $pass); $fbbot->login(); $gid = $fbbot->getGroupIdByUrl($group_url); $fbbot->logout(); $fbbot->destroyCookies(); echo "Group id: ".$gid; } catch (Exception $e) { die("An error has been occurred !"); }
Try it here (Live demo) :
If you have found a bug or an alternative solution, please dont’t hesitate to post a comment or send me a private message. Thank you.
Ralph says:
Hi admin do you need unlimited articles for your site ? What if
you could copy article from other blogs, make it pass copyscape test and publish on your site
– i know the right tool for you, just search in google:
Ziakdra’s article tool
seo bastardo says:
Hola! Gracias por esta información. Llevaba un rato busacando
por internet sobre este tema hasta el momento en que he encontrado tu página.
Está muy bieen el artículo. Prosigue de esta forma!