BLOG main image
Category (222)
MyThing (21)
Media (16)
이모저모 (30)
Tech (13)
CuteGril (142)
‘자유여행’을 하라! -
도서출판 부키
MS outlook 2010
KyujinessWeek - Season 2
IDG 뉴스레터 | 미리보는 MS 오..
Bluesky
러프 -아다치미츠루
김재호의 디지털보단 아날로그
EP45-UD3R + BOOT-132 + 순정 Le..
Ritz's Home
«   2012/02   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      
82,539 Visitors up to today!
Today 12 hit, Yesterday 97 hit
Twitter rss
A
2010/07/12 08:46
twitter는 간단하면서도 강력한 소셜네트워크 서비스입니다.
프로그램 적으로 본다면 머 별거 없다고 생각하지만 twitter의 아이디어를 보면 정말 대단합니다.
간단한 글을 통해 모든 사람들과 팔로윙(Following,Follower)을통해 연결 된다는 생각 정말 간단하면서도 독창적입니다.
또한 거의 모든기능(회원가입 제외)을 API로 제공하고 있습니다.
http://twtkr.com/  을 봐도 알 수 있습니다. twtkr.com은 twitter가 영어라서 한글로 번역해놓은 사이트 입니다. twitter 사이트랑 똑 같습니다. 몇가지 기능을 더 제공하고 있지만 똑 같다고 보면 됩니다. 모두 twitter에서 제공하는 API를 사용하여 서비스 됩니다.

그럼 나의 사이트에서도 twitter API를 사용하고 싶어지죠...
그런 분들은 위하여... 초보자 분들입니다. 저 또한 초보자 이기 때문에 좀더 쉽고 필요한 기능만 설명하고자 합니다.
twtkr 같은 사이트를 만들려고 사용하지 않는 다면 기능은 거의 정해져 있습니다.
우선 Tistory2Tweet 와 같이 내가 또는 회원이 글을 쓰면 twitter에 같이 포스팅이 되는 기능.
내 Following 가져오기 Following된 글들 가져오기등...

그럼 이런 서비스를 위해서는 무엇이 필요할까요??
지금부터 언급하는 내용은 PHP 기준입니다. 머 다른 언어도 거의 비슷합니다.
우선 PHP가 되야 하겠고 버전은 5.2 이상 권장입니다. 또한 CURL 이 되어야 합니다. phpinfo() 를 이용하여 자신의 환경을 살펴 보시길 바람니다.

Twitter.com에서는 API Doc을 제공합니다.
http://dev.twitter.com/
http://dev.twitter.com/pages/oauth_libraries#php
http://dev.twitter.com/pages/sign_in_with_twitter  - buttons
위 링크를 따라가서 가볍게 읽어 주세요. 그림도 있으니 간략하게만 이해해 주세요. 저도 영어가 딸려서 ㅡㅡㅋ

API을 이용을 편하게 하기 위해 많은 툴(Tools)들이 있습니다. 몇가지를 소개하면 아래와 같습니다.
http://github.com/abraham/twitteroauth
http://github.com/abraham/php-twitter
http://jdp.github.com/twitterlibphp
http://github.com/jmathai/twitter-async
http://code.google.com/p/oauth-php/
http://code.google.com/p/php-twitter/
http://twitter.slawcup.com/twitter.class.phps

이중에서 제가 쓸 툴은 twitter에서도 소개되고 있는 twitteroauth - @abraham's Twitter OAuth library for PHP 입니다.
사이트에서 파일을 받으시면 됩니다. 파일중 필요한것은 아래 파일 정도 입니다.
twitteroauth/OAuth.php
twitteroauth/twitteroauth.php
callback.php
clearsessions.php
config.php
redirect.php

정확히 목표를 정해 놓고 가는 것이 좋겠죠.
목표는 회원제 사이트에서 자신이 쓴글을 twitter에 같이 포스팅 하는 것입니다. Tistory2Twee 같은 기능을 구현 하고자 합니다.

$$ 그럼 처음으로 할일은 twitter에 서비스에 이용될 API KEY를 얻는 것입니다.
twitter에 가입은 필수 이고. http://twitter.com/apps/new 를 열어서 각 필드를 적당히 채워 줍니다.

Callback URL은 정확하게 적어 주세요. 
Save를 크릭하면 사용할 API가 생성 됩니다.

https://twitter.com/apps 를 보면 등록된 모든 API를 볼 수 있습니다.

해당 API(Application)을 클릭하면 API의 상세 항목을 볼 수 있습니다.

상세 항목중에서 필요한것은 Consumer Key 와 Consumer secret 입니다. 또한 API의 Callback URL도 필요합니다.

$$ 소스를 설명하기 앞서 간략하게 어떻게 동작 하는지 설명 하겠습니다.
각각의 회원이 글을 쓰면 각 회원 twitter로 포스팅하기 위해서는 각 회원의 twitter로그인 정보가 있어야 합니다. Tistory2Twee 에서도 한번은 twitter에 로그인을 해주어야 하죠..
twitteroauth를 이용하여 twitter에 로그인시 twitter 회원별로 정해진 oauth_token, oauth_token_secret 값을 알아와 디비에 저장을 합니다. 이 값만 있으면 다음부터는 twitter에 로그인 할 필요가 없습니다. 이 값을 이용하여 자동으로 로그인하는 효과를 볼 수 있는 거죠.
그럼 회원이 어떠한 글을 올리면 내부적 프로그램을 이용하여 자동으로 로그인을 하고 그 회원의 twitter에 글을 올리는 것입니다.

