mns-common 1.5.1.8__tar.gz → 1.5.2.0__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 (162) hide show
  1. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/PKG-INFO +1 -1
  2. mns_common-1.5.2.0/mns_common/api/em/concept/em_concept_index_api.py +230 -0
  3. mns_common-1.5.2.0/mns_common/api/em/gd/east_money_stock_gdfx_free_top_10_api.py +252 -0
  4. mns_common-1.5.2.0/mns_common/api/em/real_time/east_money_debt_api.py +422 -0
  5. mns_common-1.5.2.0/mns_common/api/em/real_time/east_money_etf_api.py +504 -0
  6. mns_common-1.5.2.0/mns_common/api/em/real_time/east_money_stock_a_api.py +305 -0
  7. mns_common-1.5.2.0/mns_common/api/em/real_time/east_money_stock_a_v2_api.py +296 -0
  8. mns_common-1.5.2.0/mns_common/api/em/real_time/east_money_stock_hk_api.py +469 -0
  9. mns_common-1.5.2.0/mns_common/api/em/real_time/east_money_stock_us_api.py +234 -0
  10. mns_common-1.5.2.0/mns_common/api/em/real_time/real_time_quotes_repeat_api.py +359 -0
  11. mns_common-1.5.2.0/mns_common/component/tfp/__init__.py +7 -0
  12. mns_common-1.5.2.0/mns_common/component/us/__init__.py +7 -0
  13. mns_common-1.5.2.0/mns_common/db/v2/__init__.py +7 -0
  14. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common.egg-info/PKG-INFO +1 -1
  15. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common.egg-info/SOURCES.txt +12 -0
  16. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/setup.py +1 -1
  17. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/README.md +0 -0
  18. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/__init__.py +0 -0
  19. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/__init__.py +0 -0
  20. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/em/__init__.py +0 -0
  21. {mns_common-1.5.1.8/mns_common/api/hk → mns_common-1.5.2.0/mns_common/api/em/concept}/__init__.py +0 -0
  22. {mns_common-1.5.1.8/mns_common/api/proxies → mns_common-1.5.2.0/mns_common/api/em/gd}/__init__.py +0 -0
  23. {mns_common-1.5.1.8/mns_common/api/qmt → mns_common-1.5.2.0/mns_common/api/em/real_time}/__init__.py +0 -0
  24. {mns_common-1.5.1.8/mns_common/api/ths/company → mns_common-1.5.2.0/mns_common/api/hk}/__init__.py +0 -0
  25. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/hk/ths_hk_company_info_api.py +0 -0
  26. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/k_line/__init__.py +0 -0
  27. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/k_line/stock_k_line_data_api.py +0 -0
  28. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/k_line/stock_minute_data_api.py +0 -0
  29. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/kpl/__init__.py +0 -0
  30. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/kpl/common/__init__.py +0 -0
  31. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/kpl/common/kpl_common_api.py +0 -0
  32. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/kpl/common/kpl_common_field_constant.py +0 -0
  33. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/kpl/concept/__init__.py +0 -0
  34. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/kpl/concept/kpl_concept_api.py +0 -0
  35. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/kpl/constant/__init__.py +0 -0
  36. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/kpl/constant/kpl_constant.py +0 -0
  37. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/kpl/industry/__init__.py +0 -0
  38. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/kpl/industry/kpl_industry_api.py +0 -0
  39. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/kpl/selection/__init__.py +0 -0
  40. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/kpl/selection/kpl_selection_plate_api.py +0 -0
  41. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/kpl/symbol/__init__.py +0 -0
  42. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/kpl/symbol/kpl_real_time_quotes_api.py +0 -0
  43. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/kpl/symbol/kpl_symbol_common_field_constant.py +0 -0
  44. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/kpl/symbol/symbol_his_quotes_api.py +0 -0
  45. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/msg/__init__.py +0 -0
  46. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/msg/push_msg_api.py +0 -0
  47. {mns_common-1.5.1.8/mns_common/api/us → mns_common-1.5.2.0/mns_common/api/proxies}/__init__.py +0 -0
  48. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/proxies/liu_guan_proxy_api.py +0 -0
  49. {mns_common-1.5.1.8/mns_common/api/xueqiu → mns_common-1.5.2.0/mns_common/api/qmt}/__init__.py +0 -0
  50. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/qmt/qmt_minunte_tick_data.py +0 -0
  51. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/__init__.py +0 -0
  52. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/big_deal/__init__.py +0 -0
  53. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/big_deal/ths_big_deal_api.py +0 -0
  54. {mns_common-1.5.1.8/mns_common/component/classify → mns_common-1.5.2.0/mns_common/api/ths/company}/__init__.py +0 -0
  55. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/company/company_product_area_industry_index_query.py +0 -0
  56. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/company/ths_company_announce_api.py +0 -0
  57. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/company/ths_company_info_api.py +0 -0
  58. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/concept/__init__.py +0 -0
  59. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/concept/app/__init__.py +0 -0
  60. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/concept/app/ths_concept_detail_app.py +0 -0
  61. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/concept/app/ths_concept_index_app.py +0 -0
  62. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/concept/web/__init__.py +0 -0
  63. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/concept/web/ths_common_js_api.py +0 -0
  64. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/concept/web/ths_company_info_web.py +0 -0
  65. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/concept/web/ths_concept_detail_web.py +0 -0
  66. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/concept/web/ths_concept_index_web.py +0 -0
  67. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/self_choose/__init__.py +0 -0
  68. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/self_choose/ths_self_choose_api.py +0 -0
  69. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/wen_cai/__init__.py +0 -0
  70. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/wen_cai/ths_wen_cai_api.py +0 -0
  71. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/zt/__init__.py +0 -0
  72. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/zt/ths_stock_zt_pool_api.py +0 -0
  73. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/ths/zt/ths_stock_zt_pool_v2_api.py +0 -0
  74. {mns_common-1.5.1.8/mns_common/component/cookie → mns_common-1.5.2.0/mns_common/api/us}/__init__.py +0 -0
  75. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/us/ths_us_company_info_api.py +0 -0
  76. {mns_common-1.5.1.8/mns_common/component/deal → mns_common-1.5.2.0/mns_common/api/xueqiu}/__init__.py +0 -0
  77. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/api/xueqiu/xue_qiu_k_line_api.py +0 -0
  78. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/__init__.py +0 -0
  79. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/cache/__init__.py +0 -0
  80. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/cache/cache_service.py +0 -0
  81. {mns_common-1.5.1.8/mns_common/component/em → mns_common-1.5.2.0/mns_common/component/classify}/__init__.py +0 -0
  82. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/classify/symbol_classify_api.py +0 -0
  83. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/classify/symbol_classify_param.py +0 -0
  84. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/common_service_fun_api.py +0 -0
  85. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/company/__init__.py +0 -0
  86. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/company/company_common_service_api.py +0 -0
  87. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/company/company_common_service_new_api.py +0 -0
  88. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/concept/__init__.py +0 -0
  89. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/concept/kpl_concept_common_service_api.py +0 -0
  90. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/concept/ths_concept_common_service_api.py +0 -0
  91. {mns_common-1.5.1.8/mns_common/component/exception → mns_common-1.5.2.0/mns_common/component/cookie}/__init__.py +0 -0
  92. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/cookie/cookie_enum.py +0 -0
  93. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/cookie/cookie_info_service.py +0 -0
  94. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/data/__init__.py +0 -0
  95. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/data/data_init_api.py +0 -0
  96. {mns_common-1.5.1.8/mns_common/component/hk → mns_common-1.5.2.0/mns_common/component/deal}/__init__.py +0 -0
  97. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/deal/deal_service_api.py +0 -0
  98. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/deal/deal_service_v2_api.py +0 -0
  99. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/deal/terminal_enum.py +0 -0
  100. {mns_common-1.5.1.8/mns_common/component/price → mns_common-1.5.2.0/mns_common/component/em}/__init__.py +0 -0
  101. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/em/em_real_time_quotes_api.py +0 -0
  102. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/em/em_stock_info_api.py +0 -0
  103. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/exception/ExceptionMonitor.py +0 -0
  104. {mns_common-1.5.1.8/mns_common/component/proxies → mns_common-1.5.2.0/mns_common/component/exception}/__init__.py +0 -0
  105. {mns_common-1.5.1.8/mns_common/component/qmt → mns_common-1.5.2.0/mns_common/component/hk}/__init__.py +0 -0
  106. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/hk/company_hk_service_api.py +0 -0
  107. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/industry/__init__.py +0 -0
  108. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/industry/ths_industry_index_api.py +0 -0
  109. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/k_line/__init__.py +0 -0
  110. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/k_line/clean/__init__.py +0 -0
  111. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/k_line/clean/k_line_param.py +0 -0
  112. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/k_line/clean/sh_small_normal_zt_k_line_check_api.py +0 -0
  113. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/k_line/common/__init__.py +0 -0
  114. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/k_line/common/k_line_common_service_api.py +0 -0
  115. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/k_line/patterns/__init__.py +0 -0
  116. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/k_line/patterns/k_line_patterns_service_api.py +0 -0
  117. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/k_line/patterns/pattern_Enum.py +0 -0
  118. {mns_common-1.5.1.8/mns_common/component/redis_msg → mns_common-1.5.2.0/mns_common/component/price}/__init__.py +0 -0
  119. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/price/trade_price_service_api.py +0 -0
  120. {mns_common-1.5.1.8/mns_common/component/task → mns_common-1.5.2.0/mns_common/component/proxies}/__init__.py +0 -0
  121. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/proxies/proxy_common_api.py +0 -0
  122. {mns_common-1.5.1.8/mns_common/component/tfp → mns_common-1.5.2.0/mns_common/component/qmt}/__init__.py +0 -0
  123. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/qmt/qmt_buy_service.py +0 -0
  124. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/real_time/__init__.py +0 -0
  125. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/real_time/real_time_common_service_api.py +0 -0
  126. {mns_common-1.5.1.8/mns_common/component/us → mns_common-1.5.2.0/mns_common/component/redis_msg}/__init__.py +0 -0
  127. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/redis_msg/redis_msg_publish_service.py +0 -0
  128. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/self_choose/__init__.py +0 -0
  129. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/self_choose/black_list_service_api.py +0 -0
  130. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/self_choose/self_choose_service_api.py +0 -0
  131. {mns_common-1.5.1.8/mns_common/db/v2 → mns_common-1.5.2.0/mns_common/component/task}/__init__.py +0 -0
  132. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/task/real_time_data_sync_check.py +0 -0
  133. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/tfp/stock_tfp_api.py +0 -0
  134. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/trade_date/__init__.py +0 -0
  135. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/trade_date/trade_date_common_service_api.py +0 -0
  136. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/us/us_stock_etf_info_api.py +0 -0
  137. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/zt/__init__.py +0 -0
  138. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/component/zt/zt_common_service_api.py +0 -0
  139. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/constant/__init__.py +0 -0
  140. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/constant/black_list_classify_enum.py +0 -0
  141. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/constant/db_name_constant.py +0 -0
  142. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/constant/east_money_stock_api.py +0 -0
  143. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/constant/extra_income_db_name.py +0 -0
  144. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/constant/price_enum.py +0 -0
  145. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/constant/redis_msg_constant.py +0 -0
  146. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/constant/self_choose_constant.py +0 -0
  147. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/constant/strategy_classify.py +0 -0
  148. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/db/MongodbUtil.py +0 -0
  149. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/db/MongodbUtilLocal.py +0 -0
  150. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/db/__init__.py +0 -0
  151. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/db/v2/MongodbUtilV2.py +0 -0
  152. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/utils/__init__.py +0 -0
  153. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/utils/async_fun.py +0 -0
  154. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/utils/cmd_util.py +0 -0
  155. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/utils/data_frame_util.py +0 -0
  156. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/utils/date_handle_util.py +0 -0
  157. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/utils/db_util.py +0 -0
  158. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/utils/file_util.py +0 -0
  159. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common/utils/ip_util.py +0 -0
  160. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common.egg-info/dependency_links.txt +0 -0
  161. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/mns_common.egg-info/top_level.txt +0 -0
  162. {mns_common-1.5.1.8 → mns_common-1.5.2.0}/setup.cfg +0 -0
