7

JQuery関数を使用してユーザーのFacebookページへのイベントをプログラムで作成する方法はありますか?次の方法でユーザーにcreate_event権限を要求するアプリを作成しました。

<input type="button" value="Add to Facebook" onclick="document.location='http://www.facebook.com/dialog/oauth?client_id=<AppID>&redirect_uri=<redirecturi>&scope=create_event,offline_access,manage_pages&response_type=token'">

これは、パラメーターaccess_tokenおよびexpires_inを使用してリダイレクトページに正しく戻ります。このページでは、次のコードを使用してデータを解析します(あまりエレガントではありませんが、これをテストとして機能させようとしています)

<script>

$(document).ready(function(){
    var url = window.location.href;
    var fbParameters = url.substring(url.indexOf('#')+1,url.length);
    var accesstoken;    

    if(fbParameters.indexOf("access_token=")>=0){
        accesstoken = fbParameters.substring(fbParameters.indexOf("access_token=")+("access_token=").length,fbParameters.length);
        accesstoken=accesstoken.substring(0,accesstoken.indexOf('&'));
        console.log(accesstoken);
    }

    var params = {'access_token':accesstoken,'name':'test','location':'someplace','start_time':'1322719200'}

    $.getJSON('https://graph.facebook.com/me/events?callback=?',params,function(data){console.log(data)});

});

</script>

また、JQuery $ .postを使用して、このテストイベントの作成を試みるためにURLを手動で入力してみました。これは次を返します:

XMLHttpRequest cannot load https://graph.facebook.com/me/events?. Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin.

また、URLを/ me/eventsではなく/UserID/eventsに変更してみました。Facebookは戻ってきます:

({
    "data": [

    ]
});

URLから「イベント」を削除すると、期待どおりにユーザー情報にアクセスします。私がやろうとしていることが実際に可能かどうか誰かが知っていますか?明らかな何かが欠けているような気がします。

4

2 に答える 2

6

グラフAPIのREST関数の呼び出しは、同じオリジンポリシー( http://en.wikipedia.org/wiki/Same_origin_policy )のため、純粋なJQueryでは実際にはうまく機能しません。

Facebookが提供するJavaScriptSDKを使用することをお勧めします。これは、Facebookドメインでタスクを実行するための非表示のiframeを作成し、認証とイベント受け渡しのすべての問題をうまく処理してイベントをページに戻します。

コードサンプル、ドキュメント、およびスニペットは、Facebook開発者のWebサイト(http://developers.facebook.com/docs/reference/javascript/)およびここ(http://developers.facebook.com/tools/console/)にあります。

たとえば、イベントの作成は次のようになります。

var event = {  
    name: 'Name of your event', 
    description: 'Description of your event',
    location: 'Location of event',                        
    start_time: Math.round(new Date().getTime()/1000.0), // Example Start Date
    end_time: Math.round(new Date().getTime()/1000.0)+86400 // Example End Date
};

FB.api('/me/events', 'post', event, function (result) {
    console.log(result); 
});
于 2011-06-08T13:56:43.140 に答える
0

コードを調べたところ、params変数で「access_token」である必要がある「accesstoken」を使用していることがわかりました。また、$.post を使用して Facebook でイベントを作成します。また、「start_time」には標準の日付/時刻形式を使用します。それが機能するかどうか教えてください。

于 2011-06-08T08:26:20.533 に答える