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

Получение общедоступных статусов страниц с использованием API-интерфейса Facebook без доступа к токенам

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

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

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

4b9b3361

Ответ 1

Это по замыслу. Когда-то можно было получить последний статус с общедоступной страницы без маркера доступа. Это было изменено, чтобы заблокировать неопознанный анонимный доступ к 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, используя маркер доступа к приложению сверху.

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

Ответ 2

Вы можете использовать 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

Ответ 3

Вы можете получить посты, просто запросив сайт, который запрашивает ваш браузер, а затем извлекая посты из 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);
    }
});

Для получения дополнительной информации: fooobar.com/info/16881525/...