본문 바로가기

IT/Web

How to tweet with Node.js ExpressJS - 트윗을 보내보자.

Node.js 기술을 이용하여 tweet(Twitter)를 보내는 것을 만들어 보자.

일단 모든 소스는 여기에 공개되어 있다.


이 모든 기술은 약간의 변경이나 줄임은 있지만 아래 참고 글에 기반하고 있음을 알려둔다. 


참고글 : https://coolaj86.com/articles/how-to-tweet-from-nodejs.html


기본적으로 Node.js와 ExpressJS 가 사용되어 자신의 개발 PC를 간단한 웹서버와 트위터 서비스의 인증과 메시지를 보내는 게이트웨이(혹은 프락시)의 역할을 하도록 구현한다.

참고로 요 근래 올리 Node.js와 관련된 글도 읽어보면 좋을 듯

  • 2015/07/24 MongoDB 설치 - Windows 환경
  • 2015/07/22 node.js 설치 - windows 환경
  • 2015/07/17 node.js tar.unpack untar error


또한, 트위터 앱을 하나 만들 필요가 있다. 이 앱을 통해 사용자 인증을 미리 받고 메시지를 계정으로 업로드 할 수 있도록 해 준다. 이 과정은 아래 순서에 맞게 만들어 본다.


  1. Go to https://dev.twitter.com/apps/
  2. 아래 그림을 참고해서 자신의 트위터 앱을 하나 만들어 본다.
  3. 중요한 것은 KEY 값을 가져 오는 것이다. 이것도 아래 그림을 참고해서 가져오면 된다.


여기서 생성된 키를 첨부된 소스의 config.json 파일에 해당 부분에 가서 수정을 해 주면 된다.
이미 첨부파일에는 위의 그림의 값으로 수정된 파일이 들어 있다.

다시 Node.js가 설치되어 있는 개발환경으로 돌아온다.
먼저 트위터 인증을 처리하기 위해 Passport 라이브러리를 사용해야 한다.아래와 같이 설치를 할 수 있다.
npm install --save passport passport-twitter

