Я никогда не использовал Facebook Graph API или OAuth. Я просто пытаюсь получить публичный фид страницы Facebook, используя Graph API, но для этого требуется токен доступа. Я не хочу заставлять пользователей входить в систему и разрешать доступ к их токену. Токен доступа к приложениям Facebook можно использовать для получения общего фида, но я пытаюсь сделать это полностью в Javascript, поэтому я не могу использовать секрет приложения для этого. Я где-то читал, что токен доступа к приложениям Facebook не истекает и не изменяется, если я не вручную reset секрет. Это правда? Было бы безопасным только жесткий код в токене доступа? Если нет, можно ли каким-либо образом аутентифицировать приложение, чтобы получить токен без привлечения пользователя? Есть ли какой-то общий токен приложения, который я мог бы использовать?
Можете ли вы получить общедоступную ленту новостей Facebook с помощью Graph API без запроса пользователя?
Ответ 1
Если вы похожи на меня, ваши клиенты не захотят использовать стандартный плагин Facebook likebox, они захотят, чтобы все было стильно и настроено по-своему.
Вам не нужно тратить весь день на официальную документацию, задаваясь вопросом, применимо ли какое-либо из них для вас что-то простое, это довольно просто. Путаница возникает из-за того, что вы предполагаете, что со всеми этими ключами и секретными идентификаторами вам нужно будет получить разрешение или аутентификацию со страницы Facebook, на которую вы хотели вытащить фид, - вы этого не сделаете. Все, что вам нужно, это действующее приложение, и вы можете получить фид для любой публичной страницы.
Установите приложение в Facebook, и оно предоставит вам идентификатор приложения и ключ API. Получите идентификатор профиля для общедоступного канала, который вы хотите, и все, что вам нужно. Затем вы можете использовать следующий код для получения токена аутентификации, а затем использовать его для возврата данных фида в качестве объекта JSON.
<?php
function fetchUrl($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
// You may need to add the line below
// curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
$feedData = curl_exec($ch);
curl_close($ch);
return $feedData;
}
$profile_id = "the_profile_id_of_the_page_you_want";
//App Info, needed for Auth
$app_id = "your_app_id_in_here";
$app_secret = "your_app_secret_in_here";
//Retrieve auth token
$authToken = fetchUrl("https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id={$app_id}&client_secret={$app_secret}");
$json_object = fetchUrl("https://graph.facebook.com/{$profile_id}/feed?{$authToken}");
Благодаря редактированию кто-то предложил, чтобы этот код пришел из здесь (выглядит все равно:)), и там есть дополнительная информация в там могут быть комментарии.
Затем вы можете проанализировать объект, здесь некоторый код для этого в PHP на основе этого потока;
Обработка данных в объекте JSON PHP
$feedarray = json_decode($json_object);
foreach ( $feedarray->data as $feed_data )
{
echo "<h2>{$feed_data->name}</h2><br />";
echo "{$feed_data->message}<br /><br />";
}
Чтобы узнать, что доступно вам в json-объекте, вы можете вывести URL-адрес в браузере и скопировать/вставить его в этот полезный инструмент визуализации json;
Ответ 2
токен доступа к приложениям Facebook не истекает и не изменяется, если я не вручную reset секрет
Это правильно.
Значки приложений не истекают, если App Secret не является reset. Точки доступа к приложениям уникальны для каждого приложения.
Поскольку в общедоступных каналах используется любой действительный токен доступа, могут использоваться маркеры приложений.
Перейдите в https://developers.facebook.com/tools/access_token, и вам не потребуется поток. Тогда вы можете просто запрограммировать его. В момент, когда вы reset секрет, этот метод недействителен.
$access_token = '1111111111|2Cha_1-n5'
$graph_url = "https://graph.facebook.com/Boo/posts?access_token="
. $access_token;
$page_posts = json_decode(file_get_contents($graph_url), true);
Затем перебираем страницы
foreach($page_posts['data'] as $post){
$post_link = $post['actions'][0]['link'];
$page_id = $post['from']['id'];
$page_name = $post['from']['name'];
$message = ($post['message']) ? $post['message'] : " ";
$name = ($post['name']) ? $post['name'] : " ";
$story = ($post['story']) ? $post['story'] : " ";
$post_time = $post['updated_time'];
}
Ответ 3
В ответ на сообщение @Psyked и @James_David_Low не рекомендуется использовать FQL, поскольку он устарел.
"... Есть два низкоуровневых HTTP-API, которые также используются в Facebook для доступа к графику: FQL и API Legacy REST. Эти API-интерфейсы содержат схожие и перекрывающиеся функции, но устарели."
Новые функции обычно доступны только в Graph API. Чтобы ваше приложение было надежным для будущего, вы должны использовать Graph API в своем приложении, если сможете.
Ответ 4
Принятый ответ не обеспечивает динамический способ получения профиля /IDI или даже объясняет, как его получить. Проверьте мой ответ/вопрос. По моему опыту, принятый ответ также ошибочен в том, что он требует фигурных скобок вокруг app-id
и app-secret
. У меня возникла ошибка, когда я включил их, и это сработало с ними.
Это не получается проще.
Ответ 5
Если вы хотите использовать ссылку на страницу (например, собственную ленту страницы) в приложении для показа ее другим. Просто используйте свой собственный access_token, чтобы получить его.
НО!, поскольку он не считается хорошей практикой, вы также можете войти в систему с помощью страницы или приложения и использовать их access_token.
Для получения дополнительной информации, пожалуйста, прочитайте официальную документацию для проверки подлинности
Ответ 6
Я думаю, для этого вам нужно использовать FQL не просто Graph API. Это то, что я делаю (замените PAGE_ID
на идентификатор вашей страницы, сохраните кавычки):
SELECT post_id, created_time, type, message, attachment
FROM stream
WHERE source_id = 'PAGE_ID'
AND actor_id = source_id