Developer Factory

twitter node 본문

Developer/Node.js

twitter node

Jeremy.Park 2014. 6. 23. 23:51




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){

//    console.log(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: 'CRfb3IoCyEHRJnlhpdCEw', // API key
    consumerSecret: 't0sWikNNsHlOlypIsVt2L5jOuiK56EFBS5i1TktGA', // 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( '{ "requestToken": "' + requestToken + '" }' );
          //  console.log(res);
            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.write( '<p>잠시후 메인 화면으로 이동합니다.</p>' );
        res.write( '<meta http-equiv="refresh" content="1;url=http://192.168.200.63:8080/twitter/main.html">');
       
        res.end();
      }
  }); 
};


pageControlMap['/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
    },
    accToken,
    accTokenSec,
    function( error, data, response) {
        if (error) {
                  console.log( "Error getting OAuth request token : " + error);
        } else {
                  res.write( '[');
                   var isFirst = 0;
                  data.forEach( function(item ){
                         if(isFirst > 0) {
                         res.write( ',');
                        }
                         isFirst ++;
                        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', '*');
  //크롬브라우져 AJAX에서 데이터 받고나서 뿌려주지 않는 현상해결위해

  try {
       //1. URL 분석: req.url -> /getRequestToken
       //- 쓰기 좋도록 하기 위해
       var urlObj = require( 'url').parse(req.url, true);
       //require('url ') => url 객체를 사용하기 위해서 (parse, resolve, url...등)

       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 >
<style>
body {
  font-size: small;
}
@font-face{ /* 폰트 정의 */
  font-family: 'rosettaicons';
  src:url('rosetta-icons-Regular.eot');
  src:url('rosetta-icons-Regular.eot?#iefix') format('embedded-opentype'),url('rosetta-icons-Regular.woff') format('woff'),url('rosetta-icons-Regular.ttf') format('truetype');
  font-style: normal;
  font-weight: normal;
}

.tweetBox {
/*   background: url('twitter.png') 0px 2000px; */
  border: 1px solid lightgray;
  margin: 5px;
  width: 510px;
  border-radius: 10px;
  padding: 10px;
}

.tweetBox:hover {
  border: 2px solid orange;
  padding: 9px;
  background-color: #f5f8fa;
}

.tweetHeader {
  font-size: 90%;
  color: red;
}

.tweetContent {
  font-size: 1.2em;
}

.tweetTail {
/*   border: 1px solid gray; */
  font-weight: bold;
}

.retweet:before {
/*   border: 1px solid gray; */
  font-family: "rosettaicons";
  font-size: 1.2em;
  content: "\f152";
  color: green;
}

.retweetCount {
/*   border: 1px solid gray; */
  color: green;
  margin-left: 5px;
  margin-right: 30px;
 
}

.favorite:before {
/*   border: 1px solid gray; */
  font-family: "rosettaicons";
  font-size: 1.2em;
  content: "\f147";
  color: orange;
}

.favorite:hover {
/*   border: 1px solid gray; */
  color: orange;
}

.favoriteCount {
  color: lightgray;
  margin-left: 10px;
}

.favoriteCount:hover {
  color: blue;
}

</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" ></script >
</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){
            $.each(result, function(index, item){
              $( '<div></div>')
                .addClass( 'tweetBox')
                .append($('<p></p>').addClass('tweetHeader' ).text(item.created_at))
                .append($('<p></p>').addClass('tweetContent' ).text(item.text))
                .append($( '<p></p>').addClass('tweetTail' )
                        .append($( '<span></span>').addClass('retweet' ))
                        .append($( '<span></span>').addClass('retweetCount' )
                                    .text(item.retweet_count))
                                    .append($( '<span></span>').addClass('favorite' ))
                                    .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
node-twitter-api  (0) 2014.06.23
Nody.js  (0) 2014.06.23