Ich habe vor ungefähr einem halben Jahr angefangen zu lagern, aber ich habe es nicht geschafft, wie sich mein Vermögen überhaupt verändert hat, also habe ich ein Programm erstellt, um es automatisch zusammenzustellen, also möchte ich es veröffentlichen.
Da ich SBI-Wertpapiere verwende, ist die folgende Methode zum Erwerb des Vermögenswerts mit SBI-Wertpapieren. Ich denke, dass andere Wertpapierfirmen es verwenden können, wenn dieser Teil geändert wird (ich weiß nicht). Erhalten Sie das Barguthaben vom Startbildschirm und den Marktwert (inländische Aktien und Investment Trusts) vom Portfolio-Bildschirm.
** Barguthaben auf dem Startbildschirm ** Da die Menge hier geschrieben steht, werde ich sie mit Selen holen. Es wäre schön, wenn es eine API gäbe, die so viel unterstützt, aber da es keine gibt, werde ich den schlammigen HTML-Code analysieren und abrufen.
** Erwerb von Marktwert ** Klicken Sie hier, um die CSV-Datei herunterzuladen. Ermitteln Sie den Marktwert, indem Sie die CSV-Datei analysieren (in der letzten Zeile der CSV-Datei). *** Ich wünschte, ich hätte eine API, die mich so sehr unterstützen würde. .. .. *** ***
Ich habe beschlossen, den Asset-Übergang mit Google SpreadSheet zu verwalten.
** Google-Blattstruktur **
Wenn Sie eine Aktie besitzen, ändert sich die Menge der Vermögenswerte jeden Tag, aber ich glaube nicht, dass Sie sie jeden Tag aufzeichnen. Sie können das Programm also nur am Sonntag unter crontab ausführen. Ich habe es pünktlich laufen lassen. Übrigens läuft es auf Raspberry Pi.
0 16 * * 0 cd /home/pi/asset-management && python3 run.py
#Minute Stunde Tag Montag Tag Befehl
** Verzeichnisaufbau **
.
├── .credentials.json
├── .sbi.yaml
├── .token.pkl
├── data
│ └── 2020-08-16.csv
└── run.py
** Benutzerinformationen von SBI Securities **
yaml:.sbi.yaml
username:Benutzername von SBI Securities
password:SBI Securities-Anmeldekennwort (kein Transaktionskennwort)
** Hauptprogramm **
run.py
import os
import pickle
from datetime import datetime
import yaml
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
### constants
CHROME_DRIVER_PATH = "/usr/bin/chromedriver"
SBI_URL = "https://www.sbisec.co.jp/ETGate"
SBI_HOME_URL = #URL des Startbildschirms von SBI Securities
SBI_ASSET_URL = #URL des Roten hier
SBI_INFO = ".sbi.yaml"
DOWNLOAD_PATH = os.path.abspath("data")
# google api
CRED_TOKEN = ".token.pkl"
GSHEET_ID = #Google Sheet ID
GSHEET_RANGE = "sbi-jp!A1"
# webdriver
driver = None
def setup_webdriver(headless=True):
global driver
options = Options()
options.headless = headless
options.add_experimental_option("prefs", {"download.default_directory" : DOWNLOAD_PATH})
driver = webdriver.Chrome(CHROME_DRIVER_PATH, options=options)
def quit_webdriver():
global driver
driver.quit()
def login_to_sbi():
with open(SBI_INFO, "r") as f:
info = yaml.safe_load(f)
driver.get(SBI_URL)
username_form = driver.find_element_by_id("user_input")\
.find_element_by_name("user_id")
username_form.send_keys(info["username"])
password_form = driver.find_element_by_id("password_input")\
.find_element_by_name("user_password")
password_form.send_keys(info["password"])
login_button = driver.find_element_by_name("ACT_login")
login_button.click()
def get_cash_amount():
driver.get(SBI_HOME_URL)
cash = driver.find_element_by_class_name("tp-table-01")\
.find_element_by_class_name("tp-td-01")\
.find_element_by_tag_name("span")
return cash.text
def get_market_value(timestamp):
asset_file = f"{DOWNLOAD_PATH}/{timestamp}.csv"
driver.get(SBI_ASSET_URL)
os.rename(f"{DOWNLOAD_PATH}/New_file.csv", asset_file)
with open(asset_file, "r", encoding="shift_jis") as f:
content = f.read()
ll = content.split("\n")[-2].split(",")
return ll[0]
def get_credential():
creds = None
SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly',
"https://www.googleapis.com/auth/spreadsheets"]
# The file token.pickle stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
if os.path.exists(CRED_TOKEN):
with open(CRED_TOKEN, 'rb') as token:
creds = pickle.load(token)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'.credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the credentials for the next run
with open(CRED_TOKEN, 'wb') as token:
pickle.dump(creds, token)
return creds
def update_gsheet(vals):
creds = get_credential()
service = build('sheets', 'v4', credentials=creds)
body = {"values": [vals]}
# Call the Sheets API
resp = service.spreadsheets()\
.values()\
.append(spreadsheetId=GSHEET_ID,
range=GSHEET_RANGE,
valueInputOption="USER_ENTERED",
insertDataOption="INSERT_ROWS",
body=body)\
.execute()
def main():
timestamp = datetime.now().strftime('%Y-%m-%d')
setup_webdriver()
login_to_sbi()
cash = get_cash_amount()
value = get_market_value(timestamp)
quit_webdriver()
update_gsheet([timestamp, cash, value])
if __name__ == '__main__':
main()
Recommended Posts