web-dev-qa-db-ja.com

アクセストークンなしでFacebook Graph APIを使用して公開ページのステータスを取得する

Facebook Graph APIを使用して公開ページから最新のステータスを取得しようとしています。たとえば、 http://www.facebook.com/Microsoft

http://developers.facebook.com/tools/Explorer/?method=GET&path=Microsoft%2Fstatuses -アクセストークンが必要です。 Microsoftページは「公開」されているので、これは間違いなく事実ですか?アクセストークンなしでこれらのパブリックステータスにアクセスする方法はありませんか?

この場合、Webサイトのアクセストークンを作成する正しい方法はどのようになりますか?私はアプリIDを持っていますが、 http://developers.facebook.com/docs/authentication/ のすべての例では、ユーザーログインの処理について説明しています。マイクロソフトのページで最新のステータス更新を取得して、自分のサイトに表示したいだけです。

62
christofr

これは仕様です。アクセストークンなしで公開ページから最新のステータスを取得することが可能になりました。 APIへの匿名の匿名アクセスをブロックするために変更されました。グラフAPIを使用した次の呼び出しで、アプリケーションのアクセストークンを取得できます(WebサイトにFacebookアプリケーションが設定されていない場合は作成する必要があります)。

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

これはアプリアクセストークンと呼ばれます。次に、上記のアプリアクセストークンを使用して実際のAPI呼び出しを続行します。

お役に立てれば

62

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
34
Hassan Siddique

ブラウザーが要求するサイトを要求し、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

0
Forivin