Найти тему
why_train

dotenv: храним токены отдельно от кода

Оглавление

Взаимодествие с API (например, при разработке ботов или получении информации) часто подразумевает использование всевозможных токенов. Хранить их прямо в коде - не лучшая идея со всех точек зрения: это неудобно, непрактично, а главное, небезопасно.

Один из очевидных спосбов избежать этой проблемы - использовать переменные окружения для их хранения. Для Python существует достаточно большое количество библиотек, позволяющих использовать этот прием. Одна из таких библиотек - python-dotenv. Она позволяет в пару строчек кода вытаскивать все нужные ключи из предварительно созданного .env-файла.

Испробуем все на практике.

Подготовка

Допустим, нам необходимо получить информацию о финансовых рынках с помощью удобного и бесплатного API Alpaca Trading. Допустим, мы хотим узнать, как дела у Яндекса на бирже NASDAQ.

Регистрируемся на Alpaca Trading
Регистрируемся на Alpaca Trading

Для этого нам понадобиться:

1) установить необходимые для работы библиотеки:

pip3 install python-dotenv

pip3 install alpaca-trade-api

2) зарегистрироваться на Alpaca trading и получить токен и секретный ключ

3) создать .env-файл в папке, в которой будет размещаться код и сохранить в нем ключи из пункта 2.

-2

Пишем код

Импортируем все необходимое:

import os
import alpaca_trade_api as alpaca
import mplfinance as mpf
import pandas as pd
from dotenv import load_dotenv, find_dotenv

Получаем наши ключики из переменных окружения:

load_dotenv(find_dotenv())

API_KEY = os.environ.get('ALP_TOKEN')
API_SECRET = os.environ.get('ALP_KEY')

Присоединяемся к API и получаем нужные нам данные:

api = alpaca.REST(API_KEY, API_SECRET, 'https://paper-api.alpaca.markets')

df = api.get_barset('YNDX', 'day', limit=42).df['YNDX']

Чтобы построить график на основе получившихся данных с помощью mplfinance, нужно поменять названия столбцов (иначе программа завершится с ошибкой KeyError):

df.rename(columns={'open': 'Open',
'high': 'High',
'low': 'Low',
'close': 'Close',
'volume': 'Volume'},
inplace=True)

Ну и построим график (как строить графики mplfinance):

mpf.plot(df, type='candle',
title='YNDX - 42 days',
ylabel='Index Level',
style='nightclouds')

Цена акций Яндекс на NASDAQ
Цена акций Яндекс на NASDAQ

Подробнее об использовании переменных окружения можно почитать, например, на Хабре, а посмотреть примеры реализации - в книге Personal Finance with Python, из которой я собственно и узнал об этой замечательной библиотеке.

Как всегда, код на github.