it-swarm.com.de

Finden Sie den Facebook-Nutzer (URL zur Profilseite) anhand der bekannten E-Mail-Adresse

Ich habe eine E-Mail-Adresse und möchte herausfinden, ob ein Facebook-Nutzer mit dieser Adresse verlinkt ist. Wenn ja, dann möchte ich die URL zu dieser Benutzerprofilseite abrufen und sie irgendwo speichern. Ich habe nicht eine Facebook-Anwendung, aber wenn nötig, würde ich vorhandene Kontodaten verwenden, um mich anzumelden Facebook und erledige die Aufgabe.

Ich dachte, das wäre eine einfache Aufgabe, aber irgendwie nicht. Ich habe die Graph API -Dokumentation durchgelesen und dort finden Sie Anweisungen, wie Sie öffentliche Daten durchsuchen können. Das Format lautet:
https://graph.facebook.com/search?q=QUERY&type=OBJECT_TYPE

Wenn Sie dies jedoch mit einer E-Mail-Adresse im q param und user im type param ohne weitere Informationen versuchen, führt dies zu einem OAuthException-Spruch "Ein Zugriff Token ist erforderlich, um diese Ressource anzufordern. " Wenn Sie jedoch auf die Suchlinks klicken, generiert Facebook eine URL mit dem genannten Zugriffstoken, das sich auf den aktuell angemeldeten Benutzer bezieht. Durch das Durchführen von Suchen mit diesem Token werden die erwarteten Ergebnisse erzielt. Ich kann jedoch nicht herausfinden, wie Sie dieses Benutzersitzungszugriffstoken erhalten, nachdem Sie sich angemeldet haben. Bei jeder Suche nach dem Zugriffstoken finde ich nur Informationen zu Facebook-Apps und zum Abrufen von Berechtigungen für den Basis- oder bestimmten Datenzugriff. Dies ist, wie gesagt, nicht das, wonach ich suche, da ich keine Facebook-App habe und auch nicht brauche.

Da Facebook mir in den Beispiel-Links das erforderliche Token gibt, dachte ich, dass es kein Problem sein sollte, es auch zu bekommen. Oder haben sie es nur wegen Heimvorteils? Der Outlook Social Connector Provider für Facebook kann Facebook-Daten nur über eine E-Mail-Adresse (und die bereitgestellten Kontodaten) abrufen. Also dachte ich mir, wenn Microsoft dieses Zeug machen kann, sollte ich auch ähnliche Dinge tun können.

Nicht zuletzt ist dies umso frustrierender, da ich theoretisch und praktisch bereits in der Lage bin, die Benutzerprofil-URL nur durch die Suche nach der E-Mail-Adresse zu finden. Ich muss nicht einmal bei Facebook angemeldet sein. Und es ist nicht die offizielle API-Methode.
Wenn ich eine Webanfrage an http://www.facebook.com/search.php?init=s:email&[email protected]&type=users stelle, erhalte ich das erwartete Suchergebnis. Das Problem ist, dass ich den HTML-Code analysieren und die URL extrahieren muss (das ist in Ordnung), und dass die Ergebnisseite möglicherweise Änderungen unterworfen ist und meine Methode zum Extrahieren der URL leicht verletzen könnte (problematisch).

Hat also jemand eine Idee, wie die gegebene Aufgabe am besten gelöst werden kann?

29
Andreas Adler

Die endgültige Antwort darauf ist von Facebook selbst. Im Post heute unter https://developers.facebook.com/bugs/335452696581712 sagt ein Facebook-Entwickler

The ability to pass in an e-mail address into the "user" search type was
removed on July 10, 2013. This search type only returns results that match
a user's name (including alternate name).

Die einfache Antwort lautet: Sie können nicht mehr nach Benutzern anhand ihrer E-Mail-Adresse suchen. Das ist scheiße, aber das sind die neuen Regeln von Facebook.

15
Dave Sag

Als Reaktion auf den hier eingereichten Fehler: http://developers.facebook.com/bugs/167188686695750 antwortete ein Facebook-Ingenieur:

Dies ist von Entwurf, die Suche nach Benutzern soll nur eine Benutzer-zu-Benutzer-Funktion sein, um neue Freunde zu finden oder per E-Mail nach vorhandenen Kontakten auf Facebook zu suchen. Das auf StackOverflow erwähnte "Scraping" verstößt ausdrücklich gegen unsere Nutzungsbedingungen https://www.facebook.com/terms.php und in der Tat ist die einzige legitime Möglichkeit, Nutzer auf Facebook zu suchen, wenn Sie Nutzer sind .

7
Dan Fabulich

