# 運彩小幫手-LINEBOT ###### tags: `LINEBOT` `python` `project` [TOC] ## Functions ```graphviz digraph hierarchy { nodesep=1.0 // increases the separation between nodes node [color=Red,fontname=Courier,shape=box] //All nodes will this shape and colour edge [color=Blue, style=dashed] //All the lines look like this 運彩小幫手->{賠率計算器 場中賽況} } ``` 1. 賠率計算器 2. 場中賽況 ## Tools ## Code 1. ### 計算對沖賠率與下注金額 ```python= import math import decimal def calc(): high_principle = int(input("下注本金 : ")) high_odds = float(input("下注賠率 : ")) #計算出可下注的最高金額 low_principle = high_principle * (high_odds -1) #無條件捨去,因為一注為10元 b = low_principle % 10 if int(b) != 9 : low_principle = low_principle - b else: low_principle = low_principle - b + 10 #計算出最少低賠率 low_odds = high_principle / low_principle + 1 buy_low_odds = decimal.Decimal(low_odds).quantize(decimal.Decimal('0.01'),rounding=decimal.ROUND_UP) print("------------------------------------") print("下注本金:{}".format(high_principle)) print("下注賠率:{}".format(high_odds)) print("可下注最高金額:{}".format(low_principle)) print("可下注最低賠率:{}".format(buy_low_odds)) print("------------------------------------") print("總金額:{}".format(high_principle + low_principle)) return def main(): calc() if __name__ == "__main__": main() ``` 2. ### 場中賽況 * **Flow chart** ```flow st=>start: 場中賽況 e=>end: 結束 op=>operation: 資料爬取 io=>inputoutput: 顯示比賽資訊 op2=>operation: 爬取場中投注schedule io2=>inputoutput: 顯示目前無比賽,顯示今日剩餘的單場場中投注比賽 cond=>condition: 目前場中是否有比賽? st->op->cond cond(yes)->io->e cond(no)->op2->io2->e ``` :::spoiler **Code** ```python= import json import requests import random from fake_useragent import UserAgent ua = UserAgent() user_agent = ua.random headers = {'user-agent': user_agent} res = requests.get("https://www.sportslottery.com.tw/api/services/app/LiveGames/GetLiveOnAndRegister?isContainRegister=false", headers = headers) #print(res.status_code) #顯示網頁回傳狀態 data = res.json() #Test json file in local #path = '2.json' #with open(path,"rb") as f : #data = json.load(f) #print(data) #讀取出來的資料型別為dict型 Game_data = data['result']['liveOn'] if len(Game_data) == 0: print("目前沒有任何賽事") else: for i in range(len(Game_data)): Game_name = Game_data[i]['ln'][0] player_one_chinese = Game_data[i]['atn'][0] player_one_english = Game_data[i]['atn'][1] player_two_chinese = Game_data[i]['htn'][0] player_two_english = Game_data[i]['htn'][1] player_one_score = Game_data[i]['as'].get('10') #當局分數 ex:tennis player_two_score = Game_data[i]['hs'].get('10') #當局分數 ex:tennis print("\n" + Game_name) print("{} : {}".format(player_one_chinese,player_two_chinese)) for b in range(len(Game_data[i]['as'])): b = b + 1 player_one_as = Game_data[i]['as'].get(str(b)) if player_one_as == -1 : break else: player_two_hs = Game_data[i]['hs'].get(str(b)) print("第{}局 {} : {}".format(b, player_one_as, player_two_hs)) #網球 if Game_data[i]['si'] == 445: print("{} : {}".format(player_one_score, player_two_score)) #動畫連結 #res1 = requests.get("https://h2h.sportslottery.com.tw/sportradar/zht/h2h.html?matchID={}".format(Game_data[i]['mi']), headers = headers) #if res1.status_code == 200: # print(res1) ball_type = Game_data[i]['si'] if ball_type == 441: time = Game_data[i]['ed'] print("比賽進行時間:{}".format(time[21:23])) ``` ::: :::spoiler **LINEBOT code** ```python= def game_processing(event): try: ua = UserAgent() user_agent = ua.random headers = {'user-agent': user_agent} res = requests.get("https://www.sportslottery.com.tw/api/services/app/LiveGames/GetLiveOnAndRegister?isContainRegister=false", headers = headers) #print(res.status_code) #顯示網頁回傳狀態 data = res.json() Game_data = data['result']['liveOn'] if len(Game_data) == 0: text4 = "目前沒有任何賽事" message = TextSendMessage( text = text4 ) line_bot_api.reply_message(event.reply_token,message) else: message =[] for i in range(len(Game_data)): Game_name = Game_data[i]['ln'][0] #比賽名稱 player_one_chinese = Game_data[i]['atn'][0] #中文名字 #player_one_english = Game_data[i]['atn'][1] #英文名字 player_two_chinese = Game_data[i]['htn'][0] #中文名字 #player_two_english = Game_data[i]['htn'][1] #英文名字 player_one_score = Game_data[i]['as'].get('10') #當局分數 ex:tennis player_two_score = Game_data[i]['hs'].get('10') #當局分數 ex:tennis text3 = Game_name + "\n" text3 += player_one_chinese + " : " + player_two_chinese + "\n" for b in range(len(Game_data[i]['as'])): b = b + 1 player_one_as = Game_data[i]['as'].get(str(b)) #分數 if player_one_as == -1 : break else: player_two_hs = Game_data[i]['hs'].get(str(b)) #分數 text3 += "第"+ str(b) +"局" + str(player_one_as) + " : " + str(player_two_hs) + "\n" #if player_one_score != -1: if Game_data[i]['si'] == 445: #網球 text3 += "當盤分數" + str(player_one_score) + " : " + str(player_two_score) + "\n" #當局分數 if Game_data[i]['si'] == 441: #足球 text3 += "目前進行時間 : " + Game_data[i]['ed'][21:23] + " 分鐘\n" #目前進行時間 res1 = requests.get("https://h2h.sportslottery.com.tw/sportradar/zht/h2h.html?matchID={}".format(Game_data[i]['mi']), headers = headers) if res1.status_code == 200 : text3 += "場中動畫連結\n" text3 += "https://h2h.sportslottery.com.tw/sportradar/zht/h2h.html?matchID=" + str(Game_data[i]['mi']) + "\n" message0 = TextSendMessage( text=text3 ) message.append(message0) line_bot_api.reply_message(event.reply_token,message) except: message1 = [ StickerSendMessage( package_id='2', sticker_id='161' ), TextSendMessage( text = "工程師正在修復中" ) ] line_bot_api.reply_message(event.reply_token, message1) ``` :::