Можете ли вы получить общедоступный канал на Facebook с помощью Graph API, не прося пользователя разрешить? - PullRequest
35 голосов
/ 21 февраля 2012

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

Ответы [ 6 ]

78 голосов
/ 10 июня 2012

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

Вам не нужно тратить весь деньОбходя официальную документацию, задаваясь вопросом, применимо ли к вам что-либо из чего-то такого простого, это довольно просто.Путаница возникает из-за того, что вы предполагаете, что со всеми этими ключами и секретными идентификаторами вам необходимо получить разрешение или аутентификацию на странице 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

6 голосов
/ 27 декабря 2012

Токен доступа к приложению Facebook никогда не истекает и не изменяется, если я не сбросил секрет вручную

Это верно.

Токены приложений не истекают, пока не будет сброшен секрет приложения. Жетоны доступа к приложениям уникальны для каждого приложения.

Поскольку общедоступные каналы принимают любой действительный токен доступа, можно использовать токены приложения.

Перейдите на https://developers.facebook.com/tools/access_token, и вам не потребуется поток. Затем вы можете просто жестко закодировать его. В тот момент, когда вы сбрасываете секрет, этот метод становится недействительным.

$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/

1 голос
/ 28 октября 2015

Принятый ответ не обеспечивает динамический способ получения profileId / pageId и даже не объясняет, как его получить.Проверьте мой ответ / вопрос .Исходя из моего опыта, принятый ответ также неверен, так как требует фигурных скобок вокруг app-id и app-secret.Я получил ошибку, когда включил их, и они сработали с ними.

Это не становится проще, чем это.

1 голос
/ 18 декабря 2012

В ответ на сообщение @Psyked и @James_David_Low не рекомендуется использовать FQL, поскольку оно устарело.

"... Существует два низкоуровневых API-интерфейса HTTP, которые такжеиспользуется в Facebook для доступа к графику: FQL и Legacy REST API. Эти API содержат аналогичные и перекрывающиеся функции, но не рекомендуются. "

Новые функции обычно доступны только в Graph API. Чтобы обеспечить будущее вашему приложению, вы должны использовать Graph API в своем приложении, если можете.

0 голосов
/ 18 августа 2012

Я думаю, что для этого вам нужно использовать 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/

0 голосов
/ 21 февраля 2012

Если вы хотите использовать фид страниц (например, собственный фид страниц) в приложении для показа его другим. Просто используйте свой собственный access_token, чтобы получить его.
НО! , поскольку это не считается хорошей практикой, вы также можете войти в систему с помощью страницы или приложения и использовать их access_token.

Для получения дополнительной информации, пожалуйста, прочитайте официальную документацию по аутентификации

...