머사실 원본 글에 있는 Github페이지( https://github.com/coolaj86/node-twitter-demo )로 가보면,

특별히 따로 npm install을 개별으로 할 필요없이 설정파일이 준비되어 있다.

즉,

git clone git@github.com:coolaj86/node-twitter-demo.git
pushd node-twitter-demo
npm install

이렇게 해 주면 간단하게 데모를 따라해 볼 수 있다.


그리고, 기본적으로 접속하면 나오는 페이지는 views 라는 디렉토리 아래에 있는 .jade 파일을 수정하면 된다.

살짝 형태를 보면 아래 그림과 같다.


그림에서 보면 html tag와 유사하게 구현할 수 있다. 머 그리 어렵지는 않다.

그리고, 사진은 원본 참고글의 내용을 가져온 것이고 첨부파일 내부의 값은 저자의 이름으로 약간씩 변경이 되어 있다.


제일 중요한 파일은 app.js 이다.

ExpressJS 라이브러리로 비교적 수월하게 웹서버의 기능을 구현할 수 있다. 사실 몇줄만으로 가능하다.

그리고 Passport 라이브러리를 이용하여 트위터로 부터 인증을 받고, 메시지를 보내는 과정이 수월하게 구현되어 있다.

트위터 앱을 잘 만들고, 키 값만 잘 복사해 온다면 자신만의 시스템을 구현하는 것은 그리 어렵지 않다.

소스의 내용은 간단하게 살펴보자.

먼저 초기화 부분이다.



바꿀 부분은 크게 없다. 만약의 자신이 운영하는 공식적인 클라우드 환경이 있다면 domain, port 값은 그에 맞도록 변경하기 바란다.

그리고 위 2번째 그림의 노란색 부분은 트위터 앱을 인증하고 callback되는 주소와 일치해야 한다. 자신이 만든 트위터 앱의 정보와 동기화를 반드시 맞추어야 한다. 주의!~~

다음은 트위터 메시지를 만드는 핵심 함수의 구성이다.

생각보다 별것 없다. 원하는 메시지를 막 바꿔 넣어도 되고, 함수에 익수하다면 파라메터로 메시지 내용을 받은 것도 좋은 시도가 되겠다.


노란색 부분만 주의해서 보면 된다.

기타 디버그 메시지 등은 개발 당시에 넣은 것으로 단순 참고용으로 보기 바란다. 


그리고 앱을 인증하거나 하는 경우에 호출되는 기본 함수



그래도 사용하면 된다. 별로 수정할 부분이 없다.


이제 기본적으로 웹서버에서 특정 페이지가 호출되면 불리는 url 맵핑되는 부분이다. 중요한 주소 몇개만 보자.


맨위의 화살표는 인증페이지 /twitter/authz 가 호출되면 불리는곳이다. 

인증이 성고하면 /zSuccess 페이지로 자동으로 이동 시켜 준다. 

그래서 이 페이지도 바로 아래 녹색 박스와 같이 구성해 필요한 사용자 정보를 보여주도록 해 두었다.

여기에 쓰이는 user.token, user.tokenSecret 은 트위터로 메시지를 보내는 경우 반드시 있어야 하는 값으로 누구든 이 값만 있으면 내계정에 글을 올릴 수 있으니 주의하도록 하자.

보통은 이 값을 소스에 바로 넣어서 자신이 만든 계정을 통해 메시지를 보낼 수 있도록 개발하고 있다. => IoT 디바이스를 이용해서 보내는 글은 바로 이어서 올릴예정이다.

(아두이노의 트위터 보내기 소스를 보면 쉽게 유추해 볼 수 있다)

그리고, 아래 약간 분홍색 박스 /twitter/tweet 페이지로 실제 이 페이지가 호출되면 트위터로 메시지를 보낸다. 

위에서 설명한 makeTweet 함수를 호출하고 성공하면 "go check your tweets!" 라는 결과가 브라우저로 출력된다.



맨 마지막에 있는 내용으로 ExpressJS 서버를 실행해 두는 부분이다.

이 예제에서는 3000번 포트로 오픈해 두었기에 http://127.0.0.1:3000/ 이렇게 접속하면 된다.


그럼 실행은 어떻게 하느냐? 다들 알고 있겠지만

Now run the app

node app 

Visit http://127.0.0.1:3000 and play around.


잘되면 아래와 같은 스냅샷의 데모결과를 얻을 수 있다.


먼저 Node.js command 창에서는


그리고 접속한 브라우저는 이렇게


이쁘지는 않지만 일단 웹서버로서는 훌륭해 보인다. 

노란 박스로 된 부분이 이 튜토리얼의 키가 되겠다. 

자신이 만든 앱을 통해 인증을 받고, 트윗 메시지를 보내 보자.

일단 인증을 해보자.


이 화면에서 인증하기 버튼을 누르면, (만약 로그인이 되어 있지 않다면 로그인을 요구한다.)

인증 작업이 진행되면서, 성공을 하면 아래 페이지로 이동이 된다. (이 이동하는 페이지는 앞서 살펴본 소스 코드에 나와 있다.)

자, 그림과 같이 내가 어설프게 만든 트위터 앱을 통해 인증을 받고, 원하는 키 값을 획득한 것으로 출력하도록 원본소스에 없는 내용을 추가해 두었다.

이 값이 중요하다고 앞서도 언급했다. 메시지를 보내기 위해서 필수적인다. 이 값이 있다면 매번 위의 인증과정을 수행할 필요가 없다.

왜냐하면 이미 이 앱은 내가 스스로 인증을 해 주었으므로 특별히 트위터 설정을 바꾸지 않는 이상 이 앱을 통한 접근권한은 계속 유지된다.

따라서 위의 그림에 나온 키 값 2개를 이용하면 어디서든 내계정으로 메시지를 보낼 수 있다. 

이를 이용하여 IoT 디바이스에서 내가 만든 이 Twitter Proxy를 통해 메시지를 보낼 수 있는 튜토리얼이 이어질 예정이다. 기대기대~~


자, 이제 트윗메시지를 보내 볼까~~

앞서 / (루트페이지)로 이동해서 메시지 보내기 링크를 클릭하면, 별 문제 없다면 다음과 같은 화면이 브라우저에 나타날 것이다.


이제 이 긴글을 마무리 할 때가 되었다. 트위터만 확인해 보면 끝끝


 ^-^ 크하하핫~ 아무런 무리없이 구동이 완료 되었다. 

해피 코딩~


참고로 그동안 Node.js command 창에는 여러 디버그 메시지가 막 출력되고 있다. 

다 유용한 정보이니 소스를 수정해서 자신의 프로젝트에 사용하려면 찬찬히 다 읽어보기 바람 이상~~~



현재, 올릴 소스를 정리중에 있어 첨부파일이 생략되어 있으나 곧곧곧 올라갑니다. 진짜로 올라가요..

일단 모든 소스는 여기에 공개되어 있다.

아니면 제일 위에 있는 원본 참조글의 소스를 활용해도 됩니다. 기대 *^^*