NodeJS 홈페이지
NPM Twitter-API 홈페이지
또한 인증을 하는 방법과 url에 대해서는 dev.twitter.com 에서 검색을 해 보는 것이 좋을 것이다.
RequestToken 을 요청하는 부분과 AccessToken을 요청하는 부분들은 node-twitter-api 를 사용하면 내부적으로 처리가 되기 때문에 깊이 있는 공부를 하고 싶다면 node-twitter-api 사이트에서 내부 함수를 살펴보자.
생각을 해서 정리해야 하는 부분은 html로 데이터를 객체화 하여 넘겨주는 getUserTimeline이 되겠다. 코드를 읽어보면 그리 어렵지 않다는 것을 알 수 있다.
참 쉬죠잉
twitter.js
var http = require('http');
var twitterAPI = require('node-twitter-api');
var reqTok, reqTokSec, accTok, accTokSec;
var pageMap = {};
var twitter = new twitterAPI({
consumerKey: 'API Key',
consumerSecret: 'API Key Secret',
callback: '로컬호스트:포트번호/getAccessToken'
});
pageMap['/getRequestToken'] = function(req, res, urlObj){
res.writeHead(200, {'Content-Type': 'text/plain;charset=UTF-8'});
twitter.getRequestToken(function(error, requestToken, requestTokenSecret, results){
if (error) {
console.log("Error getting OAuth request token : " + error);
} else {
reqTok = requestToken;
reqTokSec = requestTokenSecret;
res.write('{');
res.write('"reqTok":'+JSON.stringify(reqTok));
res.write('}');
res.end();
}
});
};
pageMap['/getAccessToken'] = function(req, res, urlObj){
res.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
var oauth_verifier = urlObj.query.oauth_verifier;
twitter.getAccessToken(reqTok, reqTokSec, oauth_verifier, function(error, accessToken, accessTokenSecret, results) {
if (error) {
console.log(error);
} else {
accTok = accessToken;
reqTokSec = accessTokenSecret;
res.write('<html><head><title>redirect page</title><meta http-equiv="refresh" ');
res.write('content="1;url=이동할 주소의 URL/test/main.html">');
res.write('</head><body><p>move to main page</p></body></html>');
res.end();
}
});
};
pageMap['/getUserTimeline'] = function(req, res, urlObj){
res.writeHead(200, {'Content-Type': 'text/plain;charset=UTF-8'});
twitter.getTimeline(
'user_timeline',
{screen_name: urlObj.query.screen_name},
accTok,
accTokSec,
function(error, data) {
if (error) {
console.log(error);
} else {
console.log('hihi');
res.write('[');
var isFirst = true;
data.forEach(function(item){
isFirst || res.write(',');
isFirst && (isFirst=false);
res.write('{');
res.write('"text":'+JSON.stringify(item.text));
res.write(',"tw_date":'+JSON.stringify(item.created_at));
res.write(',"rt_count":"'+item.retweet_count+'"');
res.write(',"fv_count":"'+
(item.retweeted_status?
item.retweeted_status.favorite_count:'0')+'"');
res.write('}');
});
res.write(']');
res.end();
}
});
};
http.createServer(function (req, res) {
res.setHeader("Access-Control-Allow-Origin", "*"); >> 서버에 요청하는 사람에게 정보제공 동의 헤더
//res.end('Hello World\n');
var urlObj = require('url').parse(req.url, true);
try{
var page = pageMap[urlObj.pathname];
if(page){
page(req, res, urlObj);
}
}catch(err){
console.log(err);
}
}).listen(포트번호, '호스트의 IP');
console.log('Server running at http://호스트IP:포트번호/');
댓글 없음:
댓글 쓰기