지난번 포스팅 URL : https://hackyu.kr/97
우선 지난 게시글에서 추후 개발할 것들에 나열했던 것들이 있는데, 두번째 이야기 작성 전 다시 읽어보고 변경되는 부분에 대해 먼저 정리한다.
[지난 포스팅 내용 중 변경되는 부분]
- 번호가 마음에 안드는 경우 재추첨 기능
#삭제 이유: 랜덤 결과 수용
-Seed 적용 ex) int(time.time() % int(time.time())*10000000000000000)
# 삭제 이유: python random.random은 0~1 사이의 난술 Seed를 별도로 안주어도 될 것으로 판단
- 1차 예외처리
#아직 예외처리 할 단계가 아님
- 매주 동행복권에 충전해서 결제일을 알리기 위한 Push 알람(SMS, App, E-mail 중 1개, 셋중 하나 만들어보고 추후 결정할 듯)
#삭제 이유: 결제일을 알리기 위한 Push 알람 필요 없음 (매달 1일에 충전을 할 계획 수동 or 자동)
- 본 프로그램으로 당첨률, 낙첨률 계산
#삭제 이유: 직접 개발한 프로그램으로 당첨률 및 낙첨률 데이터가 필요한 것이 아님
- 복권 추첨번호 비율
기존 : 로또 3, 연금복권 2
변경 : 로또 2, 연금복권3 (로또 -1, 연금복권의 서비스 번호 +1)
변경된 이유: 연금복권의 서비스 경우 조에 상관이 없기에 로또의 비중을 -1하고 연금복권 서비스 번호에 +1 하는 것이 더 좋을 것이라고 판단함.
[Push 알람]
**Push를 어디서 트리거 해야하나?
1) Desktop or Laptop
- 일주일 중 일반적으로 평일 AM 09:00 ~ PM 18:00 Laptop On, Desktop 불규칙(휴가일 경우 모름)
주말의 경우 Laptop의 On은 불규칙, Desktop도 불규칙(주말에 이거땜에 항상 켜놓는다? NO!)
결론: 평일 주중 중 돌리는 것이 Base 이며, 스스로를 생각해 보았을 때 주중(월 ~ 금)에 수요일에 휴가를 사용하지 않음
매주 수요일에 번호 알림(Push)
Azure, Devops, IFTTT에 대해 찾아보았지만, 우선적으로 Push에 집중 추후 해당 플랫폼들에 대해 찾아보고 익숙해지면 전환할지도 모름
[Telegram을 이용한 Push 구현]
참고 URL : https://core.telegram.org/bots
1-1) getUpdate
Telegram의 BotFather를 이용
/newbot을 통해 Bot 생성 후 Token 발급받음
생성된 Bot에게 메시지 보냄
Token을 윈도우의 환경변수로 설정하였고, Token을 통해 Chat_id와 text인 최근 토큰에 대한 대화방에 업데이트 내용을 Get
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import requests, os, json
# 환경 변수 PATH에 등록된 토큰 값 get
token = os.getenv('hackyu_LotteryBot')
# 해당 토큰의 업데이트 내용(대화 내용)을 요청하여 받을 수 있음
url = "https://api.telegram.org/bot{}/getUpdates".format(token)
res = json.loads(requests.get(url).text) # 대화 내용 중 한글과 같이 유니코드로 표현되는 문자가 있을 수 있기에 편의성을 위해 응답 값을 json으로 변환
# res['result'][-1]의 의미 : 해당 토큰에서의 마지막 및 최근 업데이트
# chatid (채널 아이디) : res['result'][-1]['message']['from']['id']
# text (메시지 내용) : res['result'][-1]['message']['text']
print(res['result'][-1]['message']['from']['id'])
print(res['result'][-1]['message']['text'])
|
cs |
위의 스크립트 실행결과로 Chat_id와 text인 마지막 업데이트된 내용 Get 확인
1-2) sendMessage
1-1) getMessage에서 사용한 스크립트로 얻어진 chat_id와 text를 이용하여 최근 대화내용을 get하고 Bot에게 메세지로 전달하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import requests, os, json
token = os.getenv('hackyu_LotteryBot')
# getUpdates 해당 토큰의 최근 대화 내용 가져오기
url = "https://api.telegram.org/bot{}/getUpdates".format(token)
res = json.loads(requests.get(url).text)
# 가져온 대화 내용을 보내기 위해 chat_id와 text 값을 구하기
chat_id = res["result"][-1]["message"]["from"]["id"]
msg = res["result"][-1]["message"]["text"]
# 가져온 최근 대화 내용을 Bot에게 메세지로 전달하기 (text value로 메세지를 전달)
url = 'https://api.telegram.org/bot{}/sendMessage'.format(token)
requests.get(url, params = {"chat_id":chat_id, "text":msg})
|
cs |
위의 스크립트를 실행하여 Bot이 메세지 전달하는 것을 확인함.
1-3) Lottery Number Message Send to my Telegram
로컬에서 생성한 복권번호를 Telegram Bot에게 전달
코딩 작성 완료 후 당일에는 정상적으로 getUpdate를 통해서 token에 해당하는 value를 얻어왔는데, 다음날(날짜가 지나니) chat_id, text 등 최근 update value를 얻어오지 못하는 것을 확인하였다.
그리고 추가적으로 chat_id는 고정적으로 사용이 가능한 것으로 확인하여 chat_id값을 로컬의 환경변수로 설정하여 전역변수로 사용하여 send하기로 했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
import requests, os, json, time, random
''' Function Lotto '''
def Lotto():
global msg
msg += "####### hackyu\'s Lotto #########\n"
loop_count = 2
result = []
for i in range(loop_count):
temp = []
while True:
time.sleep(0.5)
if len(temp) == 6:
break
else:
temp2 = random.randint(1,45)
if temp2 not in temp:
temp.append(temp2)
temp.sort()
if temp not in result:
result.append(temp)
for i in range(len(result)):
msg += str(i+1) + "번째 게임 결과: " + str(result[i]) + "\n"
''' Function Pension '''
def Pension():
global msg
msg += "\n\n####### hackyu\'s Pension #######\n"
table = [1,2,3,4,5] #연금복권 조는 총 5개 1~5조
temp_table = random.choice(table)
msg += "첫번째 조: " + str(temp_table) + "\n"
table.remove(temp_table)
msg += "두번째 조: " + str(random.choice(table)) + "\n"
msg += "자동생성 번호: " + str(random.randint(0, 999999)).zfill(6) + "\n"# 000000 ~ 999999
msg += "서비스 번호: " + str(random.randint(0, 999999)).zfill(6) # 000000 ~ 999999
''' Fuction SendTelegram '''
def SendTelegram():
global msg
global token
global chat_id
url = "https://api.telegram.org/bot{}/getUpdates".format(token) # getUpdates 해당 토큰의 최근 대화 내용 가져오기
res = json.loads(requests.get(url).text)
url = 'https://api.telegram.org/bot{}/sendMessage'.format(token) # 가져온 최근 대화 내용을 Bot에게 메세지로 전달하기 (text value로 메세지를 전달)
requests.get(url, params = {"chat_id":chat_id, "text":msg})
if __name__ == "__main__":
token = os.getenv('hackyu_LotteryBot')
chat_id = os.getenv('Telegram_Chat_id')
msg = ""
Lotto()
Pension()
SendTelegram()
|
cs |
위의 스크립트 실행
스크립트 실행 결과로 Telegram Bot이 대화창에 복권 추첨번호를 전달하는 것을 확인함.
이제 이것을 주기적인 시간에 작업하도록 윈도우 작업 스케줄러 설정을 하면 자동으로 실행하여 복권 추첨번호를 나의 모바일에 있는 Telegram 앱으로 Push하여 알림을 받을 수 있다!!!
1-4) 윈도우 작업 스케줄러를 통해 매주 수요일 Push(알림) Send
(매주 수요일 로또는 금주 추첨, 연금은 차주 추첨)
[마무리]
- 매달 1일 동행복권 사이트에 2만원씩 충전을 하고, 매주 수요일에 Telegram을 통해 push를 받도록 구현
- 다음 작업에 필요한 부분을 '추후 고려해봐야 할 점 또는 해볼만하다고 생각하는 것'과 1회차와 2회차의 내용을 종합적으로 확인해보고 추가적으로 필요하다고 생각되는 부분 구현하기
ex) '당첨 결과 Push', '충전필요여부 확인 후 push', '복권번호 재발급(사용자의 선택을 위해)', '로또 반자동)' 등
'ETC' 카테고리의 다른 글
Mac OS /home 디렉토리 사용기(결국사용안함) (0) | 2021.01.03 |
---|---|
Crontab KST 설정 (0) | 2021.01.03 |
복권번호 자동생성 프로그램 제작(Python) (0) | 2020.07.26 |
JBoss Wild Fly SSL 설정 (JBoss WildFly SSL Setting) (0) | 2020.04.20 |
Ubuntu 18.04 Sublime Text 설치 (0) | 2019.12.05 |