$$ 그럼 먼저 twitteroauth의 환경 설정을 합니다.
config.php 파일을 열어서 CONSUMER_KEY, CONSUMER_SECRET, OAUTH_CALLBACK 을 정확하게 채워 줍니다. 

$$ 회원별 oauth_token, oauth_token_secret 값을 알아 와야 겠죠.
회원이 링크하는 버튼을 하나 만들어서 팝업으로 redirect.php 을 띄웁니다. 800x400정도면 되겠죠.
그럼 twitter에 로그인 하라는 폼이 나올것입니다. 이미 로그인 되어 있으면 아래와 같은 화면이 나타 납니다.

Allow을 눌러야 겠죠... 그럼 자동으로 위에서 등록 시켜 주었던 Callback URL(callback.php)로 정보들을 넘겨 줍니다. 
이 정보를 이용해서 oauth_token, oauth_token_secret 을 알아 내면 됩니다.

callback.php 파일을 살짝 바꿔주면 됩니다.

<?php
/**
 * @file
 * Take the user when they return from Twitter. Get access tokens.
 * Verify credentials and redirect to based on response from Twitter.
 */

/* Start session and load lib */
session_start();
require_once('twitteroauth/twitteroauth.php');
require_once('config.php');

/* If the oauth_token is old redirect to the connect page. */
if (isset($_REQUEST['oauth_token']) && $_SESSION['oauth_token'] !== $_REQUEST['oauth_token']) {
  $_SESSION['oauth_status'] = 'oldtoken';
  header('Location: ./clearsessions.php');
}

/* Create TwitteroAuth object with app key/secret and token key/secret from default phase */
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);

/* Request access tokens from twitter */
$access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);

/* Save the access tokens. Normally these would be saved in a database for future use. */
$_SESSION['access_token'] = $access_token;

/* Remove no longer needed request tokens */
unset($_SESSION['oauth_token']);
unset($_SESSION['oauth_token_secret']);

/* If HTTP response is 200 continue otherwise send to connect page to retry */
if (200 == $connection->http_code) {
  /* The user has been verified and the access tokens can be saved for future use */
  $_SESSION['status'] = 'verified';
 
  // 이부분에 디비 작업을 하시면됩니다.
  $up = mysql_query("update `member_db` set
                          oauth_token='$access_token[oauth_token]',
                          oauth_token='$access_token[oauth_token_secret]',
                          user_id='$access_token[user_id]',
                          screen_name='$access_token[screen_name]'
                     where user='$user' ");
  echo "<script>window.close()</script>";
 
  //echo "<a href='clearsessions.php'>Clear Sessions</a>";
  //header('Location: ./index.php');
} else {
  /* Save HTTP status for error dialog on connnect page.*/
  header('Location: ./clearsessions.php');
}
?>

$$ 그럼 oauth_token 이 등록된 회원이 글을 쓰면 Twitter에 글을 날려야 겠죠.
twitteroauth
에 동봉된 test.php에 모든것이 있습니다.
글을 등록하는 로직 부분이 아래 부분을 추가 하면 됩니다. (예시 입니다. 응용하셔야 합니다.)

<?php
// 회원 디비에서 token값 가져오기
$member = mysql_fetch_array(mysql_query("select * from `member_db` where user='$user' "));

// 포스팅할 글 줄이기
// twitter는 글자수가 140자로 제한 되어 있으므로 포스팅할 글자를 잘라 주어야 합니다.
// 링크주소까지 넣을 려면 약 100자 안팎으로 줄여야 겠죠.
// 링크주소는 http://bit.ly 등으로 줄이시면 됩니다. 이또한 API를 제공합니다.
$msg = str_cut($comment)." ".$short_url;

/* Start session and load lib */
session_start();
require_once('twitteroauth/twitteroauth.php');
require_once('config.php');

// token을 이용하여 twitter에 접근합니다.
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $member['oauth_token'], $member['oauth_token_secret']);

// 글($msg)을 포스팅합니다.
$connection->post('statuses/update', array('status' => $msg));
?>

알고 보면 간단 하죠.

// 자신의 글 가져오기
$connection->get('statuses/home_timeline');
// 친구(following)글 가져오기
$connection->get('statuses/friends_timeline');
// follow user id 가져오기
$connection->get('friends/ids');

test.php파일에 보시면 여러가지 예제가 있습니다. 
하나 하나씩 테스트 해보시면 될 것 같네요.
http://dev.twitter.com/doc/ 의 좌측 메뉴에 적용할 수 있는 모든 목록이 있습니다. 

ps. twitter callback은 xml과 json 파일 모두 지원합니다. 경우에 따라서는 atom, rss도 지원합니다. 사용하기 편한 것으로 사용하세요. 기본으로 받을 형식은twitteroauth/twitteroauth.php 파일에서 설정하시면됩니다.

