from utils.comm import * def stock_web_api_method_decorator(func): def wrapper(*args, **kwargs): return func(*args, **kwargs) return wrapper @stock_web_api_method_decorator def stock_web_api_money_flow(start_date=None, end_date=None): # 沪深港通资金流向 df = xcsc_pro.moneyflow_hsgt(start_date=start_date, end_date=end_date)[::-1] if df[df["trade_date"] == end_date].empty: # df 如果里面不包含当天日期的数据,则使用备用接口 ak_df = ak.stock_hsgt_fund_flow_summary_em() northward = ak_df[ak_df['资金方向'] == '北向'] hgt = round(northward[northward['板块'] == '沪股通']['成交净买额'].sum(), 2) * 100 sgt = round(northward[northward['板块'] == '深股通']['成交净买额'].sum(), 2) * 100 north_money = round(hgt + sgt, 2) substitute_df = pd.DataFrame( [{ "trade_date": northward["交易日"].iloc[0].strftime('%Y%m%d'), "hgt": hgt, "sgt": sgt, "north_money": north_money, }], index=[0], ) result = pd.concat([df, substitute_df], ignore_index=True) return result if df is not None and not df.empty: return df raise Exception("沪深港通资金流向数据拉取失败!") @stock_web_api_method_decorator def stock_web_api_industry_summary(): # 同花顺 - 行业板块数据 df = ak.stock_board_industry_summary_ths() if df is not None and not df.empty: return df raise Exception("同花顺 - 行业板块数据 数据拉取失败!") @stock_web_api_method_decorator def stock_web_api_concept_name(): # 同花顺 - 概念板块数据 df = ak.stock_board_concept_name_em() if df is not None and not df.empty: return df raise Exception("同花顺 - 概念板块数据 数据拉取失败!") def execute_stock_web_api_method(func, *args, **kwargs): for _ in range(5): try: return func(*args, **kwargs) except Exception as e: print(f"【{func}】 -- 拉取出现问题 【{e}】, 开始进行重试!") time.sleep(1) else: print(f"【{func}】 5次出现错误,请关注!!!") return None if __name__ == '__main__': print(execute_stock_web_api_method(func=stock_web_api_money_flow, start_date='20231123', end_date='20231123'))