Developer Factory

node-twitter-api 본문

Developer/Node.js

node-twitter-api

Jeremy.Park 2014. 6. 23. 23:53
index.html ===================================

<!DOCTYPE html>
<html>
<head>
<meta charset= "UTF-8">
<title> 트위터 로그인 </title >
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" ></script >
</head>
<body>

<a id='btnLogin' style=' display: none;' href= ''> 트위터 로그인 </a >

<script>
$.getJSON('http://192.168.200.63:8884/getRequestToken', function(result){
$('#btnLogin')
      .attr( 'href', 'https://api.twitter.com/oauth/authorize?oauth_token=' +
      result.requestToken)
      .css( 'display', '');
});
</script>

</body>
</html>


twitter.js  ===================================

var http = require('http');
var twitterAPI = require('node-twitter-api');
var twitter = new twitterAPI({
    consumerKey: 'xxxxxxxxx', // API key
    consumerSecret: 'xxxxxxxxxxxx', // API Secret Key
    callback: 'http://192.168.200.63:8884/getAccessToken' // 로그인 성공 후 자동 접속할 주소
});
var reqToken , reqTokenSec ;
var accToken , accTokenSec ;
var pageControlMap = {};

pageControlMap['/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 : ");
            console.log(error);
            res.end();
          } else {
            reqToken = requestToken;
            reqTokenSec = requestTokenSecret;
            res.write( '{');
            res.write( '  "requestToken": "' + requestToken + '"' );
            res.write( '}');
            res.end();
          }
        }); 
};

pageControlMap['/getAccessToken'] = function(req , res , urlObj ) {
       // 트위터로부터 액세스토큰을 발급받는다.
  res.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
  var oauth_verifier = urlObj.query.oauth_verifier;
  twitter.getAccessToken(
              reqToken, // 요청토큰
              reqTokenSec, // 요청토큰 보안키
              oauth_verifier, // 사용자 검증키
              function(error , accessToken , accessTokenSecret , results ) {
    if (error) {
      console.log( "Error getting OAuth access token : ");
        console.log(error);
        res.end();
      } else {
        accToken = accessToken;   
        accTokenSec = accessTokenSecret;
       
        res.write( '<html><head><title>redirect main</title>' );
        res.write( '<meta http-equiv="refresh"');
        res.write( ' content="1;url=http://localhost:8080/twitter/main.html">');
        res.write( '</head><body>');
        res.write( '<p>잠시후 메인 화면으로 이동합니다.</p>' );
        res.write( '</body></html>');
       
        res.end();
      }
  }); 
};

pageControlMap['/getUserTimeline'] = function(req , res , urlObj ) {
      res.writeHead(200, { 'Content-Type': 'text/plain;charset=UTF-8' });
      twitter.getTimeline(
             'user_timeline', // type
            {screen_name: urlObj.query.screen_name}, // params
            accToken, // accessToken
            accTokenSec, // accessTokenSecret
             function(error , data ){ // callback: 작업을 완료했을 때 호출할 함수
                   if (error) {
                        console.log(error);
                        res.write( '{"error": "오류!"' );
                  } else {
                        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( ',"created_at":' + JSON.stringify(item.created_at));
                              res.write( ',"retweet_count": "' + item.retweet_count + '"');
                              res.write( ',"favorite_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', '*');
 
  try {
       //1. URL 분석: req.url -> /getRequestToken
       //- 쓰기 좋도록 하기 위해
       var urlObj = require( 'url').parse(req.url, true);

       var pageControl = pageControlMap[urlObj.pathname];
       if (pageControl) {
            pageControl(req, res, urlObj);
      } else {
             throw '요청하는 서비스를 찾을 수 없습니다.' ;
      }
  } catch ( err) {
      res.write( '{ "error": "' + err + '" }' );
      res.end();
  }
 
}).listen(8884, '192.168.200.63');
console.log('Server running at http://192.168.200.63:8884/');


main.html  ===================================



<!DOCTYPE html>
<html>
<head>
<meta charset= "UTF-8">
<title> 트위터 로그인 </title >
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" ></script >


<style>
body {
       font-size: small;
}
.tweetBox{
/*    background: url('twitter.png') 0px 1900px; */
       border: 1px solid lightgray;
       margin: 10px;
       padding: 10px;
       width: 510px;
       border-radius: 10px ;
}
.tweetBox:hover {
       border: 2px solid orange;
       background-color: #e1e8ed ;
       padding: 9px;
}
.tweetHeader{
       font-size: 80%; /* 0.8em */
       color: red;
}
.tweetContent{
       font-size: 1.2em;
}
.tweetTail{
       font-weight: bold ;
}
.retweetCount{
       color: green;
       margin-right: 30px ;
}
.favoriteCount{
       color: lightgray
}
.favoriteCount:hover{
       color: blue;      
}
</style>
</head>
<body>
<h1> 트위터 데이터 조회 테스트 </h1 >
<a id='btn1' href= '#'> 사용자 타임라인 가져오기 </a ><br >


<div id="tweets"></ div>


<script>
$('#btn1').click( function(event){
      event.preventDefault();
      $.getJSON( 'http://192.168.200.63:8884/getUserTimeline?screen_name=bum3144' ,
             function(result){
                  console.log(result);
                  

                   /*                
                  result.forEach(function(item){
                        
                  var div = null;
                  var topDiv = $("#tweets");
                  topDiv.append($('<div></div>')
                        .addClass('tweetBox')
                        .html('[작성일] ' + item.created_at + '<br><br>')
                        .append(item.text + '<br><br>')
                        .append($('<img/>').attr('src','re.png'))
                        .append(' &nbsp;리트윗 : ' + item.retweet_count )
                        .append('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;')
                        .append($('<img/>').attr('src','fa.png'))
                        .append(' &nbsp;추천 : ' +item.favorite_count));      
                   */
      
                  
                  $.each(result, function(index, item){
                        $( '<div></div>')
                        .addClass( 'tweetBox')
                        .append($( '<p></p>').text(item.created_at).addClass('tweetHeader' ))
                        .append($( '<p></p>').text(item.text).addClass('tweetContent' ))
                        .append($( '<p></p>').addClass('tweetTail' ))
                                    .append($( '<span></span>').addClass('retweetCount' )
                                                .text(item.retweet_count))
                                    .append($( '<span></span').addClass('favoriteCount' )
                                                .text(item.favorite_count))
                        .appendTo( '#tweets');
                  });

      });
});

</script>
</body>
</html>



'Developer > Node.js' 카테고리의 다른 글

REST API  (0) 2014.06.24
그림으로 보는 node-twitter-api  (0) 2014.06.23
twitter node  (0) 2014.06.23
Nody.js  (0) 2014.06.23