mns-common 1.3.5.6__tar.gz → 1.3.5.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mns-common might be problematic. Click here for more details.

Files changed (151) hide show
  1. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/PKG-INFO +1 -1
  2. mns_common-1.3.5.8/mns_common/api/em/east_money_stock_quotes_sync_api.py +250 -0
  3. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/task/real_time_data_sync_check.py +9 -9
  4. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common.egg-info/PKG-INFO +1 -1
  5. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common.egg-info/SOURCES.txt +1 -0
  6. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/setup.py +1 -1
  7. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/README.md +0 -0
  8. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/__init__.py +0 -0
  9. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/__init__.py +0 -0
  10. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/akshare/__init__.py +0 -0
  11. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/akshare/k_line_api.py +0 -0
  12. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/akshare/stock_bid_ask_api.py +0 -0
  13. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/akshare/stock_dt_pool.py +0 -0
  14. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/akshare/stock_zb_pool.py +0 -0
  15. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/akshare/stock_zt_pool_api.py +0 -0
  16. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/akshare/yjyg_sync_api.py +0 -0
  17. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/em/__init__.py +0 -0
  18. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/em/east_money_debt_api.py +0 -0
  19. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/em/east_money_etf_api.py +0 -0
  20. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/em/east_money_stock_api.py +0 -0
  21. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/em/east_money_stock_gdfx_free_top_10_api.py +0 -0
  22. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/em/east_money_stock_hk_api.py +0 -0
  23. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/em/east_money_stock_us_api.py +0 -0
  24. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/em/east_money_stock_v2_api.py +0 -0
  25. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/em/em_concept_index_api.py +0 -0
  26. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/hk/__init__.py +0 -0
  27. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/hk/ths_hk_company_info_api.py +0 -0
  28. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/k_line/__init__.py +0 -0
  29. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/k_line/stock_k_line_data_api.py +0 -0
  30. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/k_line/stock_minute_data_api.py +0 -0
  31. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/kpl/__init__.py +0 -0
  32. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/kpl/common/__init__.py +0 -0
  33. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/kpl/common/kpl_common_api.py +0 -0
  34. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/kpl/common/kpl_common_field_constant.py +0 -0
  35. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/kpl/concept/__init__.py +0 -0
  36. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/kpl/concept/kpl_concept_api.py +0 -0
  37. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/kpl/constant/__init__.py +0 -0
  38. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/kpl/constant/kpl_constant.py +0 -0
  39. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/kpl/industry/__init__.py +0 -0
  40. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/kpl/industry/kpl_industry_api.py +0 -0
  41. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/kpl/selection/__init__.py +0 -0
  42. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/kpl/selection/kpl_selection_plate_api.py +0 -0
  43. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/kpl/symbol/__init__.py +0 -0
  44. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/kpl/symbol/kpl_real_time_quotes_api.py +0 -0
  45. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/kpl/symbol/kpl_symbol_common_field_constant.py +0 -0
  46. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/kpl/symbol/symbol_his_quotes_api.py +0 -0
  47. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/msg/__init__.py +0 -0
  48. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/msg/push_msg_api.py +0 -0
  49. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/qmt/__init__.py +0 -0
  50. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/qmt/qmt_minunte_tick_data.py +0 -0
  51. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/__init__.py +0 -0
  52. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/big_deal/__init__.py +0 -0
  53. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/big_deal/ths_big_deal_api.py +0 -0
  54. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/company/__init__.py +0 -0
  55. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/company/ths_company_announce_api.py +0 -0
  56. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/company/ths_company_info_api.py +0 -0
  57. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/concept/__init__.py +0 -0
  58. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/concept/app/__init__.py +0 -0
  59. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/concept/app/ths_concept_detail_app.py +0 -0
  60. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/concept/app/ths_concept_index_app.py +0 -0
  61. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/concept/web/__init__.py +0 -0
  62. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/concept/web/ths_common_js_api.py +0 -0
  63. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/concept/web/ths_company_info_web.py +0 -0
  64. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/concept/web/ths_concept_detail_web.py +0 -0
  65. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/concept/web/ths_concept_index_web.py +0 -0
  66. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/self_choose/__init__.py +0 -0
  67. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/self_choose/ths_self_choose_api.py +0 -0
  68. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/wen_cai/__init__.py +0 -0
  69. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/wen_cai/ths_wen_cai_api.py +0 -0
  70. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/zt/__init__.py +0 -0
  71. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/zt/ths_stock_zt_pool_api.py +0 -0
  72. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/ths/zt/ths_stock_zt_pool_v2_api.py +0 -0
  73. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/us/__init__.py +0 -0
  74. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/us/ths_us_company_info_api.py +0 -0
  75. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/xueqiu/__init__.py +0 -0
  76. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/api/xueqiu/xue_qiu_k_line_api.py +0 -0
  77. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/__init__.py +0 -0
  78. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/cache/__init__.py +0 -0
  79. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/cache/cache_service.py +0 -0
  80. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/classify/__init__.py +0 -0
  81. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/classify/symbol_classify_api.py +0 -0
  82. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/classify/symbol_classify_param.py +0 -0
  83. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/common_service_fun_api.py +0 -0
  84. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/company/__init__.py +0 -0
  85. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/company/company_common_service_api.py +0 -0
  86. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/company/company_common_service_new_api.py +0 -0
  87. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/concept/__init__.py +0 -0
  88. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/concept/kpl_concept_common_service_api.py +0 -0
  89. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/concept/ths_concept_common_service_api.py +0 -0
  90. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/cookie/__init__.py +0 -0
  91. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/cookie/cookie_info_service.py +0 -0
  92. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/data/__init__.py +0 -0
  93. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/data/data_init_api.py +0 -0
  94. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/deal/__init__.py +0 -0
  95. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/deal/deal_service_api.py +0 -0
  96. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/deal/terminal_enum.py +0 -0
  97. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/hk/__init__.py +0 -0
  98. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/hk/company_hk_service_api.py +0 -0
  99. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/industry/__init__.py +0 -0
  100. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/industry/ths_industry_index_api.py +0 -0
  101. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/k_line/__init__.py +0 -0
  102. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/k_line/clean/__init__.py +0 -0
  103. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/k_line/clean/k_line_param.py +0 -0
  104. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/k_line/clean/sh_small_normal_zt_k_line_check_api.py +0 -0
  105. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/k_line/common/__init__.py +0 -0
  106. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/k_line/common/k_line_common_service_api.py +0 -0
  107. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/k_line/patterns/__init__.py +0 -0
  108. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/k_line/patterns/k_line_patterns_service_api.py +0 -0
  109. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/k_line/patterns/pattern_Enum.py +0 -0
  110. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/price/__init__.py +0 -0
  111. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/price/trade_price_service_api.py +0 -0
  112. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/qmt/__init__.py +0 -0
  113. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/qmt/qmt_buy_service.py +0 -0
  114. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/real_time/__init__.py +0 -0
  115. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/real_time/real_time_common_service_api.py +0 -0
  116. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/redis_msg/__init__.py +0 -0
  117. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/redis_msg/redis_msg_publish_service.py +0 -0
  118. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/self_choose/__init__.py +0 -0
  119. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/self_choose/black_list_service_api.py +0 -0
  120. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/self_choose/self_choose_service_api.py +0 -0
  121. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/task/__init__.py +0 -0
  122. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/tfp/__init__.py +0 -0
  123. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/tfp/stock_tfp_api.py +0 -0
  124. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/trade_date/__init__.py +0 -0
  125. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/trade_date/trade_date_common_service_api.py +0 -0
  126. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/zt/__init__.py +0 -0
  127. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/component/zt/zt_common_service_api.py +0 -0
  128. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/constant/__init__.py +0 -0
  129. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/constant/black_list_classify_enum.py +0 -0
  130. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/constant/db_name_constant.py +0 -0
  131. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/constant/east_money_stock_api.py +0 -0
  132. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/constant/extra_income_db_name.py +0 -0
  133. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/constant/price_enum.py +0 -0
  134. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/constant/redis_msg_constant.py +0 -0
  135. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/constant/self_choose_constant.py +0 -0
  136. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/db/MongodbUtil.py +0 -0
  137. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/db/MongodbUtilLocal.py +0 -0
  138. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/db/__init__.py +0 -0
  139. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/db/v2/MongodbUtilV2.py +0 -0
  140. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/db/v2/__init__.py +0 -0
  141. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/utils/__init__.py +0 -0
  142. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/utils/async_fun.py +0 -0
  143. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/utils/cmd_util.py +0 -0
  144. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/utils/data_frame_util.py +0 -0
  145. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/utils/date_handle_util.py +0 -0
  146. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/utils/db_util.py +0 -0
  147. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/utils/file_util.py +0 -0
  148. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common/utils/ip_util.py +0 -0
  149. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common.egg-info/dependency_links.txt +0 -0
  150. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/mns_common.egg-info/top_level.txt +0 -0
  151. {mns_common-1.3.5.6 → mns_common-1.3.5.8}/setup.cfg +0 -0
