0

私はjavascript sdkを使用しており、Facebookアカウントからパブリックポストを取得しようとしています。 これは、私がajaxを設定し、アクセストークンを取得するために使用するコードです(プログラムが自分のコンピュータ上で実行され、クライアントが公開されていないため、要求に私のアプリの秘密を使用します)。Facebookのポストリクエストが時々私にポストを取得し、ときどき(非常に奇妙な)

<head> 
    <title>Hopfully Facebook</title> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">//connect to ajax</script> 
</head> 
<body> 
<script> 
var token; 
$.ajax({url: "https://graph.facebook.com/oauth/access_token?\client_id=APPID&client_secret=APPSECRET&grant_type=client_credentials", 
    success: function(result){ 
     token = result.access_token; //in this var the access_token is stored 
}); // end of the access_token request 
</script> 

これは、javascript sdkの設定と最初の投稿のmesasgeのリクエストです。

<script> 
     window.fbAsyncInit = function() { 
FB.init({ 
    appId  : 'APPID', 
    xfbml  : true, 
    version : 'v2.9' 
}); //setting up the javascript sdk 

var firstPostId; 

FB.api(
     ('/AviBitterOfficial/posts?access_token='+token), 
     'GET', 
     { "limit" : "1"}, 
     function(response) { 
console.log(response); 
firstPostId = JSON.stringify(response.data[0].id); 
firstPostId = firstPostId.substring(1, firstPostId.length -1); 

    FB.api(         // the second call is in the first call's call back in order to bypass the async problem 
    ('/'+ firstPostId+'?access_token='+token), // that the second call has initialized before the first call back 
    'GET', 
    {"fields":"message"}, 
     function(response) { 
      alert(response.message); 
     } 
    ); 
     } 
); 

}; 

     (function(d, s, id){ 
var js, fjs = d.getElementsByTagName(s)[0]; 
if (d.getElementById(id)) {return;} 
js = d.createElement(s); js.id = id; 
js.src = "//connect.facebook.net/en_US/sdk.js"; 
fjs.parentNode.insertBefore(js, fjs); 
     }(document, 'script', 'facebook-jssdk')); 
    </script> 

プログラムを実行するたびに、同じキーが生成されますが、問題は少し変です。投稿のテキストを取得するためにトークンを使用すると、投稿のテキストを取得するときにコールを発信してテキストを表示することがありますが、「無効なOAuthアクセストークン」というエラーが表示されることがあります。コード109. これは、api呼び出しが成功し、両方の時間にエラーが発生し、トークンが同じで、それ以外のものもすべて同じであることの両方が原因で変です。 誰にも提案はありますか?

答えて

1

トークンを取得するAJAX呼び出しが、JS SDKを読み込むよりも速い場合があります。そのようなことをシーケンスで行う必要があることがあります。今すぐあなたは同時に、非同期にそれを行います。

とにかく(なぜ、あなたは単純なAJAX呼び出しでjQueryを使用しているのですが、それは別の話です)、なぜかあなたはそのAJAX呼び出しを行うのか分かりませんが、APPトークンを取得するには、 IDとApp Secretのパイプ記号:App-ID|App-Secret - あなたはそのサーバー側だけを行うべきです。しかし、多くのユーザーがあなたのページにヒットした場合は、キャッシュを含めるために、ほとんどのコードをサーバーに移動する必要があります。

+0

@luschm私はネットでのプログラミングに非常に新しいので、私は私がshoudn't代をやっているかもしれませんが、私はいくつかの記事とその情報を取得する必要があると私は私が持っていないと思います近い将来このようなことをしてください。私はapiが非同期であるために起こっている問題についてあなたが思っています、とにかく私が作る呼び出しの順序を制御することを知っていますか? –

+0

ajax呼び出しをfbAsyncInitコールバック関数に置き、残りの部分を成功のコールバックで実行します。 – luschn

+0

はあなたを行うことが私はそれのすべてのラウンドでの要求を行うループを持っていますが、理由は、APIのasynchronousityの、要求が間違った順序で実行されている私のコードの残りの部分に:)働いていた、どうもありがとうございましたそれを修正する方法を知っていますか? –

関連する問題