A

A

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로 저장해야합니다. 위의 다운로드와 같은 내용입니다.)
  1. #!/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를 사용해야 할 듯?

Machanize로 해도 된다는 듯.

 

-- 망상을 달리는 프로그래머, Jong10 /(_^_)\

 

Recent Updates
    All Pages
      Show/Hide the left navigation
      Show/Hide bookmarks

      Header

      1. View current page

        종텐의 작업실

      loginBar