2011-06-29 3 views
2

私はfb.apiを使用してログに記録したユーザーに投稿したいですが、一度だけ投稿します。私がこれを置く場合Fb.apiログイン時のみユーザーの壁に投稿

var params = {}; 
params['message'] = 'gegeegeggegall! Check out www.facebook.com/trashcandyrock for more info.'; 
params['name'] = 'gegeggeeg - gegegege'; 
params['description'] = 'Check out Tegegegeg! Win merch by playing and reccomending to your friends.'; 
params['link'] = 'http://www.bblblba.com'; 
params['picture'] = 'http://summer-mourning.zoocha.com/uploads/thumb.png'; 
params['caption'] = 'Tgegegegeeg'; 

FB.api('/me/feed', 'post', params, function(response) { 
    if (!response || response.error) { 
    alert('Error occured'); 
    } else { 
    alert('Published to stream - you might want to delete it now!'); 
    } 
}); 

彼はサイトをリフレッシュするたびに壁に投稿しますか?

どうすればよいですか?

答えて

1

FB.apiコールをトリガーする要因は何ですか?タグ内の単なるコードであれば、ブラウザがその点に達するとすぐに実行されます。

FB.apiコールの後に何らかのクッキー値などを格納して、それをページロード時にチェックすることもできますが、おそらく必要以上に多くの作業があるようです。

1

あなたは彼にそれを一度だけ投稿してもらいたいですか?

もしそうなら、「状態」を作成する必要があります。これを行うには、クライアントサイド(クッキー付き)またはサーバー側(データベース付き)を行うことができます。

"posted"という名前のブール変数を作成し、クッキーまたはデータベースに格納します(javascriptを使用しているので、おそらくクッキーを使用する方が簡単でしょう)。ますsetcookieとgetCookieの

var posted=getCookie("posted"); 
if(!posted) 
{ 
    //call the FB.api(); 
    setCookie("posted", true, duration); 
} 

定義:http://www.w3schools.com/JS/js_cookies.asp

+0

私はむしろクッキーなしで行うことが可能ですか?ユーザーの壁に投稿する必要があるとしましょう。ユーザーが壁に投稿できるようにするには、ボタンをクリックする必要があります。だから私は彼が私のゲームを受け入れて初めて彼の壁に掲示したい。私はここに何かを逃していますか私はこれを違うはずか? – Markus

+0

この場合、コードを(関数として)実行するイベントをそのボタンに追加する必要があります。 しかし、ユーザーがゲームを複数回行うと、プレイするたびに壁に投稿する予定ですか?そうでない場合は、ある点として「状態」を作成する必要があります。この方法を使用すると、あなたが既に投稿した壁を状態サーバー側で作成し、それらに再度投稿しないようにするのが最善です。 – Jim

0

あなたは、FQLクエリを実行し、メッセージがすでにアプリのIDでストリームテーブルを照会することにより、投稿されているかどうかを確認できます。何かのように:

<!DOCTYPE html> 
<html> 
<body> 
<div id="fb-root"></div> 
<a href="#" onclick="postToWall();return false;">Post To Wall</a> 
<script src="http://connect.facebook.net/en_US/all.js"></script> 
<script> 
    FB.init({ appId : '**yourAppID**', status : true, cookie : true, xfbml : true }); 

    function postToWall() { 
    FB.login(function(response) { 
     if (response.session) { 
     FB.api(
      { 
      method: 'fql.query', 
      query: 'SELECT post_id, message from stream where app_id = **yourAppID** and source_id = me()' 
      }, 
      function(response) { 
      if(response.length == 0){ 
       FB.ui(
       { 
       method: 'feed', 
       name: 'Facebook Dialogs', 
       link: 'https://developers.facebook.com/docs/reference/dialogs/', 
       picture: 'http://fbrell.com/f8.jpg', 
       caption: 'Reference Documentation', 
       description: 'Dialogs provide a simple, consistent interface for applications to interface with users.', 
       message: 'Facebook Dialogs are easy!' 
       }, 
       function(response) { 
       if (response && response.post_id) { 
        alert('Post was published.'); 
       } else { 
        alert('Post was not published.'); 
       } 
       } 
      );   
      } 
      else { 
       alert('User already posted this message'); 
      } 
      } 
     ); 
     } 
    } , {perms:''}); 
} 
</script> 
</body> 
</html> 
関連する問題