@@ -1,3 +1,3 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns_common
3
- Version: 1.3.5.6
3
+ Version: 1.3.5.8
@@ -0,0 +1,250 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+ import asyncio
9
+ from typing import Dict, List
10
+ import aiohttp
11
+ import pandas as pd
12
+ import datetime
13
+ import nest_asyncio
14
+ from loguru import logger
15
+
16
+
17
+ async def fetch_single_page(
18
+ session: aiohttp.ClientSession, url: str, params: Dict
19
+ ) -> Dict:
20
+ """异步获取单页数据"""
21
+ async with session.get(url, params=params, ssl=False) as response:
22
+ return await response.json()
23
+
24
+
25
+ async def fetch_all_pages_async(url: str, base_params: Dict) -> List[Dict]:
26
+ """异步获取所有页面数据"""
27
+ # 首先获取总数以计算页数
28
+ first_page_params = base_params.copy()
29
+ first_page_params["pn"] = "1"
30
+
31
+ async with aiohttp.ClientSession() as session:
32
+ first_page_data = await fetch_single_page(session, url, first_page_params)
33
+
34
+ # 检查是否成功获取数据
35
+ if first_page_data.get("rc") != 0 or not first_page_data.get("data"):
36
+ return [first_page_data] # 返回错误信息
37
+
38
+ total = first_page_data["data"]["total"]
39
+ page_size = int(base_params["pz"])
40
+ total_pages = (total + page_size - 1) // page_size
41
+
42
+ # 限制页数,避免过大请求
43
+ total_pages = min(total_pages, 100)
44
+
45
+ # 创建所有页面的任务
46
+ tasks = []
47
+ for page in range(1, total_pages + 1):
48
+ page_params = base_params.copy()
49
+ page_params["pn"] = str(page)
50
+ tasks.append(fetch_single_page(session, url, page_params))
51
+
52
+ # 并发执行所有任务
53
+ results = await asyncio.gather(*tasks)
54
+ return results
55
+
56
+
57
+ def process_data(page_results: List[Dict]) -> pd.DataFrame:
58
+ """处理获取到的数据,转换为DataFrame"""
59
+ all_data = []
60
+
61
+ # 保存每个页面的结果和页码
62
+ page_number = 1
63
+ items_per_page = 100 # 假设每页100条
64
+
65
+ for result in page_results:
66
+ if result.get("rc") == 0 and result.get("data") and result["data"].get("diff"):
67
+ page_data = result["data"]["diff"]
68
+
69
+ # 添加页面信息以便后续计算序号
70
+ for item in page_data:
71
+ item["page_number"] = page_number
72
+ item["page_index"] = page_data.index(item)
73
+
74
+ all_data.extend(page_data)
75
+ page_number += 1
76
+
77
+ if not all_data:
78
+ return pd.DataFrame()
79
+
80
+ df = pd.DataFrame(all_data)
81
+
82
+ # 删除临时列
83
+ df.drop(columns=["page_number", "page_index"], inplace=True, errors="ignore")
84
+
85
+ df = df.rename(columns={
86
+ "f2": "now_price",
87
+ "f3": "chg",
88
+ "f5": "volume",
89
+ "f6": "amount",
90
+ "f8": "exchange",
91
+ "f10": "quantity_ratio",
92
+ "f22": "up_speed",
93
+ "f11": "up_speed_05",
94
+ "f12": "symbol",
95
+ "f14": "name",
96
+ "f15": "high",
97
+ "f16": "low",
98
+ "f17": "open",
99
+ "f18": "yesterday_price",
100
+ "f20": "total_mv",
101
+ "f21": "flow_mv",
102
+ "f26": "list_date",
103
+ "f33": "wei_bi",
104
+ "f34": "outer_disk",
105
+ "f35": "inner_disk",
106
+ "f62": "today_main_net_inflow",
107
+ "f66": "super_large_order_net_inflow",
108
+ "f69": "super_large_order_net_inflow_ratio",
109
+ "f72": "large_order_net_inflow",
110
+ # "f78": "medium_order_net_inflow",
111
+ # "f84": "small_order_net_inflow",
112
+ "f100": "industry",
113
+ # "f103": "concept",
114
+ "f184": "today_main_net_inflow_ratio",
115
+ "f352": "average_price",
116
+ "f211": "buy_1_num",
117
+ "f212": "sell_1_num"
118
+ })
119
+
120
+ # 选择需要的列并确保所有需要的列都存在
121
+ desired_columns = [
122
+ 'symbol',
123
+ "now_price",
124
+ "chg",
125
+ "volume",
126
+ "amount",
127
+ "exchange",
128
+ "quantity_ratio",
129
+ "up_speed",
130
+ "up_speed_05",
131
+ "high",
132
+ "low",
133
+ "open",
134
+ "yesterday_price",
135
+ "total_mv",
136
+ "flow_mv",
137
+ "wei_bi",
138
+ "outer_disk",
139
+ "inner_disk",
140
+ "today_main_net_inflow",
141
+ "super_large_order_net_inflow",
142
+ "super_large_order_net_inflow_ratio",
143
+ "large_order_net_inflow",
144
+ "today_main_net_inflow_ratio",
145
+ "average_price",
146
+ "buy_1_num",
147
+ "sell_1_num",
148
+ ]
149
+
150
+ # 过滤出存在的列
151
+ available_columns = [col for col in desired_columns if col in df.columns]
152
+ df = df[available_columns]
153
+
154
+ # 转换数值类型
155
+ numeric_columns = [
156
+ "now_price",
157
+ "chg",
158
+ "volume",
159
+ "amount",
160
+ "exchange",
161
+ "quantity_ratio",
162
+ "up_speed",
163
+ "up_speed_05",
164
+ "high",
165
+ "low",
166
+ "open",
167
+ "yesterday_price",
168
+ "total_mv",
169
+ "flow_mv",
170
+ "wei_bi",
171
+ "outer_disk",
172
+ "inner_disk",
173
+ "today_main_net_inflow",
174
+ "super_large_order_net_inflow",
175
+ "super_large_order_net_inflow_ratio",
176
+ "large_order_net_inflow",
177
+ "today_main_net_inflow_ratio",
178
+ "average_price",
179
+ "buy_1_num",
180
+ "sell_1_num",
181
+ ]
182
+
183
+ for col in numeric_columns:
184
+ if col in df.columns:
185
+ df.loc[df[col] == '-', col] = 0
186
+ df[col] = pd.to_numeric(df[col], errors="coerce")
187
+
188
+ # 大单比例
189
+ df['large_order_net_inflow_ratio'] = round((df['large_order_net_inflow'] / df['amount']) * 100, 2)
190
+
191
+ # 外盘是内盘倍数
192
+ df['disk_ratio'] = round((df['outer_disk'] - df['inner_disk']) / df['inner_disk'], 2)
193
+ # 只有外盘没有内盘
194
+ df.loc[df["inner_disk"] == 0, ['disk_ratio']] = 1688
195
+ # 按涨跌幅降序排序
196
+ df.sort_values(by="chg", ascending=False, inplace=True)
197
+
198
+ return df
199
+
200
+
201
+ async def stock_zh_a_spot_em_async() -> pd.DataFrame:
202
+ fields = "f352,f2,f3,f5,f6,f8,f10,f11,f22,f12,f15,f16,f17,f18,f20,f21,f33,f34,f35,f62,f66,f69,f72,f184,f211,f212",
203
+ # 获取当前日期和时间
204
+ current_time = datetime.datetime.now()
205
+
206
+ # 将当前时间转换为时间戳(以毫秒为单位)
207
+ current_timestamp_ms = int(current_time.timestamp() * 1000)
208
+ """
209
+ 异步获取东方财富网-沪深京 A 股-实时行情
210
+ https://quote.eastmoney.com/center/gridlist.html#hs_a_board
211
+ :return: 实时行情
212
+ :rtype: pandas.DataFrame
213
+ """
214
+ url = "https://82.push2.eastmoney.com/api/qt/clist/get"
215
+ params = {
216
+ "pn": "1",
217
+ "pz": "100",
218
+ "po": "1",
219
+ "np": "1",
220
+ "ut": "bd1d9ddb04089700cf9c27f6f7426281",
221
+ "fltt": "2",
222
+ "invt": "2",
223
+ "fid": "f12",
224
+ "fs": "m:0 t:6,m:0 t:80,m:1 t:2,m:1 t:23,m:0 t:81 s:2048",
225
+ "fields": fields,
226
+ "_": current_timestamp_ms
227
+ }
228
+
229
+ results = await fetch_all_pages_async(url, params)
230
+ return process_data(results)
231
+
232
+
233
+ def stock_real_quotes() -> pd.DataFrame:
234
+ """
235
+ 东方财富网-沪深京 A 股-实时行情 (同步接口)
236
+ https://quote.eastmoney.com/center/gridlist.html#hs_a_board
237
+ :return: 实时行情
238
+ :rtype: pandas.DataFrame
239
+ """
240
+ try:
241
+ nest_asyncio.apply()
242
+ return asyncio.run(stock_zh_a_spot_em_async())
243
+ except Exception as e:
244
+ logger.error("同步实时行情出现异常:{}", e)
245
+
246
+
247
+ if __name__ == "__main__":
248
+ while True:
249
+ stock_zh_a_spot_em_df = stock_real_quotes()
250
+ logger.info(stock_zh_a_spot_em_df)
@@ -78,15 +78,15 @@ def exist_sync_task():
78
78
  def check_data_sync_task_status():
