Подтвердить что ты не робот

Можете ли вы получить общедоступную ленту новостей Facebook с помощью Graph API без запроса пользователя?

Я никогда не использовал Facebook Graph API или OAuth. Я просто пытаюсь получить публичный фид страницы Facebook, используя Graph API, но для этого требуется токен доступа. Я не хочу заставлять пользователей входить в систему и разрешать доступ к их токену. Токен доступа к приложениям Facebook можно использовать для получения общего фида, но я пытаюсь сделать это полностью в Javascript, поэтому я не могу использовать секрет приложения для этого. Я где-то читал, что токен доступа к приложениям Facebook не истекает и не изменяется, если я не вручную reset секрет. Это правда? Было бы безопасным только жесткий код в токене доступа? Если нет, можно ли каким-либо образом аутентифицировать приложение, чтобы получить токен без привлечения пользователя? Есть ли какой-то общий токен приложения, который я мог бы использовать?

4b9b3361

Ответ 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;

http://chris.photobooks.com/json/default.htm

Ответ 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'];
}

Источник: http://philippeharewood.com/facebook/how-to-get-facebook-access-tokens-in-php-for-public-posts-the-basic-sauce/

Ответ 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

https://developers.facebook.com/docs/reference/fql/stream/