2010-01-21 4 views
0

A partir de ce très agréable article about doing facebook integration using the javascript API, j'ai réussi à faire plusieurs appels contre l'espace de noms FB.Connect.Impossible de comprendre comment faire des appels contre Facebook ApiClient dans la bibliothèque js

Je suis maintenant intéressé par les appels qui sont dans la bibliothèque FB.ApiClient, et j'ai essayé quelques-uns simples. Je n'arrive pas à faire fonctionner ça, est-ce qu'il y a quelque chose que je dois faire de différent? Plus précisément, je voudrais faire des appels contre les méthodes events_get.

Documentation:

code:

JavaScript travail:

function updateStatus() { 
     FB.Connect.streamPublish(); 
    } 

Erreur: FB.ApiClient.get_apiKey est pas une fonction

function getEventInfo() { 
     FB.ApiClient.get_apiKey(); 
    } 

Répondre

1

l'espace de noms et les méthodes sont incompatibles dans la façon dont ils sont nommés et utilisés. Pour accéder à l'apiClient, vous devez utiliser FB.Facebook.apiClient.

En bref. Au lieu d'appeler:

FB.apiClient.get_apiKey(); 

appel:

FB.Facebook.apiClient.get_apiKey(); 

Ci-dessous, j'ai inclus un exemple complet, où je travaillais plusieurs méthodes sur les API Connect et ApiClient. Cela fonctionne à partir du 22/01/09.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml"> 
<body> 
<a target="_blank" href="http://developers.facebook.com/docs/?u=facebook.jslib">Facebook JavaScript API Documentation</a> 
<div id="comments_post"> 
    <h3>Post a comment to your Facebook Feed:</h3> 

    Demonstration to show what can be done with Facebook Connect, using the javascript API 

    <form name="comment_form" method="POST"> 
     <div id="user"> 
      Name: <input name="name" size="27"><br /> 
      <fb:login-button length='long' onlogin="update_user_box();"></fb:login-button> 
     </div> 

     <br /><textarea name="comment" rows="5" cols="30"></textarea> 

     <br /><input type="button" onclick="submit_comment();" value="Submit Comment"> 
     <br /><input type="button" onclick="updateStatus();" value="updateStatus"> 
     <br /><input type="button" onclick="updateStatusWithImage();" value="updateStatusWithImage"> 
     <br /><input type="button" onclick="postToFriendsWall();" value="postToFriendsWall"> 
     <br /><input type="button" onclick="postAnImage();" value="postAnImage"> 
     <br /><input type="button" onclick="alert(FB.Connect.get_loggedInUser());" value="get logged in user id"> 
     <br /><input type="button" onclick="getFriends()" value="get friends"> 
     <br /><input type="button" onclick="getEventMembers()" value="get event members"> 
     <br /><input type="button" onclick="getEventInfo()" value="get event info"> 

     <div id="profile_pics"></div> 

    </form> 
</div> 