Verwenden Sie einfach die Grafik-API mit diesem URL-Format: https://graph.facebook.com/[email protected]&type=user&access_token= ... Sie können ganz einfach eine Anwendung erstellen - hier und schnappen Sie sich ein Zugriffstoken dafür hier . Ich glaube Sie erhalten schätzungsweise 600 Anfragen pro 600 Sekunden, obwohl dies nicht dokumentiert ist.

Wenn Sie dies in großen Mengen tun, können Sie Stapelanforderungen in Stapeln von 20 E-Mail-Adressen verwenden. Dies kann bei Ratenbeschränkungen hilfreich sein (ich bin nicht sicher, ob Sie 600 Batch-Anforderungen pro 600 Sekunden oder 600 Einzelanforderungen erhalten).

7
bkaid

Vielleicht ist dies ein bisschen spät, aber ich habe eine Website gefunden, auf der Social-Media-Kontodetails durch E-Mail-Adresse angegeben werden. Es ist https://www.fullcontact.com

Sie können dort Person Api verwenden und erhalten Informationen.

Dies ist eine Art von get: https://api.fullcontact.com/v2/[email protected] **** & apiKey = ********

Auch gibt es XML oder Json Wahl.

5
oneNiceFriend

Ich habe die Kommunikation des Outlook-Plugins für Facebook erfasst und hier die Anforderung POST

https://api.facebook.com/method/fql.multiquery
access_token=TOKEN&queries={"USER0":"select '0', uid, name, birthday_date, profile_url, pic, website from user where uid in (select uid from email where email in ('EMAIL_HASH'))","PENDING_OUT":"select uid_to from friend_request where uid_from = MY_ID and (uid_to IN (select uid from #USER0))"}

woher
TOKEN - gültiges Zugriffstoken
EMAIL_HASH - Kombination aus CRC32- und MD5-Hash der gesuchten E-Mail-Adresse im Format crc32_md5
MY_ID - ID des Facebook-Profils des Besitzers des Zugriffstokens

Wenn ich jedoch diese Abfrage mit einem anderen Zugriffstoken (für meine eigene Anwendung generiert) ausführen, lautet die Antwort des Servers: "Die angeforderte Tabelle ist nicht vorhanden". Ich habe die Tabellen-E-Mail auch nicht in der Facebook-API-Dokumentation gefunden. Hat Microsoft einige zusätzliche Rechte bei Facebook?

3
Jan Zahradník

WARNUNG: Alte und veraltete Antwort. Verwende nicht


Ich denke, dass Sie sich für Ihre letzte Lösung entscheiden müssen, indem Sie die Ergebnisseite der Suche auskratzen, da Sie nur mit der API per E-Mail nach den Benutzern suchen können, die Ihre APP autorisiert haben (und Sie benötigen eine Token für diesen FB hat in den Beispielen ein Ablaufdatum und Sie benötigen erweiterte Berechtigungen, um auf die E-Mail des Benutzers zuzugreifen.

Die einzige Herangehensweise, die ich nicht ausprobiert habe, aber ich denke, es ist auf dieselbe Weise begrenzt, ist FQL. So etwas wie

SELECT * FROM user WHERE email '[email protected]'
0
Manuel Pedrera

Vielleicht haben sich die Dinge geändert, aber ich erinnere mich daran, dass rapleaf einen Dienst hatte, bei dem Sie eine E-Mail-Adresse eingeben und eine Facebook-ID erhalten.
https://www.rapleaf.com/

Wenn sich etwas nicht darin befindet, kann man sich mit der E-Mail "anmelden" und sollte die Chance haben, die Daten nach einer Weile abzurufen.

Ich bin auf dieses Problem gestoßen, als ich ein Suchwerkzeug namens Maltego vor ein paar Jahren benutzte.
Die App verwendet viele Arten von "Transformationen" und einige, wenn sie mit Facebook und Twitter in Verbindung stehen.

..oder ein paar neue sqli's auf fb und fb apps finden, hehe. :)

0
EO2

Dies ist eine ziemlich einfache Aufgabe, da Facebook Benutzer-E-Mails oder Handys nicht vor mir verbirgt. Hier ist also die HTML-Parsing-Funktion auf PHP mit cURL

/*
    Search Facebook without authorization
    Query
        user name, e-mail, phone, page etc
    Types of search
        all, people, pages, places, groups, apps, events
    Result
        Array with facebook page names ( facebook.com/{page} )
    By      57ar7up
    Date    2016
*/
function facebook_search($query, $type = 'all'){
    $url = 'http://www.facebook.com/search/'.$type.'/?q='.$query;
    $user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36';

    $c = curl_init();
    curl_setopt_array($c, array(
        CURLOPT_URL             => $url,
        CURLOPT_USERAGENT       => $user_agent,
        CURLOPT_RETURNTRANSFER  => TRUE,
        CURLOPT_FOLLOWLOCATION  => TRUE,
        CURLOPT_SSL_VERIFYPEER  => FALSE
    ));
    $data = curl_exec($c);

    preg_match_all('/href=\"https:\/\/www.facebook.com\/(([^\"\/]+)|people\/([^\"]+\/\d+))[\/]?\"/', $data, $matches);
    if($matches[3][0] != FALSE){                // facebook.com/people/name/id
        $pages = array_map(function($el){
            return explode('/', $el)[0];
        }, $matches[3]);
    } else                                      // facebook.com/name
        $pages = $matches[2];
    return array_filter(array_unique($pages));  // Removing duplicates and empty values
}
0
57ar7up

Andreas, Ich habe auch nach einer "email-to-id" -eleganten Lösung gesucht und konnte keine finden . Wie Sie jedoch sagten, ist Screen Scraping in diesem Fall keine so schlechte Idee. denn E-Mails sind eindeutig und Sie erhalten entweder eine einzige Übereinstimmung oder keine. Solange Facebook die Suchseite nicht drastisch ändert, können Sie Folgendes tun:

final static String USER_SEARCH_QUERY = "http://www.facebook.com/search.php?init=s:email&q=%s&type=users";
final static String USER_URL_PREFIX = "http://www.facebook.com/profile.php?id=";

public static String emailToID(String email)
{
    try
    {
        String html = getHTML(String.format(USER_SEARCH_QUERY, email));
        if (html != null)
        {
            int i = html.indexOf(USER_URL_PREFIX) + USER_URL_PREFIX.length();
            if (i > 0)
            {
                StringBuilder sb = new StringBuilder();
                char c;
                while (Character.isDigit(c = html.charAt(i++)))
                    sb.append(c);
                if (sb.length() > 0)
                    return sb.toString();
            }
        }
    } catch (Exception e)
    {
        e.printStackTrace();
    }
    return null;
}

private static String getHTML(String htmlUrl) throws MalformedURLException, IOException
{
    StringBuilder response = new StringBuilder();
    URL url = new URL(htmlUrl);
    HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
    httpConn.setRequestMethod("GET");
    if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK)
    {
        BufferedReader input = new BufferedReader(new InputStreamReader(httpConn.getInputStream()), 8192);
        String strLine = null;
        while ((strLine = input.readLine()) != null)
            response.append(strLine);
        input.close();
    }
    return (response.length() == 0) ? null : response.toString();
}
0
Zach-M

