컴퓨터2012. 10. 23. 15:22

이 코드를 짜려고 그렇게 힘들었나 봅니다.. 


다음 코드는 파이썬에 트위터 아이디를 인증하는 코드입니다. 


api를 사용한 부분도 있고 부족한 부분은 BeautifulSoup으로 마무리 했습니다. 


전체 코드는 저렇고 주석으로 하나씩 설명해보도록 하죠. 


import tweepy

import urllib, urllib2

import BeautifulSoup


user_id='아이디'

password='패스워드'


def find_auth_token(page):

a=page.find('twttr.form_authenticity_token =')

b=page.find('\'',a)

c=page.find('\'',b+1)

return page[b+1:c]


## 이부분은 authorization token을 찻는 부분입니다. 

## 문자열 처리를 사용했지요. 


def find_oauth_verifier(page):

a=page.find('oauth_verifier')

b=page.find('=',a)

c=page.find('"',b+1)

return page[b+1:c]


##위의 이부분도 마찮가지 입니다. verifier값을 찻기 위해서 작성한 함수입니다. 


opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())

##urllib2로 세션을 오픈합니다. 


consumer_key  = '어플의 키값'

consumer_secret = '어플의 시크릿값'


##어플을 만들면 컨슈머키와 시킛을 발급 받을수 있습니다. 어플을 만드는건 

## http://dev.twitter.com 에 가시면 됨니다. 


auth = tweepy.OAuthHandler(consumer_key, consumer_secret)

## auth 객체를 생성합니다. 

redirect_url = auth.get_authorization_url()

## 인증 url를 받아옵니다. 

page_temp=opener.open(redirect_url).read()

## redirect_url을 열어서 authorization token을 받아오기 위해서 읽어들입니다. 

## 이 경우에는 소스보기 형식으로 문자열 저장이 됩닏. 

auth_token=find_auth_token(page_temp)


login_params = urllib.urlencode({'authenticity_token':auth_token,'session[username_or_email]':user_id, 'session[password]':password , 'Authorize app':'allow'})

## dictionary형태로 로그인 값들을 만들어 줍니다. 

## 아까 받은 authorization token을 사용합니다. 

page_content=opener.open(redirect_url, login_params) 

soup = BeautifulSoup.BeautifulSoup(page_content)

##로그인 파라미터들을 넣고 페이지를 열어서 beautifulSoup로 열어줍니다. 

tag=soup.findAll('meta')[3]

verifier=find_oauth_verifier(str(tag))

##verifier를 찻는 과정이구요. 소스 열어보시면 뭘 하는건지 알게 되실거에요. 

auth.get_access_token(verifier)

##verifier를 통해 유저의 access_token을 얻고, 이제 계정에 권한에 접근할수 있습니다. 


api = tweepy.API(auth)

## api 객체를 생성하구요. 


api.update_status("test tweet")

##테스트로 트윗을 날려봤습니다. 



이 과정을 습득하느라 얼마나 많은 삽질을 했는지 모르겠습니다. 

우리나라, 외국 모든 구글을 뒤져도 잘 나오지 않는 정보라 포스트 해봅니다. 

중간에 한 한국분의 포스트가 상당히 결정적으로 잘 설명되어 있어서 도움이 많이 되었습니다. 


http://imp17.com/tc/myevan/archive/201103


아! 이분이시군요. ㅎ


Posted by blindfish