79
79
  now_date = datetime.datetime.now()
80
80
  str_day = now_date.strftime('%Y-%m-%d')
81
- while True:
82
- if bool(date_util.is_trade_time(now_date)):
83
- if bool(1 - query_data_exist(str_day)) or bool(1 - exist_sync_task()):
84
- real_time_sync_task_open()
85
- time.sleep(2)
86
- elif bool(date_util.is_no_trade_time(now_date)):
87
- break
88
- else:
89
- time.sleep(5)
81
+
82
+ if bool(date_util.is_trade_time(now_date)):
83
+ if bool(1 - query_data_exist(str_day)) or bool(1 - exist_sync_task()):
84
+ real_time_sync_task_open()
85
+ time.sleep(2)
86
+ elif bool(date_util.is_no_trade_time(now_date)):
87
+ return
88
+ else:
89
+ time.sleep(5)
90
90
 
91
91
 
92
92
  if __name__ == '__main__':
@@ -1,3 +1,3 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-common
3
- Version: 1.3.5.6
3
+ Version: 1.3.5.8
@@ -19,6 +19,7 @@ mns_common/api/em/east_money_etf_api.py
19
19
  mns_common/api/em/east_money_stock_api.py
20
20
  mns_common/api/em/east_money_stock_gdfx_free_top_10_api.py
21
21
  mns_common/api/em/east_money_stock_hk_api.py
22
+ mns_common/api/em/east_money_stock_quotes_sync_api.py
22
23
  mns_common/api/em/east_money_stock_us_api.py
23
24
  mns_common/api/em/east_money_stock_v2_api.py
24
25
  mns_common/api/em/em_concept_index_api.py
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name='mns_common',
5
- version='1.3.5.6',
5
+ version='1.3.5.8',
6
6
  # packages=["mns_common", "mns_common.api",
7
7
  # "mns_common.api.akshare",
8
8
  # "mns_common.api.em",
File without changes
File without changes