使用Facebook开发人员API访问用户的朋友信息

时间:2011-10-04 09:35:56

标签: php html facebook api

我目前正在开发一个网站,允许用户通过Facebook登录,并从中获取他们在我的网站上使用的所有信息。

例如,如果他们是单身,或者他们对女性男性或两者都感兴趣。

我一直在寻找网站的Facebook开发者方面,并且有一些示例代码用于获取他们喜欢的电影的信息,所以我只是想知道是否有可能改变并适应我的内容需要。

以下是我在此页面中找到的一些代码以及它解释的内容:

http://developers.facebook.com/blog/post/481

<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js#
appId=YOUR_APP_ID&amp;xfbml=1"></script>

<fb:login-button show-faces="true" width="200" max-rows="1" 
perms="user_likes, friends_likes"></fb:login-button>

FB.api('/me/friends', function(response) { });
FB.api(‘/USER_ID/movies’, function(response) { });


FB.api('/'+movieListSorted[i].id, function(response) {
  var newDiv = document.createElement("DIV");
  newDiv.innerHTML = "<img src='"+response.picture+"'></img><br/>";
  if( response.link) {
    newDiv.innerHTML+="<a href='"+response.link+"'>"+response.link
    +"</a><br/>";
    newDiv.innerHTML+='<iframe src="http://www.facebook.com'
    + '/plugins/like.php?'
    + 'href='+response.link+'&amp;layout=standard&amp;'
    + 'show_faces=true&amp;'
    + 'width=450&amp;action=like&amp;colorscheme=light'
    + '&amp;height=80"' 
    + 'scrolling="no" frameborder="0" style="border:none;'
    + 'overflow:hidden;' 
    + 'width:450px; height:80px;" allowTransparency="true">
    + '</iframe><br/>';
  }
  document.getElementById(response.id).appendChild(newDiv);
});


<html> 
<head> 
<title>Test Page</title> 
<script> 
  var movieList = new Array();
  var movieListSorted = new Array();
  var friendCount = 0;
  function showMovies() {
    alert(movieList.length);
  }
  function compareMovies(movieA, movieB) {
    if (movieA.name === movieB.name) return 0;
    if (movieA.name > movieB.name) return 1;
    return -1;
  }
  function popularMovies(movieA, movieB) {
    return movieB.mCount - movieA.mCount;
  }
  function data_fetch_postproc() {
    document.getElementById('test').innerHTML 
      = "Generating recommendations ... ";
    movieList.sort(compareMovies);
    // Now we have sorted list, dedupe and count
    mCtr = 0;
    for (i = 0; i < movieList.length; i++)
    {
      var count = 0;
      movieListSorted[mCtr] = movieList[i];
      for ( j = i; j < movieList.length; j++)
      {
        if ( movieList[i].name === movieList[j].name ) {
          count++;
        } else {
          break;
        }
      }
      i = i+count-1;
      movieListSorted[mCtr++].mCount = count;
    }
    var maxResults = 100;
    if( movieListSorted.length < 100) {
      maxResults = movieListSorted.length;
    } 
    movieListSorted.sort(popularMovies);
    document.getElementById('test').innerHTML = "";
    for( i=0; i<maxResults; i++) {
      var newDiv = document.createElement("DIV");
      newDiv.id = movieListSorted[i].id;
      newDiv.innerHTML = movieListSorted[i].name + ' : Likes - ' 
        + movieListSorted[i].mCount;
      document.getElementById("movies").appendChild(newDiv);
      FB.api('/'+movieListSorted[i].id, function(response) {
        var newDiv = document.createElement("DIV");
        newDiv.innerHTML = "<img src='"+response.picture+"'>"
          + "</img><br/>";
        if( response.link) {
          newDiv.innerHTML+= "<a href='"+response.link+"'>"
            +response.link+"</a><br/>";
          newDiv.innerHTML+= '<iframe src='
            + '"http://www.facebook.com/plugins/like.php?'
            + 'href='+response.link+'&amp;layout=standard'
            + '&amp;show_faces=true&amp;'
            + 'width=450&amp;action=like&amp;'
            + 'colorscheme=light&amp;height=80"' 
            + 'scrolling="no" frameborder="0" style="'
            + 'border:none; overflow:hidden;' 
            + 'width:450px; height:80px;"'
            + 'allowTransparency="true"></iframe><br/>';
        }
        document.getElementById(response.id).appendChild(newDiv);
      });
    }
  }
  function get_friend_likes() {
    document.getElementById('test').innerHTML = "Requesting "
      + "data from Facebook ... ";
    FB.api('/me/friends', function(response) {
        friendCount = response.data.length;
        for( i=0; i<response.data.length; i++) {
          friendId = response.data[i].id;
          FB.api('/'+friendId+'/movies', function(response) {
            movieList = movieList.concat(response.data);
            friendCount--;
            document.getElementById('test').innerHTML = friendCount 
              + " friends to go ... ";
            if(friendCount === 0) { data_fetch_postproc(); };
          });
        } 
      });
  }
</script> 
</head> 
<body> 
<div id="fb-root"></div> 
<div id="login"></div> 
<div id="test"></div> 
<div id="movies"></div> 
<script src="http://connect.facebook.net/en_US/all.js"></script> 
<script> 
FB.init({
    appId  : 'YOUR_APP_ID',
    status : true, // check login status
    cookie : true, // enable cookies 
    xfbml  : true  // parse XFBML
  });
FB.Event.subscribe('auth.sessionChange', function(response) {
  window.location.reload();
});
FB.getLoginStatus(function(response) {
  if (response.session) {
    // logged in and connected user, someone you know
    get_friend_likes();
    document.getElementById('login').innerHTML
      ='<a href="#" onclick="FB.logout();">Logout</a><br/>';
  } else {
    document.getElementById('login').innerHTML
      ='<fb:login-button show-faces="true" width="200"' 
      + ' max-rows="1" perms="user_likes, friends_likes">'
      + '</fb:login-button>';
    FB.XFBML.parse();
  }
});
</script> 
</body> 
</html>

2 个答案:

答案 0 :(得分:1)

您是否查看了图谱API:

Facebook Graph API

您还必须确保拥有适当的权限:

Facebook API Permissions

答案 1 :(得分:0)

我建议使用PHP SDK来获取这些信息,特别是如果你是初学者。然后你可以使用它们的功能。

您可以在以下网址找到此源代码(以及一些文档): https://developers.facebook.com/docs/reference/php/

首先,为了从Graph API中获取任何内容,您需要获得应用程序用户的身份验证,这在此处记录:

https://developers.facebook.com/docs/authentication/

然后,您可以使用API​​调用获取有关当前用户的信息。这在此处记录:

http://developers.facebook.com/docs/reference/php/facebook-api/

此处的注释代码如下,我已对其进行了编辑,以提供当前登录用户的'interested_in'字段,如文档here所示:

 try {

        $user_profile = $facebook->api('/me?fields=interested_in','GET');
        echo "Interested in: " . $user_profile['interested_in'];

      } catch(FacebookApiException $e) {
        // Failed API call
        error_log($e->getType());
        error_log($e->getMessage());
      }