일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 |
31 |
- 코친
- 델리
- 일드
- 유사석유 불법거래업체
- 유튜브
- 트위터
- 유사석유
- 토렌트
- torrent
- 트립어드바이저
- 배낭여행
- 채팅
- 주유소
- Login
- 노무현 대통령
- 북한
- 윈도우 7
- 께랄라
- 구글
- 인도
- TripAdvisor
- twitter API
- PHP
- mncast
- 알라뿌자
- Windows 7
- 영화
- 그누보드
- 안드로이드
- MintUTIL
- Today
- 31
- Total
- 1,124,746
MintState WebLog
twitter API for PHP 본문
프로그램 적으로 본다면 머 별거 없다고 생각하지만 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에 로그인 하라는 폼이 나올것입니다. 이미 로그인 되어 있으면 아래와 같은 화면이 나타 납니다.
이 정보를 이용해서 oauth_token, oauth_token_secret 을 알아 내면 됩니다.
callback.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 (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에 모든것이 있습니다.
글을 등록하는 로직 부분이 아래 부분을 추가 하면 됩니다. (예시 입니다. 응용하셔야 합니다.)
// 회원 디비에서 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']);
$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 에 등록 해주면 됩니다.
- Tag
- PHP, twitter API, twitteroauth, 트위터
- 이전 댓글 더보기
-
templer 2010.10.01 13:49 정말 많은 도움이 되고 있습니다.
감사합니다. -
ddingkka 2010.12.15 15:40 댓글 다는 일이 처음인데,
정말 정리 잘 해놓으셨군요. 많은 도움이 되었습니다! ^^ -
MintState 2010.12.17 17:06 신고 ㅎㅎ 감사드립니다.
-
na 2010.12.21 17:23 감사합니다. ^^
-
장길산 2010.12.22 20:53 정리 잘 되었네요.
좋은 정보 감사합니다..^^ -
test 2010.12.23 14:59 오 이런소중한 정보가!
왠만하면 댓글잘안다는데 MintState 님 고맙습니다ㅎㅎ -
tom 2011.01.12 17:36 정말 도움이 많이 되었습니다 감사합니다
그런데 중간에 이해가 안가는 부분이 하나 있는데
DB작업 할때 사용자 구별을 위해 where user = '$user' 의 부분이 있는데
이 $user가 db의 user필드에 언제 저장이 되고 또 $user가 php 코드 상에 어디에 존재 하는지 모르겠네요..
$access_token, $_SESSION, $_REQUEST등에도 user id나 screen name외 쓰일만한 다른 정보는 없는거 같아서 여쭤봅니다. -
MintState 2011.01.12 18:29 신고 그냥 예를 든것 뿐입니다.
회원 DB가 있을 경우 그 디비를 사용한다는 것입니다. -
tom 2011.01.12 18:48 아하... 그렇군요 감사합니다 이해가 갔네요
-
트위터가어려워 2011.03.09 14:51 감사합니다. 복받으세용!!!
-
너무 감사하다능 2011.03.10 13:08 찾고 있더 자료인데 감사합니다~
그런데 redirect.php을 호출하면
Call to undefined function curl_init() in /var/www/skin/api/twitter/twitteroauth/twitteroauth.php on line 199
이런 에러가 뜨는데 curl_init() ; 함수는 어디에 붙어있을까요?;; -
TaeL 2012.04.13 10:44 curl 라이브러리가 설치되어있지 않은 것같네요.
phpinfo()를 통해서 CURL이 설치되어있는지 확인해 보시고, 없으면 설치하셔야합니다.
-
ㅎㅎ 2011.04.11 21:23 감사합니다.
좋은 글이네요 -
+ 2011.07.18 14:00 ㅠㅠ..질문있는데요
일반트위터에서는 잘되는데
https://dev.twitter.com/
여기에서 로그인이막히거든요.. 로그인되려면 어떨절차를밟아야하죠?ㅠ -
현수 2011.11.24 16:56 정말 많이 배웠습니다. (__)
-
111 2012.01.03 18:02 11111
-
kimjeongho 2012.02.07 18:38 이렇게 정리 잘 된 글을 널리 퍼뜨린다는 의미에서 좀 퍼가겠습니다.
감사합니다.
물론 출처 표시! -
영옥 2012.05.04 09:05 평소에 눈팅만하고 잘 댓글을 안남기는 편인데..
정리를 너무 잘해주셔서 고맙다는 표시를 안하고서는 안되겠더라구요..^^
잘 읽었구요..감사합니다. -
좋습니다 ^^ 2012.05.11 10:47 토큰을 디비에 저장하는건 좋군요 ^^*
음.. 디비에 저장해서 쓰든 세션을 쓰든 좋은데,
궁금한것은 왜 팔로우, 팔로워는 100개 밖에 못 긁어오는지요..???
oauth 인증하는데도 100개밖에 못 긁어오는건 ㅠㅠ -
MintState 2012.05.12 00:33 신고 트위터의 정책 때문이 아닐까요??
너무 많이 보내주면 트위터에서도 무리가 있을듯한데.. 먼가 다른 쿼리가 있지것 같은 생각도 드네요 -
황소 2013.12.11 14:15 트위터에 글과 이미지를 같이 올릴 수 있는 방법을 알고 싶어요^^
-
복점 2014.01.24 17:01 php4를위한 라이브러리는 없을까요?
너무 설명 잘해주셨는데 저는 적용을 못해서 힘들어하고 있습니다... -
몽고반점 2015.10.16 11:41 Undefined index: oauth_token 이런 에러는 왜뜰까요?
페이지가 넘어가다가 안넘어가다가 그러는데 안넘어가고 에러뜰때
function getRequestToken($oauth_callback) { 에서
print_r($token) 을 출력해보면 array{} 빈값으로 나오는데 왜이러는지 파악이 잘 안되네요 ㅜ