food2sms.py (version: 2008.05.01.b)
숭실대 정보대 학교 식당의 메뉴를 문자로 보내주는 프로그램입니다.
파이썬으로 작성되었습니다.
*nix계열의 서버면, crontab에 등록하시면, 특정 시간마다 그날그날 문자로 받을 수 있습니다.
윈도 서버라면 at 명령어에 등록하면 됩니다. ㅋㅋㅋㅋㅋㅋㅋ
그날그날 문자로 학식 정보를 받아보아요. -_-;
라이센스
Copyleft, allrights are FREE!!...입니다. -_-;;
다운로드
★ 다운로드: food2sms.py
(아래쪽에 붙여놓은 소스코드와 이 파일의 내용은 동일함.)
준비사항
파이썬 2.4 버전 이상에서 정상 작동합니다!!
2.3에선 CJK코덱을 깔아도 안되더군요. -_-
이 프로그램은 문자천국(http://skysms.co.kr)을 이용합니다.
여기에 가입하셔야 합니다. -_-;;;;;;;;;;
하나포스 무료문자나, 네이트온 무료문자는.. 나중에 버전업 하면 추가할께요. -_-
문자천국은
유료는 아무때나 보낼 수 있고,
무료는, 점심 12시, 오후 6시에 각각 선착순 3천통이 무료입니다. (개인당은 하루 5건)
이 프로그램은 문자천국의 유료모드와, 무료모드를 모두 지원합니다.
무료모드는 당연히, 점심 12시, 오후 6시...라는 시간에 맞춰 실행해야 합니다.
그 이외의 시간에 실행하면.. 씹히더군요? orz
이 프로그램을 실행하려면,
Beautiful Soup 라이브러리와,
Twill 라이브러리가 필요합니다.
다운로드해서 같은 폴더에 넣어주거나, 파이썬의 라이브러리 폴더에 넣어야 합니다.
사용법! (Usage)
[무료모드] (점심 12시와, 오후 6시에 선착순 3천통.. 개인당은 하루에 5통)
프롬프트> python food2sms.py -f "아이디;비번;전화번호"
여러개도 됩니다.
프롬프트> python food2sms.py -f "아이디1;비번1;전화번호1" "아이디2;비번2;전화번호2"
[유료모드] (문자천국에서 문자 쿠폰을 구입한 경우..)
프롬프트> python food2sms.py -F "아이디;비번;전화번호"
// 당연히, 유료모드도 여러개 됩니다.
★ 이 프로그램의 소스파일의 인코딩이 UTF-8이 아니면, 에러 납니다. -_-;
★ 옵션 없으면 안됩니다. -_-;;;;;;;;
전체 소스코드 (UTF-8로 저장해야합니다. 위의 다운로드와 같은 내용입니다.)
- #!/usr/bin/python
# -*- coding: utf-8 -*-
# food2sms.py
# 숭실대학교 학식 문자 메시지 프로그램
# version: 2008.05.01.b
# coded by jong10
# need: http://twill.idyll.org/
# need: http://www.crummy.com/software/BeautifulSoup/
import sys
import re
import time
import urllib2
import codecs
from twill.commands import *
from BeautifulSoup import BeautifulSoup
print '-=+=-=+=< food2sms.py >=+=-=+=-'
if len(sys.argv) <= 2:
print 'Usage: python food2sms.py -(f|F) ["id;pass;phonenum"]...'
# -f : free mode
# -F : non-free mode
exit(1)
if sys.argv[1] == '-f':
url = 'http://skysms.co.kr/send_event/'
index = 9
elif sys.argv[1] == '-F':
url = 'http://skysms.co.kr/send_s/'
index = 14
else:
print "option is '-f' or '-F' only!"
exit(2)
####################################################
html = urllib2.urlopen('http://www.soongguri.com/inc.php?inc=weekly/weekly3').read()
html = html.decode('euc-kr', 'ignore').encode('utf-8')
soup = BeautifulSoup(html)
list = soup.fetch('td', {'height':'90%', 'class':'d', 'width':'100%', 'valign':'top'})
now = time.localtime()
p = re.compile('<.*?>')
lunch1 = p.sub('', str(list[ 6 + now.tm_wday]))
lunch2 = p.sub('', str(list[12 + now.tm_wday]))
dinner = p.sub('', str(list[24 + now.tm_wday]))
foods = []
foods.append("[점심A]\n" + lunch1)
foods.append("[점심B]\n" + lunch2)
foods.append("[저녁]\n" + dinner)
#for food in foods:
# print food
###################################################
args = sys.argv[2:]
for arg in args:
arg = arg.split(';')
userid = arg[0]
passwd = arg[1]
phone = arg[2]
go(url)
formvalue('login_form', 'userid', userid)
formvalue('login_form', 'passwd', passwd)
submit()
for food in foods:
go(url)
formvalue('msg_form', str(index), phone)
formvalue('msg_form', 'body', food.decode('utf-8').encode('euc-kr'))
submit()
동작 원리
실행을 하면..
숭실 생협(http://www.soongguri.com/inc.php?inc=weekly/weekly3) 에 접속을 해서..
Beautiful Soup 라이브러리로 html을 파싱해서..
그 요일에 해당하는 점심A, 점심B, 저녁 메뉴를 가져오고요.
Twill 라이브러리를 사용해서..
문자천국(무료:http://skysms.co.kr/send_event/ , 유료: http://skysms.co.kr/send_s/ )에 접속을 해서,
id, passwd 를 입력해서 로그인하고,
메뉴 3가지(점심A, 점심B, 저녁)을 순서대로..
내용에 채우고, 받는 사람 번호에 해당 번호를 써주고..
보내기 버튼을 클릭해줌.. (문자는 총 3통이 오게 됨..)
후기
수업시간에 이런 멋진 아이디어를 알려주신, 다즐링 선배님께 심심한 감사를 전합니다.
Beautiful Soup 좀 짱이네요. -_-;; Twill도 멋지고요.
네이트온이나 하나포스 등의 사이트는 쿠키가 필요해서.. Twill로 커버가 안되는 것 같더군요.
ClientForm이랑 ClientCookie를 사용해야 할 듯?
-- 망상을 달리는 프로그래머, Jong10 /(_^_)\