MintState WebLog

facebook API for PHP 본문

Tech

facebook API for PHP

MintState 2012.05.12 10:00

PHP를 이용하여 facebook의 API를 이용 서비스 하는 방법을 알아 보겠습니다.

 

오래전에 twitter에 대한 API는 글을 쓴적이 있는데 이번에는 facebook에 대한 글입니다.

 

트위터와 마찮가지로 facebook도 다양한 API를 지원하고 있습니다. 너무 많아서 탈이죠 ^^;

우선 페이스북 계발자 페이지를 접속해 보세요. 많은 예제들과 API를 소개 하고 있습니다. 문론 영어 때문에 앞이 캄캄하죠 ㅠㅠ;

영어도 문제지만 너무 많은 API때문에 내가 필요한 정보를 딱 하고 찾지 못하는 것이 더 문제인 것 같습니다.

하여간 계발자 페이지(http://developers.facebook.com/)를 접속해 보세요.

 

http://developers.facebook.com/docs/guides/web/ 페이지에 보시면 다양한 예제와 설명이 나와 있습니다.

코드가 있으니 한번씩 해보시면 되겠죠!!

 

제가 이야기 할 내용은 인증을 통해 여러가지 서비스를 할 기본을 알려 드릴까 합니다.

 

$$ 우선 계발자 페이지 상단 메뉴중에서 Apps를 클릭합니다. 그리고 "Create New App" 버튼을 클릭 하여주세요.

새 App를 만들수 있는 레이어 창이 나타납니다.

App Name에 적당한 이름을 적어 주시고 Continue를 클릭합니다. 보안 그림의 글자를 써주시고 Submit를 누르시면 기본적인 App가 만들어 집니다.

 

 

 

 

만들어진 App 에서 자신에 입맞에 맞게 설정해주시면 됩니다. 아래 Select how your app intergrates with Facebook 이라고 되어 있는 부분은 Facebook에서 각각의 플레폼에 맞게 설정해주는 것입니다.

몇가지 알아보면

Website는 기본적인 자신의 웹사이트에 Facebook을 달때 사용합니다.

App on Facebook는 Facebook 안에 App를 돌리는 것인데 Facebook 안에 Iframe을 이용하여 삽입하는 것입니다. 요즘 많이들 서비스 하고 있죠~~

Page Tab도 비슷합니다. 자신의 Facebook 안에 페이지를 만들어 그안에서 App을 돌리는 것이죠.

Native iOS App은 애플 폰을 위한 App을 만들때 사용하고 Native Android App은 안드로이드 App을 만들때 사용합니다.

 

저는 Website에대해 알아보겠습니다. 여기서 꼭 알아 두어야 할것은 상단에 있는 App ID와 App Secret 입니다.

API를 이용하기 위한 인증 Key라고 보시면 됩니다.

 

$$ 그럼 준비물...

API를 이용하기 위한 SDK 툴이 필요합니다. https://developers.facebook.com/docs/sdks/ 접속해 보시면 각 환경에 맞게 SDK가 제공됩니다. 여기서 PHP SDK를 살펴보죠!

 

You can download the Facebook PHP SDK from GitHub here.

 

facebook-php-sdk-v3.1.1-27.zip

 

필요한 파일은 압축파일 안의 src 폴더안의 파일 3개입니다.

우선 서버에 업로드 하시고 이 sdk를 이용하는 방법을 알아 보겠습니다.

 

$$ 목표

티스토리의 페이스북 플러그인 처럼 처음 한번 페이스북에 로그인하여 인증정보를 디비에 저장한다음 그 정보로 자신의 홈페이지에서 글을 쓰면 페이스북에도 글이 등록되는 서비스 만들기... 정도를 목표로 하겠습니다.

 

$$ Flow

페이스북 로그인 버튼을 클릭 -> 페이스북 로그인 -> 나의 페이스북 App 사용에 동의 -> 로그인 인증 정보 디비에 저장 -> 로그인정보를 이용하여 페이스북에 글보내기

 

1. 로그인 버튼

<input type=button value=" Facebook Loing " onClick="open_facebook();">
<script type="text/javascript">
function open_facebook() {
  var open_facebook = window.open('redirect.php','open_facebook','width=1000,height=530,scrollbars=yes,resizable=no');
  open_facebook.focus();
}
</script>

 

2. 페이스북 App 인증

위에서 만든 버튼을 크릭하면 "redirect.php" 페이지가 열립니다. 이곳에서 로그인에 관한 모든것이 이루어 집니다.

자 하나하나씩 살펴 보겠습니다.

< 로그인 클릭 > 하면 팝업창이 뜨겠죠~ "redirect.php" 에서 로그인 페이지로 리다이렉트 됩니다. 우선 로그인 합니다.

 

로그인을 하면 아래와 같이 요청된 App의 정보가 나옵니다. 노란색 부분이 사용하길 원하는 서비스 퍼미션 입니다.

이건 아래에서 설명합니다. 

 

Go to App 를 누르면 요청된 퍼미션이 나오고 허용을 할껀지를 물어봅니다. 여기서 Allow를 클릭하면

해당 App 사용이 허용되었다는 정보가 "redirect.php"로 다시 넘어오게 됩니다. 그럼 그정보를 가지고 로그인정보를 디비에 저장하면 됩니다.

 

3. redirect.php 살펴보기

<?php
session_start();

include_once("./src/facebook.php");

$facebook_appId = "App ID"; // App를 등록하고 나면 알수 있는 App ID
$facebook_secret = "App Secret"; // App를 등록하고 나면 알수 있는 App Secret

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

 

// Get User ID
$user = $facebook->getUser(); // App에 로그인이 되어 있는지 확인하기 위해서 유저의 정보를 요청합니다.

// Login or logout url will be needed depending on current user state.
if ($user) { // 만일 유저정보가 있다면 해당정보 디비에 입력
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me'); // 유저 프로필을 가져 옵니다.
    $_mb_facebook_access_token = "fb_".$facebook_appId."_access_token"; // 토큰ID
    $_mb_facebook_user_id = "fb_".$facebook_appId."_user_id"; // 유저ID
    // 페이스북에서는 로그인정보(access_token, user_id)가 fb_App ID_access_token 형식으로 세션에 저장됩니다.

 

    // 로그인정보(access_token, user_id)와 유저 프로필 디비에 저장 하고 창닫기
    $up = mysql_query("UPDATE `member` SET
       mb_facebook_access_token='".trim($_SESSION[$_mb_facebook_access_token])."',
       mb_facebook_user_id='".trim($_SESSION[$_mb_facebook_user_id])."',
       mb_facebook_username='".mysql_real_escape_string($user_profile[username])."',
       mb_facebook_name='".mysql_real_escape_string($user_profile[name])."',
       mb_facebook_link='".mysql_real_escape_string($user_profile[link])."'
      WHERE mb_id='".$mb[mb_id]."' ");
    echo "<script>window.close()</script>";
  } catch (FacebookApiException $e) {
    //error_log($e);
    $user = null;

    $loginUrl = $facebook->getLoginUrl( array(
      'scope' => 'email,offline_access,publish_stream,user_birthday,user_location,user_work_history,user_about_me,user_hometown,user_photos,publish_actions,read_stream,friends_likes'
    ));
  }
} else { // 만일 유저정보가 없다면 페이스북 로그인 URL을 생성
  $loginUrl = $facebook->getLoginUrl( array(
    'scope' => 'email,offline_access,publish_stream,user_birthday,user_location,user_work_history,user_about_me,user_hometown,user_photos,publish_actions,read_stream,friends_likes'
  ));
}


// 로그인이동
header('Location: '.$loginUrl);
exit;
?>

 

여기서 알아 둘것은 getLoginUrl 에서 'scope' 부분입니다. Permissions Reference 에 자세하게 나와 있습니다. 잘 이해는 안가지만.... 예를 들어 publish_stream 는 글을 쓸수 있는 권한입니다.

자신이 필요한 퍼미션을 써주시면 됩니다.

 

$$ 해당 로그인 정보로 글보내기

입력해둔 디비에서 로그인정보를 이용하여 세션을 구워줍니다.

위 소스에서 보듯이 "$_SESSION[fb_App ID_access_token]" 과 "$_SESSION[fb_App ID_user_id]" 2개 입니다.

 

먼저 세션을 구워주고 아래와 같이 글보내는 스크립트를 만들어 주시면됩니다. 이것은 응용을 하시면 됩니다.

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

// Login or logout url will be needed depending on current user state.
if ($user) {
 try {

  // 글 보내기
  $ret_obj = $facebook->api('/me/feed', 'POST',
   array(
    'message' => "Enjoy~~ MintState WebLog",
    'link'    => 'http://blog.yesyo.com',
    'picture' => 'http://yesyo.com/images/blog_logo.jpg',
    'name'    => 'MintState',
    'description'=> 'MintState 블로그 blog.yeso.com 입니다!'
   ));
  echo '<pre>Post ID: ' . $ret_obj['id'] . '</pre>';
 } catch (FacebookApiException $e) {
  //error_log($e);
  $user = null;
  echo "에러";
 }
}

 

 

지금까지 간단하게 나마 facebook API에 대해서 알아보았습니다.

그러나 이렇게 글쓰는데도 엄청 시간이 걸리는 군요 ㅜㅜ;

 

잘만 활용하면 응용할곳은 많습니다. 요즘은 규모가 있는 왠만한 홈페이지에서는 트위터, 페이스북, 요즘등의 SNS와 연결되는 서비스를 합니다.

 

이렇게 프로그램을 이용하지 않고서라도 페이스북은 Social Plugins를 제공하니 한번쯤 살펴보세요. 잼나는 기능들이 많습니다.

 

보탬이 되셨다면 추천과 Like 한방씩 부탁드려요~~~~

 

11 Comments
  • 프로필사진 zgabriel 2012.07.09 17:01 신고 먼저 세션을 구워주고 글을 보낸다고 했는데 세션을 굽는다는 의미를 모르겠네요.

    $fb_1234_access_token="1234";
    $fb_1234_user_id="1234";
    session_register(fb_1234_access_token,fb_1234_user_id);

    이런 식으로 세션을 등록해 놓으면 로그인을 하지 않아도 로그인 처리가 된다는건가요?

    자동 로그인 처리에 대해서 알고싶습니다
  • 프로필사진 Favicon of http://blog.yesyo.com BlogIcon MintState 2012.09.05 16:37 신고 토큰만 알면 나중에 재 로그인 됩니다.
    정확히 말하면 로그인이 아니라 인증입니다.
  • 프로필사진 SODAN 2012.10.16 15:14 신고 먼저 세션을 구워주고 아래와 같이 글보내는 스크립트를 만들어 주시면됩니다. 이것은 응용을 하시면 됩니다.

    저도 이부분이 이해가 가지 않습니다. 좀 자세히 설명해 주시면 안될까요 ?
    또 하나 글보내기 소스는 Facebook Loing 과 같이 있으면 되는 건가요 ?
  • 프로필사진 크크다스 2012.10.23 19:00 신고 개발이 안되서요
    급하게 질문 드려요
    로그아웃을 수행해도 다시 로그인시 로그인창이 안뜨고 그대로 로그인 되어서 다른 아이디로 로그인을 할수가 없는데
    오나전히 로그아웃 시키느 방법이 있나요?
    구글을 봐서 적용해도 잘 안되네요 부탁좀 드립니다.
  • 프로필사진 질문 2012.11.01 17:36 신고 저 SDK 안에 살펴봐도 redirect.php는 없던데..

    어디에 있는건가요?
  • 프로필사진 satang 2012.12.04 18:06 신고 궁금한게 있는데요.
    페이스북의 뉴스피드나 게시글을 불러오려고 하는데요.
    쿼리를 날리려면 무조건 로그인을 해야 불러오더라구요.
    그렇게 하지 않고 fql을 이용해서 뉴스피드를 가져올 수는 없나요?
  • 프로필사진 thav 2013.02.26 20:03 신고 로그아웃 하는 법도 알려주세요`^^ 너무 잘봤습니다. 감사감사~~^^
  • 프로필사진 kangsai 2013.05.08 16:16 신고 일단 레퍼런스 올려주셔서 감사드립니다.
    참고하여 제작하고 올려드립니다.
    세션구울때 본인의 앱아이디만 대입하고 나머지는 형식 그대로 유지되야합니다.

    로그인

    $_SESSION[fb_앱아이디_access_token] = $_mb_facebook_access_token; // $_mb_facebook_access_token = DB에저장된 토큰
    $_SESSION[fb_앱아이디_user_id] = $_mb_facebook_user_id; // $_mb_facebook_user_id = DB에저장된 아이디

    이렇게 구워주시면 로그인입니다.

    로그아웃은 세션 지워주시면됩니다.

    unset($_SESSION[fb_앱아이디_access_token]);
    unset($_SESSION[fb_앱아이디_user_id]);
  • 프로필사진 hanoora 2013.06.25 12:27 신고 좋은자료 감사합니다. 많은 도움이 되었습니다.
  • 프로필사진 LoLo 2013.10.02 06:19 신고 페이스북 연동 첫인증을 마친 회원이 A사이트에 로그인할때 페이스북도 자동으로 로그인되게 할수 있는 방법 있나요?
  • 프로필사진 Favicon of http://blog.yesyo.com BlogIcon MintState 2013.10.04 10:31 신고 제가 알기로는 그런 방법은 없는걸로 알고 있습니다.
댓글쓰기 폼