MintState WebLog

facebook API for PHP 본문

Develop/PHP

facebook API for PHP

MintState 2012. 5. 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 한방씩 부탁드려요~~~~

 

Comments