@@ -1,3 +1,3 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns_common
3
- Version: 1.5.1.8
3
+ Version: 1.5.2.0
@@ -0,0 +1,230 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 14
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+
9
+ import requests
10
+ import pandas as pd
11
+ import mns_common.utils.data_frame_util as data_frame_util
12
+ from loguru import logger
13
+
14
+
15
+ def stock_board_concept_name_em() -> pd.DataFrame:
16
+ """
17
+ 东方财富网-行情中心-沪深京板块-概念板块-名称
18
+ https://quote.eastmoney.com/center/boardlist.html#concept_board
19
+ :return: 概念板块-名称
20
+ :rtype: pandas.DataFrame
21
+ """
22
+ url = "http://79.push2.eastmoney.com/api/qt/clist/get"
23
+ params = {
24
+ "pn": "1",
25
+ "pz": "2000",
26
+ "po": "1",
27
+ "np": "3",
28
+ "ut": "bd1d9ddb04089700cf9c27f6f7426281",
29
+ "fltt": "2",
30
+ "invt": "2",
31
+ "fid": "f3",
32
+ "fs": "m:90 t:3 f:!50",
33
+ "fields": "f2,f3,f4,f8,f12,f14,f15,f16,f17,f18,f20,f21,f24,f25,f22,f26,f33,f11,f62,f128,f124,f107,f104,f105,f136",
34
+ "_": "1626075887768",
35
+ }
36
+ r = requests.get(url, params=params)
37
+ data_json = r.json()
38
+ temp_df = pd.DataFrame(data_json["data"]["diff"])
39
+ temp_df.reset_index(inplace=True)
40
+ temp_df["index"] = range(1, len(temp_df) + 1)
41
+ temp_df.columns = [
42
+ "排名",
43
+ "最新价",
44
+ "涨跌幅",
45
+ "涨跌额",
46
+ "换手率",
47
+ "_",
48
+ "板块代码",
49
+ "板块名称",
50
+ "_",
51
+ "_",
52
+ "_",
53
+ "_",
54
+ "总市值",
55
+ "_",
56
+ "_",
57
+ "_",
58
+ "_",
59
+ "新增日期",
60
+ "_",
61
+ "_",
62
+ "上涨家数",
63
+ "下跌家数",
64
+ "_",
65
+ "_",
66
+ "领涨股票",
67
+ "_",
68
+ "_",
69
+ "领涨股票-涨跌幅",
70
+ ]
71
+ temp_df = temp_df[
72
+ [
73
+ "排名",
74
+ "板块名称",
75
+ "板块代码",
76
+ "最新价",
77
+ "涨跌额",
78
+ "涨跌幅",
79
+ "总市值",
80
+ "换手率",
81
+ "新增日期",
82
+ "上涨家数",
83
+ "下跌家数",
84
+ "领涨股票",
85
+ "领涨股票-涨跌幅",
86
+ ]
87
+ ]
88
+ temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
89
+ temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
90
+ temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
91
+ temp_df["总市值"] = pd.to_numeric(temp_df["总市值"], errors="coerce")
92
+ temp_df["换手率"] = pd.to_numeric(temp_df["换手率"], errors="coerce")
93
+ temp_df["上涨家数"] = pd.to_numeric(temp_df["上涨家数"], errors="coerce")
94
+ temp_df["下跌家数"] = pd.to_numeric(temp_df["下跌家数"], errors="coerce")
95
+ temp_df["领涨股票-涨跌幅"] = pd.to_numeric(temp_df["领涨股票-涨跌幅"], errors="coerce")
96
+ return temp_df
97
+
98
+
99
+ # 同步所有概念
100
+ def sync_all_concept():
101
+ try:
102
+ stock_board_concept_name_em_df = stock_board_concept_name_em()
103
+ stock_board_concept_name_em_df = stock_board_concept_name_em_df.rename(columns={"排名": "index",
104
+ "板块名称": "concept_name",
105
+ "板块代码": "concept_code",
106
+ "最新价": "now_price",
107
+ "涨跌额": "change",
108
+ "涨跌幅": "chg",
109
+ "总市值": "total_mv",
110
+ "换手率": "exchange",
111
+ "新增日期": "list_day",
112
+ "上涨家数": "up_number",
113
+ "下跌家数": "down_number",
114
+ "领涨股票": "up_header",
115
+ "领涨股票-涨跌幅": "up_header_chg"
116
+ })
117
+ return stock_board_concept_name_em_df
118
+ except BaseException as e:
119
+ logger.error("同步东方财富概念信息异常:{}", e)
120
+ return None
121
+
122
+
123
+ def stock_board_concept_cons_em(stock_board_code: str = "BK1134") -> pd.DataFrame:
124
+ """
125
+ 东方财富-沪深板块-概念板块-板块成份
126
+ https://quote.eastmoney.com/center/boardlist.html#boards-BK06551
127
+ :param symbol: 板块名称
128
+ :type symbol: str
129
+ :return: 板块成份
130
+ :rtype: pandas.DataFrame
131
+ """
132
+
133
+ url = "http://29.push2.eastmoney.com/api/qt/clist/get"
134
+ params = {
135
+ "pn": "1",
136
+ "pz": "2000",
137
+ "po": "1",
138
+ "np": "3",
139
+ "ut": "bd1d9ddb04089700cf9c27f6f7426281",
140
+ "fltt": "2",
141
+ "invt": "2",
142
+ "fid": "f3",
143
+ "fs": f"b:{stock_board_code} f:!50",
144
+ "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f45",
145
+ "_": "1626081702127",
146
+ }
147
+ r = requests.get(url, params=params)
148
+ data_json = r.json()
149
+ data_df = pd.DataFrame(data_json["data"])
150
+ if data_frame_util.is_empty(data_df):
151
+ return None
152
+ temp_df_copy = pd.DataFrame(data_json["data"]["diff"])
153
+ temp_df_copy.reset_index(inplace=True)
154
+ temp_df_copy["index"] = range(1, len(temp_df_copy) + 1)
155
+ temp_df_copy.columns = [
156
+ "序号",
157
+ "_",
158
+ "最新价",
159
+ "涨跌幅",
160
+ "涨跌额",
161
+ "成交量",
162
+ "成交额",
163
+ "振幅",
164
+ "换手率",
165
+ "市盈率-动态",
166
+ "_",
167
+ "_",
168
+ "代码",
169
+ "_",
170
+ "名称",
171
+ "最高",
172
+ "最低",
173
+ "今开",
174
+ "昨收",
175
+ "_",
176
+ "_",
177
+ "_",
178
+ "市净率",
179
+ "_",
180
+ "_",
181
+ "_",
182
+ "_",
183
+ "_",
184
+ "_",
185
+ "_",
186
+ "_",
187
+ "_",
188
+ "_",
189
+ ]
190
+ temp_df_copy = temp_df_copy[
191
+ [
192
+ "序号",
193
+ "代码",
194
+ "名称",
195
+ "最新价",
196
+ "涨跌幅",
197
+ "涨跌额",
198
+ "成交量",
199
+ "成交额",
200
+ "振幅",
201
+ "最高",
202
+ "最低",
203
+ "今开",
204
+ "昨收",
205
+ "换手率",
206
+ "市盈率-动态",
207
+ "市净率",
208
+ ]
209
+ ]
210
+ temp_df = temp_df_copy.copy()
211
+
212
+ temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
213
+ temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
214
+ temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
215
+ temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
216
+ temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
217
+ temp_df["振幅"] = pd.to_numeric(temp_df["振幅"], errors="coerce")
218
+ temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
219
+ temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
220
+ temp_df["今开"] = pd.to_numeric(temp_df["今开"], errors="coerce")
221
+ temp_df["昨收"] = pd.to_numeric(temp_df["昨收"], errors="coerce")
222
+ temp_df["换手率"] = pd.to_numeric(temp_df["换手率"], errors="coerce")
223
+ temp_df["市盈率-动态"] = pd.to_numeric(temp_df["市盈率-动态"], errors="coerce")
224
+ temp_df["市净率"] = pd.to_numeric(temp_df["市净率"], errors="coerce")
225
+ return temp_df
226
+
227
+
228
+ if __name__ == '__main__':
229
+ df = stock_board_concept_cons_em()
230
+ print(df)
@@ -0,0 +1,252 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 14
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+ import akshare as ak
9
+ import mns_common.component.common_service_fun_api as common_service_fun_api
10
+ import mns_common.utils.date_handle_util as date_handle_util
11
+ from loguru import logger
12
+ import mns_common.component.em.em_stock_info_api as em_stock_info_api
13
+ from mns_common.db.MongodbUtil import MongodbUtil
14
+ import mns_common.constant.db_name_constant as db_name_constant
15
+ import mns_common.component.company.company_common_service_new_api as company_common_service_new_api
16
+ from datetime import datetime
17
+
18
+ mongodb_util = MongodbUtil('27017')
19
+
20
+
21
+ # 获取十大股东
22
+
23
+ def get_stock_gdfx_free_top_10_em_api(str_day, symbol):
24
+ try:
25
+ stock_gdfx_free_top_10_em_df = ak.stock_gdfx_free_top_10_em(symbol=symbol, date=str_day)
26
+ stock_gdfx_free_top_10_em_df.rename(columns={
27
+ "名次": "index",
28
+ "股东名称": "shareholder_name",
29
+ "股东性质": "shareholder_nature",
30
+ "股份性质": "shares_nature",
31
+ "股份类型": "shares_type",
32
+ "持股数": "shares_number",
33
+ "占总流通股本持股比例": "circulation_ratio",
34
+ "增减": "change",
35
+ "变动比率": "change_ratio"
36
+ }, inplace=True)
37
+ except BaseException as e:
38
+ # logger.error("同步十大流通股东信息异常:{}", e)
39
+ return None
40
+ stock_gdfx_free_top_10_em_df = stock_gdfx_free_top_10_em_df.fillna(0)
41
+ stock_gdfx_free_top_10_em_df.index = stock_gdfx_free_top_10_em_df.index.astype(str)
42
+ stock_gdfx_free_top_10_em_df.drop_duplicates('shareholder_name', keep='last', inplace=True)
43
+
44
+ return stock_gdfx_free_top_10_em_df
45
+
46
+
47
+ def get_stock_gdfx_top_10_em_api(str_day, symbol):
48
+ try:
49
+ stock_gdfx_top_10_em_df = ak.stock_gdfx_top_10_em(symbol=symbol, date=str_day)
50
+ stock_gdfx_top_10_em_df.rename(columns={
51
+ "名次": "index",
52
+ "股东名称": "shareholder_name",
53
+ "股份类型": "shares_type",
54
+ "持股数": "shares_number",
55
+ "占总股本持股比例": "circulation_ratio",
56
+ "增减": "change",
57
+ "变动比率": "change_ratio"
58
+ }, inplace=True)
59
+ except BaseException as e:
60
+ # logger.error("同步十大股东信息异常:{}", e)
61
+ return None
62
+ stock_gdfx_top_10_em_df = stock_gdfx_top_10_em_df.fillna(0)
63
+ stock_gdfx_top_10_em_df.index = stock_gdfx_top_10_em_df.index.astype(str)
64
+ stock_gdfx_top_10_em_df.drop_duplicates('shareholder_name', keep='last', inplace=True)
65
+ return stock_gdfx_top_10_em_df
66
+
67
+
68
+ def get_stock_gdfx_free_top_10_em(str_day, symbol):
69
+ symbol_init = symbol
70
+ classification = common_service_fun_api.classify_symbol_one(symbol)
71
+ if classification in ["S", "C"]:
72
+ symbol = 'sz' + symbol
73
+ elif classification in ["K", "H"]:
74
+ symbol = 'sh' + symbol
75
+ else:
76
+ symbol = 'bj' + symbol
77
+
78
+ str_day_no_slash = date_handle_util.no_slash_date(str_day)
79
+ date_day = date_handle_util.str_to_date(str_day_no_slash, '%Y%m%d')
80
+ month = date_day.month
81
+ year = date_day.year
82
+ one = '0331'
83
+ two = '0630'
84
+ three = '0930'
85
+ four = '1231'
86
+
87
+ if 0 < month <= 4:
88
+ period_04 = str(year - 1) + four
89
+ # 流通十大股东
90
+ stock_gdfx_free_top_10_04 = get_stock_gdfx_free_top_10_em_api(period_04, symbol)
91
+ sync_stock_gdfx_free_top_10(stock_gdfx_free_top_10_04, period_04, symbol_init, str_day)
92
+
93
+ # 十大股东
94
+ stock_gdfx_top_10_04 = get_stock_gdfx_top_10_em_api(period_04, symbol)
95
+ sync_stock_gdfx_top_10(stock_gdfx_top_10_04, period_04, symbol_init, str_day)
96
+
97
+ if stock_gdfx_free_top_10_04 is None or stock_gdfx_free_top_10_04.shape[0] == 0:
98
+ period_03 = str(year - 1) + three
99
+ stock_gdfx_free_top_10_03 = get_stock_gdfx_free_top_10_em_api(period_03, symbol)
100
+ sync_stock_gdfx_free_top_10(stock_gdfx_free_top_10_03, period_03, symbol_init, str_day)
101
+
102
+ # 十大股东
103
+ stock_gdfx_top_10_03 = get_stock_gdfx_top_10_em_api(period_03, symbol)
104
+ sync_stock_gdfx_top_10(stock_gdfx_top_10_03, period_03, symbol_init, str_day)
105
+
106
+ period_01 = str(year) + one
107
+ stock_gdfx_free_top_10_01 = get_stock_gdfx_free_top_10_em_api(period_01, symbol)
108
+ sync_stock_gdfx_free_top_10(stock_gdfx_free_top_10_01, period_01, symbol_init, str_day)
109
+
110
+ # 十大股东
111
+ stock_gdfx_top_10_01 = get_stock_gdfx_top_10_em_api(period_01, symbol)
112
+ sync_stock_gdfx_top_10(stock_gdfx_top_10_01, period_01, symbol_init, str_day)
113
+
114
+ elif 4 < month <= 6:
115
+ # 十大流通股东
116
+ period_01 = str(year) + one
117
+ stock_gdfx_free_top_10_01 = get_stock_gdfx_free_top_10_em_api(period_01, symbol)
118
+ sync_stock_gdfx_free_top_10(stock_gdfx_free_top_10_01, period_01, symbol_init, str_day)
119
+ period_02 = str(year) + two
120
+ stock_gdfx_free_top_10_02 = get_stock_gdfx_free_top_10_em_api(period_02, symbol)
121
+ sync_stock_gdfx_free_top_10(stock_gdfx_free_top_10_02, period_02, symbol_init, str_day)
122
+
123
+ # 十大股东
124
+ stock_gdfx_top_10_01 = get_stock_gdfx_top_10_em_api(period_01, symbol)
125
+ sync_stock_gdfx_top_10(stock_gdfx_top_10_01, period_01, symbol_init, str_day)
126
+
127
+ stock_gdfx_top_10_02 = get_stock_gdfx_top_10_em_api(period_02, symbol)
128
+ sync_stock_gdfx_top_10(stock_gdfx_top_10_02, period_02, symbol_init, str_day)
129
+
130
+ elif 6 < month <= 10:
131
+ # 十大流通股东
132
+ period_02 = str(year) + two
133
+ stock_gdfx_free_top_10_02 = get_stock_gdfx_free_top_10_em_api(period_02, symbol)
134
+ sync_stock_gdfx_free_top_10(stock_gdfx_free_top_10_02, period_02, symbol_init, str_day)
135
+ period_03 = str(year) + three
136
+ stock_gdfx_free_top_10_03 = get_stock_gdfx_free_top_10_em_api(period_03, symbol)
137
+ sync_stock_gdfx_free_top_10(stock_gdfx_free_top_10_03, period_03, symbol_init, str_day)
138
+
139
+ # 十大股东
140
+
141
+ stock_gdfx_top_10_02 = get_stock_gdfx_top_10_em_api(period_02, symbol)
142
+ sync_stock_gdfx_top_10(stock_gdfx_top_10_02, period_02, symbol_init, str_day)
143
+
144
+ stock_gdfx_top_10_03 = get_stock_gdfx_top_10_em_api(period_03, symbol)
145
+ sync_stock_gdfx_top_10(stock_gdfx_top_10_03, period_03, symbol_init, str_day)
146
+ elif 10 < month <= 12:
147
+ # 十大流通股东
148
+ period_03 = str(year) + three
149
+ stock_gdfx_free_top_10_03 = get_stock_gdfx_free_top_10_em_api(period_03, symbol)
150
+ sync_stock_gdfx_free_top_10(stock_gdfx_free_top_10_03, period_03, symbol_init, str_day)
151
+ period_04 = str(year) + four
152
+ stock_gdfx_free_top_10_04 = get_stock_gdfx_free_top_10_em_api(period_04, symbol)
153
+ sync_stock_gdfx_free_top_10(stock_gdfx_free_top_10_04, period_04, symbol_init, str_day)
154
+
155
+ # 十大股东
156
+ stock_gdfx_top_10_03 = get_stock_gdfx_top_10_em_api(period_03, symbol)
157
+ sync_stock_gdfx_top_10(stock_gdfx_top_10_03, period_03, symbol_init, str_day)
158
+
159
+ stock_gdfx_top_10_04 = get_stock_gdfx_top_10_em_api(period_04, symbol)
160
+ sync_stock_gdfx_top_10(stock_gdfx_top_10_04, period_04, symbol_init, str_day)
161
+
162
+
163
+ # 保存10大流通股东
164
+ def sync_stock_gdfx_free_top_10(stock_gdfx_free_top_10_em_df, period, symbol, str_day):
165
+ if stock_gdfx_free_top_10_em_df is not None and stock_gdfx_free_top_10_em_df.shape[0] > 0:
166
+ # 更新日期
167
+ stock_gdfx_free_top_10_em_df['str_day'] = str_day
168
+
169
+ stock_gdfx_free_top_10_em_df['symbol'] = symbol
170
+
171
+ stock_gdfx_free_top_10_em_df['shares_number_str'] = stock_gdfx_free_top_10_em_df['shares_number'].astype(str)
172
+
173
+ stock_gdfx_free_top_10_em_df[
174
+ '_id'] = symbol + '_' + period + '_' + stock_gdfx_free_top_10_em_df.shares_number_str
175
+ stock_gdfx_free_top_10_em_df['period'] = period
176
+
177
+ query_exist = {'symbol': symbol, 'period': period}
178
+ exist_df = mongodb_util.find_query_data(db_name_constant.STOCK_GDFX_FREE_TOP_10, query_exist)
179
+ now_date = datetime.now()
180
+ str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
181
+ # 不存在的时候更新创建时间
182
+ if exist_df.shape[0] == 0:
183
+ stock_gdfx_free_top_10_em_df['create_day'] = str_day
184
+ stock_gdfx_free_top_10_em_df['sync_time'] = str_now_date
185
+ else:
186
+ if 'create_day' in exist_df.columns:
187
+ stock_gdfx_free_top_10_em_df['create_day'] = list(exist_df['create_day'])[0]
188
+ else:
189
+ stock_gdfx_free_top_10_em_df['create_day'] = str_day
190
+ if 'sync_time' in exist_df.columns:
191
+ stock_gdfx_free_top_10_em_df['sync_time'] = list(exist_df['sync_time'])[0]
192
+ else:
193
+ stock_gdfx_free_top_10_em_df['sync_time'] = str_now_date
194
+ mongodb_util.save_mongo(stock_gdfx_free_top_10_em_df, db_name_constant.STOCK_GDFX_FREE_TOP_10)
195
+
196
+
197
+ # 保存10大股东
198
+ def sync_stock_gdfx_top_10(stock_gdfx_top_10_em_df, period, symbol, str_day):
199
+ if stock_gdfx_top_10_em_df is not None and stock_gdfx_top_10_em_df.shape[0] > 0:
200
+ stock_gdfx_top_10_em_df['str_day'] = str_day
201
+ stock_gdfx_top_10_em_df['symbol'] = symbol
202
+
203
+ stock_gdfx_top_10_em_df['shares_number_str'] = stock_gdfx_top_10_em_df['shares_number'].astype(str)
204
+
205
+ stock_gdfx_top_10_em_df['_id'] = symbol + '_' + period + '_' + stock_gdfx_top_10_em_df.shares_number_str
206
+ stock_gdfx_top_10_em_df['period'] = period
207
+
208
+ query_exist = {'symbol': symbol, 'period': period}
209
+ exist_df = mongodb_util.find_query_data(db_name_constant.STOCK_GDFX_TOP_10, query_exist)
210
+ now_date = datetime.now()
211
+ str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
212
+
213
+ # 不存在的时候更新创建时间
214
+ if exist_df.shape[0] == 0:
215
+ stock_gdfx_top_10_em_df['create_day'] = str_day
216
+ stock_gdfx_top_10_em_df['sync_time'] = str_now_date
217
+ else:
218
+ if 'create_day' in exist_df.columns:
219
+ stock_gdfx_top_10_em_df['create_day'] = list(exist_df['create_day'])[0]
220
+
221
+
222
+ else:
223
+ stock_gdfx_top_10_em_df['create_day'] = str_day
224
+
225
+ if 'sync_time' in exist_df.columns:
226
+ stock_gdfx_top_10_em_df['sync_time'] = list(exist_df['sync_time'])[0]
227
+ else:
228
+ stock_gdfx_top_10_em_df['sync_time'] = str_now_date
229
+
230
+ mongodb_util.save_mongo(stock_gdfx_top_10_em_df, db_name_constant.STOCK_GDFX_TOP_10)
231
+
232
+
233
+ # 十大股东+十大流通股东
234
+ def sync_stock_gdfx_free_top_10_one_day(str_day):
235
+ real_time_quotes = em_stock_info_api.get_a_stock_info()
236
+ real_time_quotes = real_time_quotes.loc[~(
237
+ real_time_quotes['symbol'].isin(company_common_service_new_api.get_de_list_company()))]
238
+ for real_time_one in real_time_quotes.itertuples():
239
+ try:
240
+ get_stock_gdfx_free_top_10_em(str_day, real_time_one.symbol)
241
+ logger.info('同步股票前十大流通东:{},{}', real_time_one.symbol, real_time_one.name)
242
+ except BaseException as e:
243
+ logger.error('同步所有股票前十大流通股本异常:{},{}', real_time_one.symbol, e)
244
+ logger.info('同步所有股票股东列表完成:{}', str_day)
245
+
246
+
247
+ if __name__ == '__main__':
248
+ get_stock_gdfx_free_top_10_em('20250930', '300697')
249
+ now_date_test = datetime.now()
250
+ str_day_test = now_date_test.strftime('%Y-%m-%d')
251
+ logger.info('同步所有股票前十大流通股本')
252
+ sync_stock_gdfx_free_top_10_one_day(str_day_test)