Facebook hat eine strikte Richtlinie, nur den Inhalt zu teilen, den ein Profil für den Endbenutzer veröffentlicht. Was immer Sie möchten, ist möglich, wenn der Benutzer die E-Mail-ID tatsächlich öffentlich zugänglich gemacht hat ... _. Ein wilder Versuch Senden Sie Batch-Anfragen für die maximal mögliche Batch-Größe an die IDs ... "http://graph.facebook.com/ .. und parsen Sie das Ergebnis, um zu prüfen, ob E-Mails vorhanden sind. Wenn dies der Fall ist, stimmt es mit dem von Ihnen gewünschten überein .. Sie benötigen kein access_token für die öffentlichen Informationen.

wenn Sie die E-Mail-ID eines FB-Benutzers wünschen, können Sie nur Ihre App autorisieren und dann das so generierte access_token für die erforderliche Task verwenden.

0
mjs

Zuerst danke ich dir. # 57ar7up und ich werde den folgenden Code hinzufügen, um die Rückrufnummer zu finden.

function index(){
    // $keyword = "0946664869";
    $sql = "SELECT * FROM phone_find LIMIT 10";
    $result =  $this->GlobalMD->query_global($sql);
    $fb = array();
    foreach($result as $value){
        $keyword = $value['phone'];
        $fb[] = $this->facebook_search($keyword);
    }
    var_dump($fb);

}

function facebook_search($query, $type = 'all'){
    $url = 'http://www.facebook.com/search/'.$type.'/?q='.$query;
    $user_agent = $this->loaduserAgent();

    $c = curl_init();
    curl_setopt_array($c, array(
        CURLOPT_URL             => $url,
        CURLOPT_USERAGENT       => $user_agent,
        CURLOPT_RETURNTRANSFER  => TRUE,
        CURLOPT_FOLLOWLOCATION  => TRUE,
        CURLOPT_SSL_VERIFYPEER  => FALSE
    ));
    $data = curl_exec($c);
    preg_match('/\&#123;&quot;id&quot;:(?P<fbUserId>\d+)\,/', $data, $matches);
    if(isset($matches["fbUserId"]) && $matches["fbUserId"] != ""){
        $fbUserId = $matches["fbUserId"];
        $params = array($query,$fbUserId);
    }else{
        $fbUserId = "";
        $params = array($query,$fbUserId);
    }
    return $params;
}
0
Desk Kim Han