J'ai commencé à stocker il y a environ six mois, mais je ne gérais pas du tout l'évolution de mes actifs, j'ai donc créé un programme pour les assembler automatiquement, alors j'aimerais le publier.
Puisque j'utilise SBI Securities, voici la méthode pour acquérir le montant des actifs avec SBI Securities. Je pense que d'autres sociétés de valeurs mobilières peuvent l'utiliser si cette partie est modifiée (je ne sais pas). Obtenez le solde de trésorerie à partir de l'écran d'accueil et la valeur marchande (actions nationales et fiducies de placement) à partir de l'écran de portefeuille.
** Solde de trésorerie sur l'écran d'accueil ** Puisque le montant est écrit ici, je vais le chercher avec du sélénium. Ce serait bien s'il y avait une API qui prendrait autant en charge cela, mais comme il n'y en a pas, je vais analyser et obtenir le HTML trouble.
** Acquisition de valeur marchande ** Cliquez ici pour télécharger le fichier csv. Obtenez la valeur marchande en analysant le fichier csv (écrit sur la dernière ligne du fichier csv). *** J'aurais aimé avoir une API qui me soutiendrait autant. .. .. *** ***
J'ai décidé de gérer la transition des éléments avec Google SpreadSheet.
** Structure de la feuille Google **
Si vous possédez un stock, la quantité d'actifs change tous les jours, mais je ne pense pas que vous enregistrez tous les jours, vous ne pouvez donc exécuter le programme que le dimanche sur crontab Je l'ai fait fonctionner à l'heure. Au fait, il fonctionne sur Raspberry Pi.
0 16 * * 0 cd /home/pi/asset-management && python3 run.py
#Commande minute heure jour lundi jour
--Spécifiez la destination de téléchargement du fichier avec du sélénium
** Structure du répertoire **
.
├── .credentials.json
├── .sbi.yaml
├── .token.pkl
├── data
│ └── 2020-08-16.csv
└── run.py
** Informations utilisateur SBI Securities **
yaml:.sbi.yaml
username:Nom d'utilisateur SBI Securities
password:Mot de passe de connexion SBI Securities (pas le mot de passe de transaction)
** Programme principal **
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 de l'écran d'accueil de SBI Securities
SBI_ASSET_URL = #URL du rouge ici
SBI_INFO = ".sbi.yaml"
DOWNLOAD_PATH = os.path.abspath("data")
# google api
CRED_TOKEN = ".token.pkl"
GSHEET_ID = #ID de feuille Google
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