Commit 4ca198df authored by wenwen.tang's avatar wenwen.tang 😕

增加彭博基金抓取逻辑

parent cf5e4abe
...@@ -54,7 +54,7 @@ class JDCDataSync(DataSync, ABC): ...@@ -54,7 +54,7 @@ class JDCDataSync(DataSync, ABC):
while True: while True:
url = self.build_urls(datum=datum, page=page, start_date=start_date) url = self.build_urls(datum=datum, page=page, start_date=start_date)
if url is None: if url is None:
raise Exception(f'''request data {datum['id']} not exist!''') break
response = requests.get(url).json() response = requests.get(url).json()
if not response['success']: if not response['success']:
raise Exception(f'''request indictor failed: {response['status']}''') raise Exception(f'''request indictor failed: {response['status']}''')
...@@ -177,7 +177,7 @@ class IndexSync(JDCDataSync): ...@@ -177,7 +177,7 @@ class IndexSync(JDCDataSync):
return next_workday(last['date']) if last else self.start_date return next_workday(last['date']) if last else self.start_date
def build_urls(self, datum, start_date, page=0) -> str: def build_urls(self, datum, start_date, page=0) -> str:
return f'http://jdcprod.thiztech.com/api/datas/index-value?page={page}&size=200&sourceCode={quote(datum["bloombergTicker"])}&sourceType=BLOOMBERG&startDate={format_date(start_date)}' return f'https://jdcprod.thiztech.com/api/datas/index-value?page={page}&size=200&sourceCode={quote(datum["bloombergTicker"])}&sourceType=BLOOMBERG&startDate={format_date(start_date)}'
def store_date(self, datumid, datas: List[dict]): def store_date(self, datumid, datas: List[dict]):
save_datas = [{ save_datas = [{
...@@ -211,7 +211,7 @@ class EcoSync(JDCDataSync): ...@@ -211,7 +211,7 @@ class EcoSync(JDCDataSync):
return next_workday(last['date']) if last else self.start_date return next_workday(last['date']) if last else self.start_date
def build_urls(self, datum, start_date, page=0) -> str: def build_urls(self, datum, start_date, page=0) -> str:
return f'http://jdcprod.thiztech.com/api/datas/eco-value?page={page}&size=200&sourceCode={quote(datum["bloombergTicker"])}&sourceType=BLOOMBERG&startDate={format_date(start_date)}' return f'https://jdcprod.thiztech.com/api/datas/eco-value?page={page}&size=200&sourceCode={quote(datum["bloombergTicker"])}&sourceType=BLOOMBERG&startDate={format_date(start_date)}'
def store_date(self, datumid, datas: List[dict]): def store_date(self, datumid, datas: List[dict]):
save_datas = [{ save_datas = [{
...@@ -229,7 +229,7 @@ class FundNavSync(JDCDataSync): ...@@ -229,7 +229,7 @@ class FundNavSync(JDCDataSync):
def __init__(self): def __init__(self):
super(FundNavSync, self).__init__() super(FundNavSync, self).__init__()
self._subject_keys = self.find_jdc_subject_key() self._jdc_querys = self.find_jdc_querys()
@property @property
def datum_type(self) -> DatumType: def datum_type(self) -> DatumType:
...@@ -240,20 +240,31 @@ class FundNavSync(JDCDataSync): ...@@ -240,20 +240,31 @@ class FundNavSync(JDCDataSync):
return next_workday(last['nav_date']) if last else self.start_date return next_workday(last['nav_date']) if last else self.start_date
def build_urls(self, datum, start_date, page=0) -> str: def build_urls(self, datum, start_date, page=0) -> str:
if datum['id'] not in self._subject_keys: if datum['id'] not in self._jdc_querys:
return None return None
key = self._subject_keys[datum['id']] querys = self._jdc_querys[datum['id']]
return f'http://jdcprod.thiztech.com/api/datas/asset-value?subjectKeys={key}&page={page}&size=200&sourceType=TW&startDate={format_date(start_date)}' query_str = '&'.join([f'{x[0]}={quote(str(x[1]).encode())}' for x in querys.items()])
return f'https://jdcprod.thiztech.com/api/datas/asset-value?page={page}&size=200&startDate={format_date(start_date)}&{query_str}'
def find_jdc_subject_key(self):
funds = {x['isin']: x for x in self._datum.get_datums(type=DatumType.FUND)} def find_jdc_querys(self):
response = requests.get('http://jdcprod.thiztech.com/api/subject?busiField=TW&sourceType=TW&subjectType=FUND') funds = self._datum.get_datums(type=DatumType.FUND, exclude=False)
urls = {x['id']: {
'sourceCode': x['bloombergTicker'],
'sourceType': 'BLOOMBERG'
} for x in funds if 'ftTicker' not in x and 'bloombergTicker' in x}
ft_tickers = {x['ftTicker']: x for x in funds if 'ftTicker' in x}
response = requests.get('https://jdcprod.thiztech.com/api/subject?busiField=TW&sourceType=TW&subjectType=FUND')
response = response.json() response = response.json()
if not response['success']: if not response['success']:
raise CollectError(f'''find fund subject failed: {response['status']}''') raise CollectError(f'''find fund subject failed: {response['status']}''')
content = response['body']['content'] return {**urls, **{
content = [x for x in content if x.get('isin')] ft_tickers[x['fundId']]['id']: {
return {funds[x['isin']]['id']: x['key'] for x in content if x['isin'] in funds} 'subjectKeys': x['key'],
'sourceType': 'TW'
} for x in response['body']['content'] if x['fundId'] in ft_tickers
}}
def store_date(self, datumid, datas: List[dict]): def store_date(self, datumid, datas: List[dict]):
save_navs = [{ save_navs = [{
...@@ -287,7 +298,7 @@ class ExrateSync(DataSync): ...@@ -287,7 +298,7 @@ class ExrateSync(DataSync):
return [x['ticker'] for x in navs_config['exrate']] if 'exrate' in navs_config else [] return [x['ticker'] for x in navs_config['exrate']] if 'exrate' in navs_config else []
def build_url(self, ticker, start_date, page=0): def build_url(self, ticker, start_date, page=0):
return f'http://jdcprod.thiztech.com/api/datas/exrate-value?page={page}&size=200&sourceCode={quote(ticker)}&sourceType=BLOOMBERG&startDate={format_date(start_date)}' return f'https://jdcprod.thiztech.com/api/datas/exrate-value?page={page}&size=200&sourceCode={quote(ticker)}&sourceType=BLOOMBERG&startDate={format_date(start_date)}'
def do_sync(self, max_date=dt.today()): def do_sync(self, max_date=dt.today()):
logger.info(f'start sync datas for type[EXRATE]') logger.info(f'start sync datas for type[EXRATE]')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment