2012-07-25 116 views
8

我不知道该怎么去问它,但我正在试图自学如何创建一个使用图形API的程序。我见过的大部分教程都比较老,我不知道他们现在的相关程度如何。从本质上讲,我试图让有些人点击我的应用程序的“事情”,它说,这个应用程序想要你的用户名等,然后允许或不允许。如何获取Facebook用户的信息并将其插入数据库?

我希望它获取信息,然后我可以将它插入到数据库中。我使用PHP并拥有一个域。

我可以插入数据没有问题,如果我可以获取数据。我不明白该怎么做。

对于模糊的问题我很抱歉,我已经搜索过。不要求你为我写代码,只要指向正确的方向,也许可以写一个现代教程来做我想问的问题。谢谢。

+0

你有没有在Facebook的PHP SDK中的例子看? – zerkms 2012-07-25 03:23:42

+0

我不认为我知道在哪里看。我只看到了图表api,但无法说明该做什么。 – johnny 2012-07-25 03:25:31

+0

http://developers.facebook.com/docs/reference/php/ – zerkms 2012-07-25 03:26:12

回答

15

(1)从这里创建Facebook应用程序http://developers.facebook.com/apps 并将其配置为您的域。这一步非常简单,把你想要的任何命名空间作为你的应用程序名称,然后检查你的应用程序将被用作应用程序和登录页面(而不是粉丝页面或相关的东西),最后指定URL(将Canvas URL留空),其中你将使用Facebook API(我认为这个URL必须在HTTPS下,但我不知道为什么Facebook仍然允许HTTP,所以不用担心)。

登录配置:

只需在URL中设置:http://yourdomain.com/

应用程序配置:

如:http://www.mydomain.com/myfacebookapp/

因此,当用户进入到:

http://apps.facebook.com/yourappName

意味着他/她真的正在访问第一个链接,并且在那index.php您需要从下面执行所有操作。只需要知道,在这一点上,您还可以为您的应用程序设置一个徽标,管理您的应用程序的管理员并获得您的应用程序ID和秘密,您需要在PHP文件中进一步使用它。

(如果你在这一步,你可以做一个谷歌搜索混淆,这样的配置也容易找到YouTube)的

(2)我一直用这个文件来涉及我的PHP环境与Facebook的API,你可以从这里下载:https://www.dropbox.com/s/itw4pav1f7a9vez/files.rar

(3)将这些文件名为FB文件夹中。

(4)我会告诉你从用户那里获取数据和图片的方法,但首先他/她必须允许你的应用程序通过登录到你的应用程序来获取他/她的信息。所以,在这个例子中,我将使用一个简单的按钮进行登录。

(不要忘了更换您的应用程序ID和秘密 - 'XXX' 和 'YYY')

<?php 

require 'fb/facebook.php'; 

// Create our Application instance (replace this with your appId and secret). 
$facebook = new Facebook(array(
    'appId' => 'xxx', 
    'secret' => 'yyy', 
)); 

// Get User ID 
$user = $facebook->getUser(); 

if ($user) { 
    try { 
    // Proceed knowing you have a logged in user who's authenticated. 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
    } 
} 

// Login or logout url will be needed depending on current user state. 
if ($user) { 
    $logoutUrl = $facebook->getLogoutUrl(); 
} else { 
    $loginUrl = $facebook->getLoginUrl(); 
} 

?> 
<html xmlns:fb="http://www.facebook.com/2008/fbml"> 
    <head> 
    <title>Facebook PHP SDK</title> 
    </head> 
    <body> 
    <h1>Facebook PHP SDK</h1> 

    <?php if ($user): ?> 
     <a href="<?php echo $logoutUrl; ?>">Logout</a> 
    <?php else: ?> 
     <div> 
     Login using OAuth 2.0 handled by the PHP SDK: 
     <a href="<?php echo $loginUrl; ?>">Login with Facebook</a> 
     </div> 
    <?php endif ?> 

    <h3>PHP Session</h3> 
    <pre><?php print_r($_SESSION); ?></pre> 

    <?php if ($user): ?> 
     <h3>You</h3> 
     <img src="https://graph.facebook.com/<?php echo $user; ?>/picture"> 

     <h3>Your User Object (/me)</h3> 
     <pre><?php print_r($user_profile); ?></pre> 
    <?php else: ?> 
     <strong><em>You are not Connected.</em></strong> 
    <?php endif ?> 
</html> 

(5)上面的例子使用了Facebook的PHP SDK没有的JavaScript。因此,如果用户想要登录并授权您的应用获取他/她的信息,整个页面将被重定向到您的应用的Facebook权限页面,然后返回到您的Facebook应用的主页面(在配置时指定你创建了你的应用程序)。

