BLOG ARTICLE 파이선 | 2 ARTICLE FOUND

  1. 2008.08.28 and 와 or 문법의 이해.
  2. 2007.04.16 네이트 클리핑을 위한 로그인 세션 생성방법 2

trac 의 한 소스를 보다가 아래와 같은 문장을 보았다.


${ticket.exists and 'Submit changes' or 'Create ticket'}
ticket.exists 가 참이면 'Submit changes' 를 거짓이면 'Create ticket' 을 의미하게 되는 문장이다.
이 문장을 문법적으로 이해하려고 했는데 잘 이해가 되지 않았다.

python 에서 and 와 or 문은 True 나 False로 evaluation 되지 않는다.

x and y 는 첫번째로 x를 evaulation 하고 true 이면 x의 evaulation 값을 리턴하고, false이면 y의 evaluation 값을 리턴한다.

x or y 는 x를 evaluation 하고 true 이면 x의 evaulation 값을, false 이면 y이 evaulation 값을 리턴한다.

${ticket.exists and 'Submit changes' or 'Create ticket'} 문장을 보면 ticket.exists 가 참이면 'Submit changes' 를 evalutation 한다 이는 참임으로 'Submit changes' 스트링이 결과값이다. ticket.exists 가 False 이면 ticket.exists and 'Submit changes' 전체가 ticket.exists 로 계산되고  ticket.exists or 'Create ticket' 을 연산하게 된다.

나중에 python.kr 사이트에서 게시물 검색중 관련된 내용을 알았다.
C언어에서 a ? b : c 라는 표현을 python으로 옮길 때,
a and b or c 와 같이 표현하면 된다는 것을, 하지만 이때 b는 항상 true 로 판별되어야만 가능하다는 것을.....
AND

네이트 톡을 PDA 로 클리핑하여 보려고, 파이선 스크립트를 만들었다.
대부분의 게시판은 로그인을 요구하지 않았는데, 일부 게시판은 로그인을 요구하길래, 로그인이
가능한 스크립트를 만들다 보니 쿠키 핸들링이 필요하여 사용한던 내용을 정리해본다.
                               (A)                                        (B)
[브라우저 Client] <---------> [클리핑 스크립트] <---------> [네이트 톡 서버]

클리핑을 위해서는 위와 같은 네트웍 구성도가 된다.
클리핑 스크립트에 아이디/비밀번호 를 넣어 놓기가 좀 그래서, 브라우저 Client에서 쿠키로 스크립트쪽으로
보내도록 했다. (폼 데이터로 보내도록 해도 상관은 없다)

일단 (A)에서 클라이언트에서 보내주는 쿠키를 꺼내 보려면, os.environ["HTTP_COOKIE"] 값을 참조하면된다.

try:
    cookies = os.environ["HTTP_COOKIE"]
except KeyError:
    print "cookie is not set"
else :
    info = cookies.split(';')
    for item in info:
        if 'id' in item:
            login_id = item.split('=')[1]
        if 'passwd' in item:
            login_pw = item.split('=')[1]
(A) 에서 브라우저가 쿠키를 id=userId;passwd=userpw 이렇게 보내게 되면 id/pw 에 userid/passwd 값이
들어온다.

(B)에서 네이트 톡에 로그인 하기 위해서는 POST 로 form data를 전송하고 응답으로 받은 쿠키값을 session으로 이용해야 한다. 이 쿠키세션값을 담아 놓는 놈이 CookieJar 이다.

http 요청을 위해서는 urllib2 를 사용하고 Cookie 핸들링은 cookielib 를 사용한다.

cj = cookielib.CookieJar()
opner = urllib2.build_opener (urllib2.HTTPCookieProcessor(cj))
r = opener.open("http://xso.nate.com/login.jsp")
login_postdata = {'redirect':'http:/www.nate.com', "ID":login_id,"domain":"nate.com","PASSWD":login_pw,"ssl":""} # 로그인 폼 값
params = urllib.urlencode (login_postdata)
r = opener.open("http://xso.nate.com/servlets/LoginServlet", params)           

여기까지하면 id/pw 가 정확하다면 네이트에 로그인 세션이 생성되어 cj에 담기게 된다.
이 이후로 opener 를 이용하면 로그인 세션이 살아 있게 된다.

AND