<script type="text/javascript"> 
    function update_user_box() { 
     var user_box = document.getElementById("user"); 

     user_box.innerHTML = 
      "<span>" 
      + "<fb:profile-pic uid='loggedinuser' facebook-logo='true'></fb:profile-pic>" 
      + "Welcome, <fb:name uid='loggedinuser' useyou='false'></fb:name>" 
      + "</span>"; 

     FB.XFBML.Host.parseDomTree(); 
    } 

    function update_user_not() { 
    } 

    function submit_comment() { 

     comment_text = document.getElementsByName("comment")[0].value; 

     var template_var = { "post-title": "pakt.com", 
      "post-url": "http://www.pakt.com/pakt/?id=ce00f49ed79e17aa&t=How_to_add_Facebook_Connect_to_your_website", 
      "comment-text": comment_text, 
      "images": [{ "src": "http://images.pakt.com/images/user/chris/thumb_chris_5df0eb914796c68.jpg", "href": "http://www.pakt.com/pakt/?id=ce00f49ed79e17aa&t=How_to_add_Facebook_Connect_to_your_website"}] 
     }; 

     FB.Connect.streamPublish(comment_text); 
    } 

    function ClearComments() { 
     document.getElementsByName("comment")[0].value = ""; 
    } 

    function updateStatus() { 
     FB.Connect.streamPublish(); 
    } 
    var attachment = { 'media': [{ 'type': 'image', 
     'src': 'http://bit.ly/AJTnf', 
     'href': 'http://bit.ly/hifZk'}] 
    }; 
    function updateStatusWithImage() { 

     FB.Connect.streamPublish('', attachment); 
    } 

    function postToFriendsWall() { 


     FB.Connect.streamPublish('enjoying the Facebook javascript API much better than other versions', attachment, null, 1578234238); 
    } 

    function postAnImage() { 
     function stream_callback(post_id, exception) { 
      if (post_id) { 
       post_to_my_server(post_id); 
      } 
     } 

     FB.Connect.streamPublish('', attachment, null, null, 
        'What do you think?', 
        stream_callback); 
    } 

    function getLoggedInUser() { 
     var id = FB.Connect.get_loggedInUser(); 
     alert(id); 
    } 

    function getFriends() { 
     var widget_div = document.getElementById("profile_pics"); 
     FB.ensureInit(function() { 

      FB.Facebook.apiClient.friends_get(null, function(result) { 
       var markup = ""; 
       var num_friends = result ? Math.min(10, result.length) : 0; 
       if (num_friends > 0) { 
        for (var i = 0; i < num_friends; i++) { 
         markup += 
        '<fb:profile-pic size="square" uid="' 
        + result[i] 
        + '" facebook-logo="true">' 
        + ' </fb:profile-pic>'; 
        } 
       } 
       widget_div.innerHTML = markup; 
       FB.XFBML.Host.parseDomElement(widget_div); 
      }); //end of friends_get 
     }); //end of ensureInit 
    } 

    function getEventMembers() { 
     var widget_div = document.getElementById("profile_pics"); 
     FB.ensureInit(function() { 

      FB.Facebook.apiClient.events_getMembers(53288226963, function(result) { 
       var markup = ""; 
       var num_friends = result ? Math.min(10, result.attending.length) : 0; 
       if (num_friends > 0) { 
        for (var i = 0; i < num_friends; i++) { 
         markup += 
        '<fb:profile-pic size="square" uid="' 
        + result.attending[i] 
        + '" facebook-logo="true">' 
        + ' </fb:profile-pic>'; 
        } 
       } 
       widget_div.innerHTML = markup; 
       FB.XFBML.Host.parseDomElement(widget_div); 
      }); //end of friends_get 
     }); //end of ensureInit 
    } 

    //this one doesn't work. don't know why yet. 
    function getEventInfo() { 
     var widget_div = document.getElementById("profile_pics"); 
     var eids = new Array(); 
     eids.push(53288226963); 

     FB.Facebook.apiClient.events_get('', eids, 0, 0, 'attending', function(result) { 
      var markup = ""; 
      var num_friends = result ? Math.min(10, result.attending.length) : 0; 
      if (num_friends > 0) { 
       for (var i = 0; i < num_friends; i++) { 
        markup += 
        '<fb:profile-pic size="square" uid="' 
        + result.attending[i] 
        + '" facebook-logo="true">' 
        + ' </fb:profile-pic>'; 
       } 
      } 
      widget_div.innerHTML = markup; 
      FB.XFBML.Host.parseDomElement(widget_div); 
     }); //end of friends_get 

    } 
</script> 
<script type="text/javascript" src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" mce_src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php"> </script> 
<script type="text/javascript"> 
    var api_key = "de57fdca3c665931e2a6b411f90a1cb4"; 
    var channel_path = "xd_receiver.htm"; 
    FB.init(api_key, channel_path, { "ifUserConnected": update_user_box }); 
</script> 
</body> 
</html> 
0

est-FB.ApiClient défini? Avez-vous essayé de l'entourer d'un appel FB_RequireFeatures et de vous assurer qu'il est initialisé? Par exemple.

FB_RequireFeatures(["Api"], function(){ 
      FB.Facebook.init('b9d3cab9951682757d0488290545d854', 'xd_receiver.htm'); 
      FB.Facebook.get_sessionState().waitUntilReady(function(){ 
       FB.Facebook.apiClient.friends_get(null, function(result, ex) { 
        alert(result) 
       }); 
     }); 
+0

Il semble être défini. J'ai changé la capitalisation sur ApiClient à apiClient, et la nouvelle erreur est que FB.apiClient est indéfini. J'ai essayé d'utiliser votre code ci-dessus, mais j'ai eu la même erreur. Substance 'api_key' pour ma propre api_key, et chemin pour mon propre chemin. – MedicineMan

+0

J'ai édité ma réponse à quelque chose que j'ai réussi à obtenir pour l'appel à l'API friends_get - donc tous les autres devraient suivre. –

+0

merci de l'avoir posté. Une idée de pourquoi vous appelez FB.Connect.streamPublish vs FB.Facebook.apiClient.friends_get? C'était vraiment déroutant et très frustrant. J'ai vu que tu travailles pour SocialCash. J'ai vu que SocialCash maintient un wrapper .NET pour Facebook. Comment est leur wrapper .NET par rapport à celui sur: www.codeplex.com/FacebookToolkit? J'ai eu beaucoup de problèmes en utilisant celui sur codéplex et finalement l'ai simplement laissé tomber et suis allé la route de javascript. – MedicineMan

Questions connexes