This repository has been archived by the owner on Jun 22, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspread_sheet_dataset_retreiver.py
133 lines (102 loc) · 5.21 KB
/
spread_sheet_dataset_retreiver.py
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
"""
■ ご依頼その3
このプログラムを実行……
python spread_sheet_dataset_retreiver.py
したとき、レース 65 の「予想」と「着順」データが
print されるように、関数 retreive を作ってください!
"""
#必要モジュールの準備
import pandas as pd
import gspread
#ServiceAccountCredentials:Googleの各サービスへアクセスできるservice変数を生成します。
from oauth2client.service_account import ServiceAccountCredentials
from gspread_dataframe import set_with_dataframe
from time import sleep
# User modules.
import consts
seat_dict = {
'sample-id-1':'ササキ',
'sample-id-2':'コバヤシ',
'sample-id-3':'ウエハラ',
'sample-id-4':'マツノ',
'sample-id-5':'アカミネ',
'sample-id-6':'フクヤマ',
'sample-id-7':'トヨシ',
}
#2つのAPIを記述しないとリフレッシュトークンを3600秒毎に発行し続けなければならない
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
#認証情報設定
# NOTE: もともとは from_json_keyfile_name で json ファイルから credentials を作っていました。
# しかし秘密鍵である json ファイルを repository に含めると、 GitHub で公開できません!
# なので from_json_keyfile_dict に変更して、 json ファイルがなくても動くようにしました。
credentials = ServiceAccountCredentials.from_json_keyfile_dict(
consts.GSPREAD_CREDENTIAL_JSON,
scope,
)
#OAuth2の資格情報を使用してGoogle APIにログインします。
gc = gspread.authorize(credentials)
#共有設定したスプレッドシートキーを変数[SPREADSHEET_KEY]に格納する。
SPREADSHEET_KEY = '1pCTN9momqKlH4UtTRTf11yqXW2nI3grXUzRpbu6M6Tw'#スプレッドシートのd/〜〜/までをコピー。
def retreive(race_held_yyyy_mm_dd):
# ここを埋めてほしい。
#####################################
# 各ユーザーのシートの払戻金額から的中判定する。
#シートのリストを取得。
seat_dict_key_list = list(seat_dict.keys())
print_name_list = []
####################################
# seat_dict_key_listの数だけ下記を回す。
for _ in range(len(seat_dict_key_list)):
#ワークシート名
SP_SHEET = seat_dict[seat_dict_key_list[_]]
#共有設定したスプレッドシートを開く
sh = gc.open_by_key(SPREADSHEET_KEY)
#ワークシートの選択
worksheet_user = sh.worksheet(SP_SHEET)
#スプレットシートの全データを取得
data_users = worksheet_user.get_all_values()
#pandasでindex番号を取得
#上から2列目を無視上から1列目をカラムとする。indexは開催年月日とする。
df_accurate_decision = pd.DataFrame(data_users[2:],columns=data_users[1]).set_index('開催年月日')
# 開催年月日と比較したいのでrace_held_yyyy_mm_ddを編集
acquisition_date = race_held_yyyy_mm_dd.replace('-','/')
#結果発表のレース名を取得
race_name = df_accurate_decision.at[acquisition_date,'レース名']
#取得したいcolumns名を定義
columns_get_list = ['単勝','馬連','馬単','3連複','3連単']
#各払戻を加算して0以上なら的中が合ったと判断する。
accurate_decision = 0
print(seat_dict[seat_dict_key_list[_]])
for column_get_list in columns_get_list:
number_conversion = df_accurate_decision.at[acquisition_date,column_get_list].replace('¥','')
number_conversion = number_conversion.replace(',','')
accurate_decision += int(number_conversion)
#払戻情報があれば的中者としてprint_name_listにappendする。
if accurate_decision > 0:
print_name_list.append(seat_dict[seat_dict_key_list[_]])
print(accurate_decision)
#的中報告のprint_nameを作成。
if len(print_name_list) > 0:
print_name = '\n'.join(print_name_list)
else:
print_name = ('今回的中者はいません!!\n\n競馬何年やってますのん!?\nひとりぐらい当たらんけぇ〜・・・')
# 開催年月日が一致するindex番号を取得
# 次回のレース日程とレース名を取得
cell_index_no = 0
cell_index_no = df_accurate_decision.index.get_loc(acquisition_date)
try:
next_race_date = df_accurate_decision.index.values[cell_index_no + 1]
next_race_name = df_accurate_decision.iat[cell_index_no + 1,0]
except:
next_race_date = 'ありません。'
next_race_name = '次回は、来年の分'
# この print の中に、データがきちんと入るように作ってほしい
line_accurate_report = ('【' + race_name + '的中報告】\n' + print_name +'\n'
+'\n'+'※次回のG1ポイントレースは、\n'
+ next_race_date + ':' + next_race_name + 'です。\n'
+'\n【スプレッドシート URL】\n'+
'https://docs.google.com/spreadsheets/d/1pCTN9momqKlH4UtTRTf11yqXW2nI3grXUzRpbu6M6Tw/edit#gid=0'
)
return line_accurate_report
if __name__ == '__main__':
print(retreive('2021-12-19'))