Skip to content

Commit

Permalink
Fetch daily data
Browse files Browse the repository at this point in the history
  • Loading branch information
suminb committed Jan 10, 2018
1 parent 88cca3f commit 87d69af
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 8 deletions.
27 changes: 21 additions & 6 deletions finance/providers/yahoo.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import json

from bs4 import BeautifulSoup
import requests

from finance.models import Granularity
Expand Down Expand Up @@ -28,8 +27,8 @@ def get_url(self, symbol):
def asset_values(self, symbol, start_time, end_time,
granularity=Granularity.day):
mappings = {
Granularity.day: self.fetch_data_for_day,
Granularity.min: self.fetch_data_for_minute,
Granularity.day: self.fetch_daily_data,
Granularity.min: self.fetch_data_by_minutes,
}

try:
Expand All @@ -39,10 +38,26 @@ def asset_values(self, symbol, start_time, end_time,

return self.filter_empty_rows(rows)

def fetch_data_for_day(self, symbol, start_time, end_time):
raise NotImplementedError
# NOTE: 'Data by day' would keep the name consistent, but 'daily data'
# sounds more natural.
def fetch_daily_data(self, symbol, start_time, end_time):
url = self.get_url(symbol)

params = {
'symbol': symbol,
'period1': int(start_time.timestamp()),
'period2': int(end_time.timestamp()),
'interval': '1d',
'includePrePost': 'true',
'events': 'div%7Csplit%7Cearn',
'corsDomain': 'finance.yahoo.com',
}
resp = requests.get(url, params=params)
rows = self.parse_chart_data(resp.text)

return rows

def fetch_data_for_minute(self, symbol, start_time, end_time):
def fetch_data_by_minutes(self, symbol, start_time, end_time):
url = self.get_url(symbol)

params = {
Expand Down
4 changes: 2 additions & 2 deletions tests/test_providers.py
Original file line number Diff line number Diff line change
Expand Up @@ -183,12 +183,12 @@ def test_miraeasset_transactions(param):
assert record.currency in ['KRW', 'USD']


def test_yahoo_provider():
@pytest.mark.parametrize('granularity', [Granularity.min, Granularity.day])
def test_yahoo_provider(granularity):
provider = Yahoo()
symbol = 'MSFT'
start_time = datetime.combine(parse_date(-7), time(0))
end_time = datetime.utcnow()
granularity = Granularity.min
asset_values = \
provider.asset_values(symbol, start_time, end_time, granularity)
flag = False
Expand Down

0 comments on commit 87d69af

Please sign in to comment.