(6)下一个代码将与上面相同,但使用JavaScript和自定义的Facebook登录按钮,允许您在您的问题中编写特殊权限。另一个区别是,弹出窗口将显示而不是重定向整个页面。

(不要忘了更换您的应用程序ID和秘密 - 'XXX' 和 'YYY')

<?php 

require 'fb/facebook.php'; 

$facebook = new Facebook(array(
    'appId' => 'xxx', 
    'secret' => 'yyy', 
)); 

// See if there is a user from a cookie 
$user = $facebook->getUser(); 

if ($user) { 
    try { 
    // Proceed knowing you have a logged in user who's authenticated. 
    $user_profile = $facebook->api('/me'); 
    $logoutUrl = $facebook->getLogoutUrl(); 
    } catch (FacebookApiException $e) { 
    $user = null; 
    } 
} else { 
    $loginUrl = $facebook->getLoginUrl(); 
} 

?> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <title>Facebook PHP SDK</title> 
    </head> 
    <body> 
     <fb:login-button size="small" onlogin="after_login_button()" scope="email, user_about_me, user_birthday, user_status, publish_stream, user_photos, read_stream, friends_likes">Login with facebook</fb:login-button> 
     <div id="fb-root"></div> 
     <script> 
      window.fbAsyncInit = function() { 
      FB.init({ 
       appId: '<?php echo $facebook->getAppID() ?>', 
       cookie: true, 
       xfbml: true, 
       oauth: true 
      }); 

      /* This is used with facebook button */ 
      FB.Event.subscribe('auth.login', function(response) { 
       if (response.authResponse) { 
       // Specify the login page (the page in which your fb login button is situated) 
       window.location = 'main.php'; 
       } 
      }); 
      FB.Event.subscribe('auth.logout', function(response) { 
       window.location = 'logout.php'; 
      }); 
      }; 
      (function() { 
      var e = document.createElement('script'); e.async = true; 
      e.src = document.location.protocol + 
       '//connect.facebook.net/en_US/all.js'; 
      document.getElementById('fb-root').appendChild(e); 
      }()); 

      function after_login_button(){ 
      FB.getLoginStatus(function(response) { 
       if (response.status=="connected") { 
        // If user is connected, redirect to this page 
        window.location = 'main.php'; 
       } 
      }, true); 
      } 
     </script> 
    </body> 
</html> 

(7)正如你所看到的,在范围属性Facebook登录按钮确定您的应用程序需要哪些特殊权限和信息,例如他/她的电子邮件等用户(通常是私人的)。


(8)我想补充的东西,你可以从别人你使用下面的代码知道他/她的ID只获得公共信息:

(假设你的Facebook朋友的页面是:http://www.facebook.com/foobar或类似:http://www.facebook.com/users/profile/1002020300010

//For example: your facebook friend's page is http://www.facebook.com/foobar 
$myFriend = $facebook->api('/foobar'); 
//For example: your facebook friend's page is http://www.facebook.com/users/1002020300010 
$myFriend = $facebook->api('/1002020300010'); 
//Print information like your friend's name: 
echo $myFriend['name']; 
//Print all information captured: 
print_r($myFriend); 

而且让你的朋友的图片:

<img src="https://graph.facebook.com/foobar/picture"> 

或者:

<img src="https://graph.facebook.com/1002020300010/picture"> 

最后,假设你有变量捕获的所有用户的信息,您可以将所有的数据到数据库表没有问题。

希望这有助于:-)

+0

嗨!我已阅读你的答案,我必须感谢你,因为它一直为我学习。我的问题是,我的应用程序无法识别用户登录。我的问题是http://stackoverflow.com/questions/11646494/facebook-login-window-appears-and-disappears-very-quickly。我试过了你发布的第二个代码,但它不起作用。我的意思是,我可以登录,但登录后我无法注销。你知道为什么会发生吗?谢谢@Oscar Jara – honnix 2012-07-25 19:08:43

+0

@oscar非常感谢你的时间。我相信我会多次提及这一点。 – johnny 2012-07-25 23:54:22

+1

梦幻般的答案! – null 2015-09-04 15:17:31

0

考虑到您使用的是Facebook的here提供的PHP SDK类

你可以做这样的事情

$fb = new Facebook(array(
    'appId' => 'YOUR_APP_ID', 
    'secret' => 'YOUR_APP_SECRET' 
)); 


$userData = $fb->api('/me','GET'); 
$userData = serialize($userData); 

//now userdata is a string, so, insert into the database. 

记忆,在你的应用程序configurantion,你必须指定你想要的那种信息来自用户。

1

看起来您正在使用Facebook创建身份验证(登录)。

您可能希望查看Opauth,它会为您处理所有这些问题,并返回数组中的用户信息,然后您可以轻松地将其插入到数据库中。

请参阅http://opauth.org进行快速演示并下载包含示例代码的库。

相关问题