in Facebook Graph API

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.

 

 

Write a Comment

Comment

  1. 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

  2. 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!