우리 사내식당 밥은 아주 맛있다.
맛이 없어서 그런건 아니고..
그냥 미리 어떤 음식이 나오는지 알고싶을 뿐이다.
맛없는게 나오면 안먹고 라면을 먹기 위해서 만드는 것은 아니다.
Brian Park 님의 블로그에서 초등학생 아들 알림장/급식메뉴를 텔레그램으로 알려주는 라즈베리파이 서버 관련 글을 읽고 처음으로 파이썬(웹프로그래밍 언어)에 도전하게 되었다.
의외로 스크립트언어?사실 난 전문용어 잘 몰라유 ㅠㅠ 틀린게 있으면 바로잡아주세요 ㅠㅠ
처럼 순서대로 실행하고, C언어처럼 중괄호 개념이 아닌 들여쓰기로 구분..하는 것이 나에게는 심플하고 쉽게 느껴졌다.
물론 이런저런 명령어 외워야하는건 어쩔 수 없..ㅠ_ㅠ
아무튼 나의 특기인 따라하기 신공을 통해
맥에 python 2.7을 설치하고, 적절한 편집기로 eclipse를 골랐다.
나처럼 일자무식자가 단순 연습을 하기 위해서는 eclipse보다 그냥 python 기본 제공 앱(?)인 IDLE을 활용하여 코드 한 줄 한 줄이 어떻게 실행되고 왜 실행이 안되는지 확인 할 수 있어서 더 좋은 것 같다.
어쨋든, 삼성웰스토리에 신규 가입을 해서 아이디와 비밀번호를 알아 둔 뒤..
urllib, urllib2, cookielib 라는 라이브러리를 임포트하여
내가 읽어올 페이지 특정 부분에서 내 아이디와 비밀번호 전송값을 대입하여 처리하는....
말해놓고 나니 무슨말인지...하아
뭐 그런 방식인 것 같다.
urlencode가 핵심 키워드가 아닐까 싶다.
그래서~!
지금 아이디와 비번을 입력하여 접속된 화면이 출력되는 것 까지는 확인이 되었다.
이는, 아래에서
f=opener.open('https://www.samsungwelstory.com/member/login.jsp')
for line in f:
print line.strip()
부분에서처럼 사이트를 열고, 한줄씩 열거하여 보여달라고 요청하여 나온 값들과
사파리에서 소스보기 값들과 대조를 통해 확인했다.
얼마전 TF를 통해 회사 홈페이지를 만들어서 html 언어와 php 언어에 대해서 공부 할 기회가 있어서 다행히 더 빠르게 소스를 이해할 수 있었다.
근데 막상 파이썬을 해보니,,, 영화속에서 해커들이 막 검정 화면에서 투닥탁탁 하는 그런 화면...! 을 내가 막 만지고 있었다.뭔가 멋있음. 훗
하지만.. 정상적으로 로그인하여 오늘의 메뉴까지는 읽어 왔으나...
그다음이 문제군.. 이 페이지에서 어떻게 값을 줘서 내가 원하는 날짜의 값들을 원하는 형태로 받아 오지...!!? 더 연구 해 봐야겠다.
위동영상은 로그인 및 오늘의메뉴까지 진입하는 명령어들을 연속적으로 실행하는 모습. 이걸 한줄씩하면 해커가 되는거임?
로그인한 뒤 오늘의 메뉴까지 진입하는 소스코드 (#과 같은 줄 내용은 주석임)
import urllib, urllib2, cookielib
# From here is what login to SamsungWelstory and Go to TodayMenu
username = '아이디'
password = '비밀번호!'
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'memId' : username, 'pwd' : password})
opener.open('https://www.samsungwelstory.com/member/login.jsp', login_data)
#resp = opener.open('https://www.samsungwelstory.com/member/login.jsp')
f=opener.open('https://www.samsungwelstory.com/member/login.jsp')
for line in f:
print line.strip()
#print resp.read()
print 'Now starting to connect TODAY MENU'
todaym=urllib.urlopen('http://www.samsungwelstory.com/customer/individual/todayMenu.jsp')
for line in todaym:
print line.strip()
맛이 없어서 그런건 아니고..
그냥 미리 어떤 음식이 나오는지 알고싶을 뿐이다.
맛없는게 나오면 안먹고 라면을 먹기 위해서 만드는 것은 아니다.
Brian Park 님의 블로그에서 초등학생 아들 알림장/급식메뉴를 텔레그램으로 알려주는 라즈베리파이 서버 관련 글을 읽고 처음으로 파이썬(웹프로그래밍 언어)에 도전하게 되었다.
의외로 스크립트언어?
처럼 순서대로 실행하고, C언어처럼 중괄호 개념이 아닌 들여쓰기로 구분..하는 것이 나에게는 심플하고 쉽게 느껴졌다.
물론 이런저런 명령어 외워야하는건 어쩔 수 없..ㅠ_ㅠ
아무튼 나의 특기인 따라하기 신공을 통해
맥에 python 2.7을 설치하고, 적절한 편집기로 eclipse를 골랐다.
나처럼 일자무식자가 단순 연습을 하기 위해서는 eclipse보다 그냥 python 기본 제공 앱(?)인 IDLE을 활용하여 코드 한 줄 한 줄이 어떻게 실행되고 왜 실행이 안되는지 확인 할 수 있어서 더 좋은 것 같다.
어쨋든, 삼성웰스토리에 신규 가입을 해서 아이디와 비밀번호를 알아 둔 뒤..
urllib, urllib2, cookielib 라는 라이브러리를 임포트하여
내가 읽어올 페이지 특정 부분에서 내 아이디와 비밀번호 전송값을 대입하여 처리하는....
뭐 그런 방식인 것 같다.
urlencode가 핵심 키워드가 아닐까 싶다.
그래서~!
지금 아이디와 비번을 입력하여 접속된 화면이 출력되는 것 까지는 확인이 되었다.
이는, 아래에서
f=opener.open('https://www.samsungwelstory.com/member/login.jsp')
for line in f:
print line.strip()
부분에서처럼 사이트를 열고, 한줄씩 열거하여 보여달라고 요청하여 나온 값들과
사파리에서 소스보기 값들과 대조를 통해 확인했다.
얼마전 TF를 통해 회사 홈페이지를 만들어서 html 언어와 php 언어에 대해서 공부 할 기회가 있어서 다행히 더 빠르게 소스를 이해할 수 있었다.
근데 막상 파이썬을 해보니,,, 영화속에서 해커들이 막 검정 화면에서 투닥탁탁 하는 그런 화면...! 을 내가 막 만지고 있었다.
해커아재들의 멋진 모습 |
그다음이 문제군.. 이 페이지에서 어떻게 값을 줘서 내가 원하는 날짜의 값들을 원하는 형태로 받아 오지...!!? 더 연구 해 봐야겠다.
로그인한 뒤 오늘의 메뉴까지 진입하는 소스코드 (#과 같은 줄 내용은 주석임)
import urllib, urllib2, cookielib
# From here is what login to SamsungWelstory and Go to TodayMenu
username = '아이디'
password = '비밀번호!'
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'memId' : username, 'pwd' : password})
opener.open('https://www.samsungwelstory.com/member/login.jsp', login_data)
#resp = opener.open('https://www.samsungwelstory.com/member/login.jsp')
f=opener.open('https://www.samsungwelstory.com/member/login.jsp')
for line in f:
print line.strip()
#print resp.read()
print 'Now starting to connect TODAY MENU'
todaym=urllib.urlopen('http://www.samsungwelstory.com/customer/individual/todayMenu.jsp')
for line in todaym:
print line.strip()
3/19 추가...
너무 오랫동안 묵혀두는 프로젝트인 것 같아 다시 진행하려고 손을 데는 도중에..웰스토리에서 로그인 화면에 google recapcha를 도입이 되었음을 확인했다...
더이상 파이썬 봇으로 접근이 안된다.
기능을 추가한 소스를 공개한다.
#사람처럼 속이기 위해 requests 모듈을 import
#-*- coding: utf-8 -*-
import urllib, urllib2, cookielib, requests
from datetime import datetime
#날짜를 계산해서 원하는 날짜의 메뉴를 출력하도록 하기 위해 datetime도 import
from bs4 import BeautifulSoup
#출력된 값을 예쁘게 편집해서 텔레그램으로 보내기 위해서 BeautifulSoup모듈도 설치 및 import.
#사람처럼 속이는 requests 코드들.. 맥으로 접속하는 것처럼 속여보았다.
session = requests.Session()
headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit 537.36 (KHTML, like Gecko) Chrome", "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"}
url = "https://www.samsungwelstory.com/member/login.jsp"
req = session.get(url, headers=headers)
bsObj = BeautifulSoup(req.text, "html.parser")
# 자 이제 여기서부터는 아이디와 비번을 쿠키에 넣고 로그인 하는 부분. 예전엔 잘 됐으나 지금은 구글 리캡챠에 걸려서 이 구간까지 진행이 안된다.
# From here is what login to SamsungWelstory and Go to TodayMenu
username = '아이디는 비밀'
password = '비밀번호라 비밀'
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener) #추가함
#set form date
login_data = urllib.urlencode({'memId' : username, 'pwd' : password})
opener.open('https://www.samsungwelstory.com/member/login.jsp', login_data)
#resp = opener.open('https://www.samsungwelstory.com/member/login.jsp')
loginpage=opener.open('https://www.samsungwelstory.com/member/login.jsp')
for line in loginpage:
print line.strip()
#print resp.read()
print 'Now starting to connect TODAY MENU'
#여기서부터는 오늘의 메뉴에 나올 날짜값을 조합하는 부분
zero = "0"
year = datetime.today().year
month = datetime.today().month
day = datetime.today().day
year_str = str(year)
#날짜를 숫자로 뽑고
month_str = str(month)
month_len = len(month_str)
month_len = 1
#문자로 변환한 뒤
if month_len:
print("month_len's str number is 1, so add 0 in front of it")
month_str = zero + month_str
#2017-3-21 식으로 나오면 안되고 2017-03-21 식을 나와야 하기에 문자열 개수가 1이면 앞에 0을 추가하고 그렇지 않으면 그냥 두도록 if 문을 넣었다. 그리고 글자수가 하나라 앞에 0 추가했다는 메세지가 파이썬 쉘에 뜨도록 했다.
day_str = str(day)
dash = "-"
date = year_str + dash + month_str + dash + day_str
front = "&sDate="
mid = date
back = "&hall_no=E1C7"
#최종적으로 만들어진 문자열을 polarishallflag에 넣고
polarishallflag = front + mid + back
print "FOR DEBUG)))))) date setting is now : "+polarishallflag
#디버깅용으로 값을 한 번 확인해봤다.
#select_hall= urllib.urlencode({'modifyFlag' : polarishallflag})
#opener.open('http://www.samsungwelstory.com/customer/individual/todayMenu.jsp',select_hall)
#menupage=opener.open('http://www.samsungwelstory.com/customer/individual/todayMenu.jsp')
#for line in menupage:
# print line.strip()
soup = BeautifulSoup(urllib.urlopen('http://www.samsungwelstory.com/customer/individual/todayMenu.jsp').read())
editData = soup.find_all('ul', {'class': "list_food"})
print editData
너무 오랫동안 묵혀두는 프로젝트인 것 같아 다시 진행하려고 손을 데는 도중에..웰스토리에서 로그인 화면에 google recapcha를 도입이 되었음을 확인했다...
더이상 파이썬 봇으로 접근이 안된다.
기능을 추가한 소스를 공개한다.
#사람처럼 속이기 위해 requests 모듈을 import
#-*- coding: utf-8 -*-
import urllib, urllib2, cookielib, requests
from datetime import datetime
#날짜를 계산해서 원하는 날짜의 메뉴를 출력하도록 하기 위해 datetime도 import
from bs4 import BeautifulSoup
#출력된 값을 예쁘게 편집해서 텔레그램으로 보내기 위해서 BeautifulSoup모듈도 설치 및 import.
#사람처럼 속이는 requests 코드들.. 맥으로 접속하는 것처럼 속여보았다.
session = requests.Session()
headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit 537.36 (KHTML, like Gecko) Chrome", "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"}
url = "https://www.samsungwelstory.com/member/login.jsp"
req = session.get(url, headers=headers)
bsObj = BeautifulSoup(req.text, "html.parser")
# 자 이제 여기서부터는 아이디와 비번을 쿠키에 넣고 로그인 하는 부분. 예전엔 잘 됐으나 지금은 구글 리캡챠에 걸려서 이 구간까지 진행이 안된다.
# From here is what login to SamsungWelstory and Go to TodayMenu
username = '아이디는 비밀'
password = '비밀번호라 비밀'
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener) #추가함
#set form date
login_data = urllib.urlencode({'memId' : username, 'pwd' : password})
opener.open('https://www.samsungwelstory.com/member/login.jsp', login_data)
#resp = opener.open('https://www.samsungwelstory.com/member/login.jsp')
loginpage=opener.open('https://www.samsungwelstory.com/member/login.jsp')
for line in loginpage:
print line.strip()
#print resp.read()
print 'Now starting to connect TODAY MENU'
#여기서부터는 오늘의 메뉴에 나올 날짜값을 조합하는 부분
zero = "0"
year = datetime.today().year
month = datetime.today().month
day = datetime.today().day
year_str = str(year)
#날짜를 숫자로 뽑고
month_str = str(month)
month_len = len(month_str)
month_len = 1
#문자로 변환한 뒤
if month_len:
print("month_len's str number is 1, so add 0 in front of it")
month_str = zero + month_str
#2017-3-21 식으로 나오면 안되고 2017-03-21 식을 나와야 하기에 문자열 개수가 1이면 앞에 0을 추가하고 그렇지 않으면 그냥 두도록 if 문을 넣었다. 그리고 글자수가 하나라 앞에 0 추가했다는 메세지가 파이썬 쉘에 뜨도록 했다.
day_str = str(day)
dash = "-"
date = year_str + dash + month_str + dash + day_str
front = "&sDate="
mid = date
back = "&hall_no=E1C7"
#최종적으로 만들어진 문자열을 polarishallflag에 넣고
polarishallflag = front + mid + back
print "FOR DEBUG)))))) date setting is now : "+polarishallflag
#디버깅용으로 값을 한 번 확인해봤다.
#select_hall= urllib.urlencode({'modifyFlag' : polarishallflag})
#opener.open('http://www.samsungwelstory.com/customer/individual/todayMenu.jsp',select_hall)
#menupage=opener.open('http://www.samsungwelstory.com/customer/individual/todayMenu.jsp')
#for line in menupage:
# print line.strip()
soup = BeautifulSoup(urllib.urlopen('http://www.samsungwelstory.com/customer/individual/todayMenu.jsp').read())
editData = soup.find_all('ul', {'class': "list_food"})
print editData
#원하는 부분을 잘라서 출력되도록 한 뒤 텔레그램과 연계만 하면 되는데... 구글 리캡챠를 도입하다니 아쉽다. 누군가가 구글 리캡챠를 구글 음성API로 뚫었다고 하던데 그 방법도 곧 막힐테니.. 이쯤에서 이 프로젝트는 실패했다고 봐야하겠다. 그래도 파이썬 봇으로 로그인+자료 가공+출력까지의 방법을 알아냈다는 것이 작은 성과이고 다른 부분에서 연계하여 사용 할 부분이 있는지 알아 볼 예정이다.
화이팅 입니다~~
답글삭제헛! 이런 누추한 곳까지 들러주시다닛 영광입니다요!
삭제