Найти пользователя Facebook (ссылка на страницу профиля) по известному адресу электронной почты

У меня есть адрес электронной почты и вы хотите узнать, есть ли пользователь Facebook, связанный с этим адресом. Если есть, то я хочу получить URL-адрес этой страницы профиля пользователя и сохранить его где-нибудь. У меня нет приложения facebook, но при необходимости я бы использовал существующие данные учетной записи для входа в facebook и выполнения задачи.

Я думал, что это будет непростая задача, но почему-то это не так. Я прочитал документацию Graph API и там вы найдете инструкции по поиску общедоступных данных. В нем говорится, что формат:
https://graph.facebook.com/search?q=QUERY&type=OBJECT_TYPE

Но попытка этого с адресом электронной почты в параметре q и пользователе в параметре типа без дополнительной информации приводит к выводу OAuthException : «Для запроса этого ресурса требуется токен доступа». Однако, если вы нажмете пример ссылок поиска, Facebook генерирует URL-адрес с указанным токеном доступа, связанным с текущим пользователем. Выполнение поиска с помощью этого токена дает ожидаемые результаты. Но я не могу понять, как получить этот токен доступа к пользовательскому сеансу после входа в систему. Каждый раз, когда я ищу, как получить токен доступа, я нахожу только информацию о приложениях Facebook и получения разрешений для базового или специального доступа к данным. Это, как я уже упоминал, не то, что я ищу, поскольку у меня нет и не нужно приложение facebook.

Поскольку Facebook дает мне необходимый токен в примерах ссылок, я думал, что это не должно быть проблемой, чтобы получить его. Или у них есть только из-за домашнего преимущества? Кроме того, Outlook Social Connector Provider для Facebook способен извлекать данные Facebook только через адрес электронной почты (и данные учетной записи). Поэтому я подумал, что если Microsoft сможет это сделать, мне также следует делать простые вещи.

И последнее, но не менее важное – это тем хуже, поскольку я, теоретически и практически, уже могу найти URL-адрес профиля пользователей, просто поиская адрес электронной почты. Мне даже не нужно входить в Facebook. И это не официальный путь API.
Если я выполнил веб-запрос на http://www.facebook.com/search.php?init=s:email&[email protected]&type=users я получаю ожидаемый результат поиска. Проблема в том, что мне приходится анализировать HTML-код и извлекать URL-адрес (это нормально), и что страница результатов может быть изменена и может легко сломать мой метод, чтобы извлечь URL-адрес (проблемный).

