원본출처: 티스토리 바로가기
https://play.google.com/store/apps/details?id=com.billcoreatech.getLotto
앱을 하나 또 게시 했어요. 기능 구현을 위해서 firebase을 사용하고
번호 전달을 위해 python을 이용 했습니다. random 번호를 추출하기 때문에 당첨이 되거나 하지는 않겠지만,
python을 이용해서 firebase readtime database 을 활용하는 방법이 나올 듯 합니다.
또한 24시간 365일 컴터 하나를 켜 두어야 하는데, 그럴 수는 없으니, rasberry pi 3 을 사용하기로 했습니다.
os 는 linux 계열를 사용했구요.
crontab 에 등록을 해 두었기 때문에 매일 반복적인 작업이 가능 합니다.
게시된 앱의 설명이에요.
import datetime import json import random import sqlite3 # 2021.11.13 FCM 전송을 위한 수정 import firebase_admin import requests import telegram import urllib3 from bs4 import BeautifulSoup from firebase_admin import credentials from firebase_admin import db conn = sqlite3.connect("opDeGangDB.sqlite", isolation_level=None) # 커서 획득 rs = conn.cursor() # 테이블 생성 (데이터 타입은 TEST, NUMERIC, INTEGER, REAL, BLOB 등) rs.execute(''' CREATE TABLE IF NOT EXISTS LottoResult (id integer PRIMARY KEY, hei text, num1 text, num2 text, num3 text, num4 text, num5 text, num6 text, bonus text) ''') rs.execute(''' select max(cast(hei as integer)) from LottoResult ''') getHei = rs.fetchone()[0] print(getHei) rs.execute(''' delete from LottoResult where hei = {0} '''.format(getHei)) def getNumParase(getNum): # print(getNum) x = getNum.split('+') bonus = x[1].replace('.','') num = x[0].split(',') num.append(bonus) return num baseUrl = "https://dhlottery.co.kr/gameResult.do?method=byWin" for id in range(getHei, getHei+2): parameter = {'drwNo': id} res = requests.post(baseUrl, params=parameter) bs = BeautifulSoup(res.text, 'html.parser') desc = bs.find(id="desc") getText = desc['content'] getNow = getText.split(' ')[1].replace('회','') getNum = getNumParase(getText.split(' ')[3]) print(getNow + " " + str(getNum)) try: rs.execute(''' insert into LottoResult (hei, num1, num2, num3, num4, num5, num6, bonus) values ({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}) '''.format(getNow, getNum[0], getNum[1], getNum[2], getNum[3], getNum[4], getNum[5], getNum[6])) except: pass token = "2052..........................FBZM71o" id = "8.....0" bot = telegram.Bot(token) now = datetime.datetime.now() androidMsg = "이번 주({0}) 로또 번호를 알려 드려요...\n".format(now) bot.sendMessage(chat_id=id, text=androidMsg) # randint 을 이용해서 숫자 만들기 def getNum(): number = [] for i in range(0, 6): iNo = random.randint(1, 45) try: number.index(iNo) except: number.append(iNo) return number def getLotto645(androidMsg): for i in range(0, 5): while True: numX = getNum() numX.sort() if len(numX) == 6: break androidMsg += json.dumps(numX) + "\n" return androidMsg bot.sendMessage(chat_id=id, text="행복한 한 주 되세요") #Firebase database 인증 및 앱 초기화 cred = credentials.Certificate('./services_firebase.json') firebase_admin.initialize_app(cred,{ 'databaseURL' : 'https://getlo.....................atabase.app' }) def lambda_handler(token, context): FCMToken = token Data = {'data': {'title': 'Lotto 보내 드립니다.', 'body': context}, 'to': FCMToken} Headers = {'Content-type': 'application/json', 'Authorization': 'Key=AAAAR_0M6y...................xVA-T9frSd3VCSUIRXXn1PSxhOKgqroBVqTaxmWk'} http = urllib3.PoolManager().request('POST', 'https://fcm.googleapis.com/fcm/send', headers=Headers, body=json.dumps(Data)) return {'statusCode': 200, 'body': json.dumps('Hello from Lambda!')} days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] weekDay = datetime.datetime.today().weekday() userInfo = db.reference('UserInfo') sendNumber = db.reference('sendNumber') # print(type(userInfo.get())) for val in userInfo.get().values(): # 오늘 보내야 하는 것만 보냄. if val["weeklyReceived"] in days[weekDay]: androidMsg = "" # 범호를 구하고 androidMsg = getLotto645(androidMsg) # 번호를 보내주고 lambda_handler(val['userToken'], androidMsg) print('send to ' + val['userToken'] + " " + val["weeklyReceived"] + " sendNumber(" + androidMsg + ")") # 보내준 번호 기록 sendNumber.update({val['accountId'] : {'accountId': val['accountId'], 'sendNumber': androidMsg, 'sendDateTime': '{0}'.format(datetime.datetime.now())}}) print('END JOB ...')
자료 전송을 위해서 SQlite 을 이용해서 파싱된 데이터를 참조해서 로또 당첨 번호를 기록해 두고 있어요.
중간에 lambda_handler 함수는 다른 분이 posting 하신 코드를 참조해서 FCM 전송을 하고 있는데, 설정만 잘 하면 전송 하는 것은 문제가 없이 잘 사용하고 있습니다.
좋은 일이 있기를 바래요.
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
댓글
댓글 쓰기