Получите статусы общедоступных страниц, используя Facebook Graph API без Access Token - PullRequest
60 голосов
/ 03 октября 2011

Я пытаюсь использовать Facebook Graph API для получения последнего статуса с общедоступной страницы, скажем, http://www.facebook.com/microsoft

Согласно http://developers.facebook.com/tools/explorer/?method=GET&path=microsoft%2Fstatuses - мне нужен токен доступа. Поскольку страница Microsoft является «общедоступной», действительно ли это так? Разве я не могу получить доступ к этим публичным статусам без маркера доступа?

Если это так, как правильно создать маркер доступа для моего сайта? У меня есть идентификатор приложения, однако все примеры на http://developers.facebook.com/docs/authentication/ описывают обработку входа пользователя. Я просто хочу получить последнее обновление статуса на странице Microsoft и отобразить его на моем сайте.

Ответы [ 3 ]

62 голосов
/ 03 октября 2011

Это по замыслу. Когда-то можно было получить последний статус с общедоступной страницы без маркера доступа. Это было изменено, чтобы заблокировать неопознанный анонимный доступ к API. Вы можете получить токен доступа для приложения (если у вас не установлено приложение Facebook для вашего сайта - вам следует его создать) с помощью следующего вызова с использованием Graph API:

https://graph.facebook.com/oauth/access_token?
client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&
grant_type=client_credentials  

Это называется токен доступа к приложению. Затем вы продолжаете фактический вызов API, используя маркер доступа к приложению сверху.

надеюсь, это поможет

34 голосов
/ 28 января 2016

Вы можете использовать AppID и секретный ключ, чтобы получать публичные сообщения / ленту любой страницы. Таким образом, вам не нужно получать токен доступа. Назовите это как ниже.

https://graph.facebook.com/PAGE-ID/feed?access_token=APP-ID|APP-SECRET

И чтобы получать сообщения.

https://graph.facebook.com/PAGE-ID/posts?access_token=APP-ID|APP-SECRET
0 голосов
/ 12 апреля 2019

Вы можете получить сообщения, просто запросив сайт, который запрашивает ваш браузер, а затем извлекая сообщения из HTML.

В NodeJS вы можете сделать это следующим образом:

// npm install request cheerio request-promise-native
const rp = require('request-promise-native'); // requires installation of `request`
const cheerio = require('cheerio');

function GetFbPosts(pageUrl) {
    const requestOptions = {
        url: pageUrl,
        headers: {
            'User-Agent': 'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:64.0) Gecko/20100101 Firefox/64.0'
        }
    };
    return rp.get(requestOptions).then( postsHtml => {
        const $ = cheerio.load(postsHtml);
        const timeLinePostEls = $('.userContent').map((i,el)=>$(el)).get();
        const posts = timeLinePostEls.map(post=>{
            return {
                message: post.html(),
                created_time: post.parents('.userContentWrapper').find('.timestampContent').html()
            }
        });
        return posts;
    });
}
GetFbPosts('https://www.facebook.com/pg/officialstackoverflow/posts/').then(posts=>{
    // Log all posts
    for (const post of posts) {
        console.log(post.created_at, post.message);
    }
});

Для получения дополнительной информации: https://stackoverflow.com/a/54267937/2879085

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...