Можно ли проверить, любит ли пользователь мою фан-страницу facebook с моего сайта с помощью Javascript или PHP?
EDIT: Мне нужно решение, поэтому пользователю не нужно сначала аутентифицировать / разрешать некоторые пропуски
Самый простой способ – вызвать API-интерфейс Graph для получения соединений /me/likes
(обратите внимание, что вам потребуется разрешение user_likes
). Затем пройдите через каждый и сравните id
с идентификатором вашей страницы.
Предполагая, что вы используете официальный PHP PHP SDK и имеете экземпляр объекта Facebook
настроенного (см. Раздел « Использование » на вышеупомянутой странице), следующий код можно использовать, чтобы узнать, является ли пользователь поклонником Daft Punk :
$our_page_id = '22476490672'; // This should be string $user_is_fan = false; $likes = $facebook->api( '/me/likes?fields=id' ); foreach( $likes['data'] as $page ) { if( $page['id'] === $our_page_id ) { $user_is_fan = true; break; } }
Теперь вы можете работать с переменной $user_is_fan
.
В JavaScript код будет очень похожим. Используя официальный метод JavaScript SDK FB.api
(опять же, предположив, что вы взяли аутентификацию):
FB.api('/me/likes?fields=id', function(response) { var our_page_id = '22476490672'; var user_is_fan = false; var likes_count = response.data.length; for(i = 0; i < likes_count; i++) { if(response.data[i].id === our_page_id) { user_is_fan = true; break; } } });
Обратите внимание, что здесь мы используем асинхронный запрос и обратный вызов, поэтому код, использующий переменную user_is_fan
должен находиться внутри функции.
<?php require '../src/facebook.php'; // Create our Application instance (replace this with your appId and secret). $facebook = new Facebook(array( 'appId' => 'APP_ID', 'secret' => 'APP_SECRET', )); $user = $facebook->getUser(); $page_id = "123456789"; $page_name = $facebook->api("/".$page_id)['name']; $page_link = $facebook->api("/".$page_id)['link']; if ($user) { try { $likes = $facebook->api("/me/likes/".$page_id); if( !empty($likes['data']) ) echo "I like!"; else echo "not a fan!"; } catch (FacebookApiException $e) { error_log($e); $user = null; } } if ($user) { $logoutUrl = $facebook->getLogoutUrl(); } else { $loginUrl = $facebook->getLoginUrl(array( 'scope' => 'user_likes' )); } // rest of code here ?>
Если у вас все в порядке с пользователем, предоставляющим разрешения, для веб-сайта на PHP это можно сделать легко:
1- Создайте новое приложение Facebook здесь .
2 – Загрузите PHP PHP SDK отсюда . Извлеките файлы и поместите их в ту же папку с файлом, в который вы вставьте код, указанный ниже!
3 – Получите свой идентификатор страницы Facebook, используя этот инструмент .
4 – Создайте Facebook, как код коробки для вашей страницы здесь .
После завершения 1, 2, 3 и 4 шагов вы можете проверить, понравилась ли пользователю страница или нет со следующим кодом:
<?php require('facebook.php'); $config = array( 'appId' => 'your facebook app id', 'secret' => 'your facebook app secret code', 'allowSignedRequest' => false ); $facebook = new Facebook($config); $user_id = $facebook->getUser(); if (isset($user_id)) { try { $likes = $facebook->api('/me/likes/your_facebook_page_id_here', 'GET'); if (!empty($likes['data'])) // if user has liked the page then $likes['data'] wont be empty otherwise it will be empty { echo 'Thank you for liking our fan page!'; } else { echo 'You have not liked our fan page! Like it now:'; ?> <iframe src="//www.facebook.com/plugins/likebox.php?href=https%3A%2F%2Fwww.facebook.com%2Fchillopedia&width&height=290&colorscheme=light&show_faces=true&header=true&stream=false&show_border=true&appId=1392604484339363" scrolling="no" frameborder="0" style="border:none; overflow:hidden; height:290px;" allowTransparency="true"></iframe> //replace this with your own Facebook like box code <?php } } catch (FacebookApiException $e) { $login_url = $facebook->getLoginUrl(); echo '<a href="' . $login_url . '">Please click here to login into your Facebook account.</a>'; error_log($e->getType()); error_log($e->getMessage()); } } else { $login_url = $facebook->getLoginUrl(); echo '<a href="' . $login_url . '">Please lick here to login into your Facebook account</a>'; } ?>
Пользователь нажмет на «Пожалуйста, нажмите здесь, чтобы войти в свою учетную запись на Facebook». текст, который перенаправляет его на страницу прав доступа к Facebook, как только пользователь разрешит ваше приложение, код будет извлекать данные пользователя и отобразит подобный бокс, если пользователю не понравилась ваша страница поклонника.
<script src="http://connect.facebook.net/en_US/all.js"></script> <script> FB.init({ appId : 'YOUR_APP_ID_WITHIN_QUOTES', //Change this to your app id status : true, // check login status cookie : true, // enable cookies to allow the server to access the session xfbml : true // parse XFBML }); </script> $signed_request = $_REQUEST["signed_request"]; list($encoded_sig, $payload) = explode('.', $signed_request, 2); $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true); $has_liked = $data["page"]["liked"];
теперь проверьте параметр $ has_liked, чтобы посмотреть, нравится ли пользователю страница ur или нет!
похоже, что «/ me / likes / [page_id]» не всегда возвращает запись, даже если она есть. в последнее время я прошу «/ me / likes / [page_id]», он вернет 0, но если я запрошу без page_id, но возьмите кучу записей «/ me / likes /», и вы увидите, что page_id на самом деле там, не могу понять, почему.
при проверке с помощью graph.facebook.com/[page_id] только подозрительная вещь – это «can_post» – это ложь, а другие, которые «/ me / likes / [page_id]« работают », истинны.
но петли не очень хороши в этой ситуации, особенно у некоторых сумасшедших людей миллионы людей. есть ли какие-либо настройки конфиденциальности, связанные с учетной записью владельца page_id, вызовет проблему?