Так кто-нибудь имеет представление, какой лучший способ выполнить задание?

    Окончательный ответ на этот вопрос – от самих Facebook. Сегодня в сообщении https://developers.facebook.com/bugs/335452696581712 говорится:

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

    Итак, увы, простой ответ: вы больше не можете искать пользователей по их адресу электронной почты. Это отстой, но это новые правила Facebook.

    Просто используйте графический API с этим URL-адресом: https://graph.facebook.com/[email protected]&type=user&access_token= … Вы можете легко создать приложение здесь и получить для него токен доступа здесь , Я считаю, что вы получаете 600 запросов за 600 секунд, хотя это не документировано.

    Если вы делаете это навалом, вы можете использовать пакетные запросы в партиях из 20 адресов электронной почты. Это может помочь с ограничениями по скорости (я не уверен, если вы получите 600 пакетных запросов за 600 секунд или 600 индивидуальных запросов).

    В ответ на ошибку, указанную здесь: http://developers.facebook.com/bugs/167188686695750 инженер в Facebook ответил:

    Это по дизайну, поиск пользователей предназначен для пользователей только для пользователей, для поиска новых друзей или поиска по электронной почте, чтобы найти существующие контакты на Facebook. «Скребок», упомянутый в StackOverflow, специально противоречит нашим Условиям обслуживания https://www.facebook.com/terms.php и фактически единственный законный способ поиска пользователей на Facebook – это когда вы являетесь пользователем.

    Возможно, это немного запоздало, но я нашел веб-сайт, который предоставляет информацию о социальных сетях в социальных сетях, знайте электронную почту addreess. Это https://www.fullcontact.com

    Вы можете использовать Person Api там и получить информацию.

    Это тип get: https://api.fullcontact.com/v2/[email protected] **** & apiKey = ********

    Также есть выбор xml или json.

    Я захватил связь с плагином Outlook для Facebook и вот запрос 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))"} 

    где
    TOKEN – действительный токен доступа
    EMAIL_HASH – комбинация hashей CRC32 и MD5 искомого адреса электронной почты в формате crc32_md5
    MY_ID – идентификатор профиля facebook владельца токена доступа

    Но когда я запускаю этот запрос с другим токеном доступа (сгенерированным для собственного приложения), ответ сервера: «Запрошенная вами таблица не существует». Я также не нашел адрес электронной почты в документации API Facebook. Есть ли у Microsoft дополнительные права в Facebook?

    Facebook придерживается строгой политики обмена только тем содержимым, которое профиль предоставляет публике конечному пользователю. Еще то, что вы хотите, возможно, если пользователь фактически оставил идентификатор электронной почты открытым для общедоступного домена. Дикая попытка, которую вы можете сделать, это отправить пакетные запросы для максимально возможного размера партии для идентификаторов … “http://graph.facebook.com/ .. и проанализируйте результат, чтобы проверить, существует ли электронная почта, и если это так, то оно соответствует тому, которое вы хотите. не нужна никакая access_token для публичной информации.

    в случае, если вы хотите, чтобы идентификатор электронной почты пользователя FB был только возможным способом, так это то, что они разрешают приложение ur, а затем вы можете использовать созданный таким образом access_token для выполнения требуемой задачи.

    Возможно, все изменилось, но я помню, что у rapleaf была услуга, в которой вы вводили адрес электронной почты, и вы могли получить идентификатор facebook.
    https://www.rapleaf.com/

    Если что-то там не было, можно было бы «зарегистрироваться» с электронной почтой, и у него будет возможность получить данные через некоторое время.

    Я столкнулся с этим, когда несколько лет назад использовал инструмент поиска Maltego .
    Приложение использует множество типов «преобразований», а некоторые из них связаны с facebook и твиттером и т. Д.

    .. или найти некоторые новые sqli на fb и fb-приложениях, хе-хе. 🙂

    Андреас, я также искал «el-to-id» ellegant solution и не мог найти его. Однако, как вы сказали, скрипинг экрана в этом случае не такая уж плохая идея, потому что электронные письма уникальны, и вы либо получаете одно совпадение, либо ничего. До тех пор, пока Facebook не изменит свою страницу поиска кардинально, следующее будет делать трюк:

     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(); } 

    ПРЕДУПРЕЖДЕНИЕ: старый и устаревший ответ. Не используй


    Я думаю, что вам нужно будет найти последнее решение, соскабливая страницу результатов поиска, потому что вы можете искать по электронной почте с помощью API только тем пользователям, которые разрешили ваш APP (и вам понадобится один, потому что токен FB в примерах указывается дата истечения срока действия, и вам нужны расширенные разрешения для доступа к электронной почте пользователя).

    Единственный подход, который я не пробовал, но я думаю, что он ограничен таким же образом, это FQL. Что-то вроде

     SELECT * FROM user WHERE email '[email protected]' 

    Это выглядит как довольно простая задача, так как Facebook не скрывает от меня электронные письма или телефоны пользователей. Итак, здесь функция html parsing на PHP с 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 } 

    Сначала я благодарю вас. # 57ar7up и я добавлю следующий код, который поможет найти номер телефона.

     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('/\{"id":(?P\d+)\,/', $data, $matches); if(isset($matches["fbUserId"]) && $matches["fbUserId"] != ""){ $fbUserId = $matches["fbUserId"]; $params = array($query,$fbUserId); }else{ $fbUserId = ""; $params = array($query,$fbUserId); } return $params; } 
    Interesting Posts

    В чем разница между Bitmap и Drawable в Android?

    Возможно ли открыть несколько веб-страниц при запуске браузера?

    Код .NET для отправки ZPL на принтеры Zebra

    Как получить текущий часовой пояс пользователя в c #

    Laravel 5 – Как получить доступ к изображению, загруженному в хранилище в представлении?

    Как удалить файл с именем «NUL» в Windows?

    Написание механизма распознавания речи

    Действительно хорошие, плохие примеры тестовых данных UTF-8

    Экспоненциальная скользящая средняя, ​​отснятая в переменные времена

    Импортирование google-play-services lib в Intellij IDEA 12 (и 13)

    Нет провайдера Persistence для EntityManager с именем X

    Простая анимационная петля для CSS – Fading In & Out «Загрузка» текста

    Ноутбук становится очень медленным, когда он горячий

    Использование специального дискриминатора типа, чтобы сообщить JSON.net, какой тип иерархии classов десериализуем

    Как конвертировать VDI-жесткий диск в файл VHD?

    Давайте будем гением компьютера.