ps. twitter API는 Request가 제한적입니다.  Request를 늘려주기 위해서 Request whitelisting 에 등록 해주면 됩니다.

저작자 표시 비영리 동일 조건 변경 허락
그냥 가지 마시구 추천 버튼 꾸욱 눌러주세요~ 외로운 블로거에게 큰 힘이 된답니다*^^*
  :   Trackback0 : Comment20
Trackback Address :: http://blog.yesyo.com/trackback/53 관련글 쓰기
baegjins | 2010/07/26 17:32 | PERMALINK | EDIT/DEL | REPLY
찾고있던건데 잘 정리해 주셨네요

복받으실거에요~ ^^

감사합니다.!
Favicon of http://blog.naver.com/ljmgood123 BlogIcon 철마신 | 2010/08/03 13:07 | PERMALINK | EDIT/DEL | REPLY
정말 정리 잘해놓으셨네요.

열심히 찾아 돌아다녔는데 정말 감사합니다.

소중한 자료인줄 알지만, 스크랩해두고 싶어 긁어갑니다.. 출처는 남길테니 문제가 된다면 비공개 또는 삭제 하겠습니다.
Favicon of http://learder.tistory.com BlogIcon learder | 2010/08/03 18:58 | PERMALINK | EDIT/DEL | REPLY
도움되었어요~ ^^ 감사합니다.
Favicon of http://idnine.tistory.com BlogIcon 9름 | 2010/08/09 09:16 | PERMALINK | EDIT/DEL | REPLY
감사합니다. 많은 도움되었습니다.
templer | 2010/10/01 13:49 | PERMALINK | EDIT/DEL | REPLY
정말 많은 도움이 되고 있습니다.
감사합니다.
| 2010/10/19 11:17 | PERMALINK | EDIT/DEL | REPLY
비밀댓글입니다
ddingkka | 2010/12/15 15:40 | PERMALINK | EDIT/DEL | REPLY
댓글 다는 일이 처음인데,

정말 정리 잘 해놓으셨군요. 많은 도움이 되었습니다! ^^
Favicon of http://blog.yesyo.com BlogIcon MintState | 2010/12/17 17:06 | PERMALINK | EDIT/DEL
ㅎㅎ 감사드립니다.
na | 2010/12/21 17:23 | PERMALINK | EDIT/DEL | REPLY
감사합니다. ^^
장길산 | 2010/12/22 20:53 | PERMALINK | EDIT/DEL | REPLY
정리 잘 되었네요.
좋은 정보 감사합니다..^^
test | 2010/12/23 14:59 | PERMALINK | EDIT/DEL | REPLY
오 이런소중한 정보가!
왠만하면 댓글잘안다는데 MintState 님 고맙습니다ㅎㅎ
tom | 2011/01/12 17:36 | PERMALINK | EDIT/DEL | REPLY
정말 도움이 많이 되었습니다 감사합니다
그런데 중간에 이해가 안가는 부분이 하나 있는데
DB작업 할때 사용자 구별을 위해 where user = '$user' 의 부분이 있는데
이 $user가 db의 user필드에 언제 저장이 되고 또 $user가 php 코드 상에 어디에 존재 하는지 모르겠네요..

$access_token, $_SESSION, $_REQUEST등에도 user id나 screen name외 쓰일만한 다른 정보는 없는거 같아서 여쭤봅니다.
Favicon of http://blog.yesyo.com BlogIcon MintState | 2011/01/12 18:29 | PERMALINK | EDIT/DEL
그냥 예를 든것 뿐입니다.
회원 DB가 있을 경우 그 디비를 사용한다는 것입니다.
tom | 2011/01/12 18:48 | PERMALINK | EDIT/DEL
아하... 그렇군요 감사합니다 이해가 갔네요
트위터가어려워 | 2011/03/09 14:51 | PERMALINK | EDIT/DEL | REPLY
감사합니다. 복받으세용!!!
너무 감사하다능 | 2011/03/10 13:08 | PERMALINK | EDIT/DEL | REPLY
찾고 있더 자료인데 감사합니다~
그런데 redirect.php을 호출하면
Call to undefined function curl_init() in /var/www/skin/api/twitter/twitteroauth/twitteroauth.php on line 199

이런 에러가 뜨는데 curl_init() ; 함수는 어디에 붙어있을까요?;;
ㅎㅎ | 2011/04/11 21:23 | PERMALINK | EDIT/DEL | REPLY
감사합니다.
좋은 글이네요
+ | 2011/07/18 14:00 | PERMALINK | EDIT/DEL | REPLY
ㅠㅠ..질문있는데요

일반트위터에서는 잘되는데

https://dev.twitter.com/

여기에서 로그인이막히거든요.. 로그인되려면 어떨절차를밟아야하죠?ㅠ
현수 | 2011/11/24 16:56 | PERMALINK | EDIT/DEL | REPLY
정말 많이 배웠습니다. (__)
111 | 2012/01/03 18:02 | PERMALINK | EDIT/DEL | REPLY
11111
Name
Password
Homepage
Secret