mns-common 1.3.6.0__tar.gz → 1.3.6.3__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 (156) hide show
  1. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/PKG-INFO +1 -1
  2. mns_common-1.3.6.3/mns_common/api/em/east_money_stock_api_v3.py +231 -0
  3. mns_common-1.3.6.3/mns_common/api/proxies/liu_guan_proxy_api.py +65 -0
  4. mns_common-1.3.6.3/mns_common/component/proxies/proxy_common_api.py +80 -0
  5. mns_common-1.3.6.3/mns_common/component/tfp/__init__.py +7 -0
  6. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/constant/db_name_constant.py +4 -0
  7. mns_common-1.3.6.3/mns_common/db/v2/__init__.py +7 -0
  8. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common.egg-info/PKG-INFO +1 -1
  9. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common.egg-info/SOURCES.txt +5 -0
  10. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/setup.py +1 -1
  11. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/README.md +0 -0
  12. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/__init__.py +0 -0
  13. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/__init__.py +0 -0
  14. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/akshare/__init__.py +0 -0
  15. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/akshare/k_line_api.py +0 -0
  16. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/akshare/stock_bid_ask_api.py +0 -0
  17. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/akshare/stock_dt_pool.py +0 -0
  18. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/akshare/stock_zb_pool.py +0 -0
  19. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/akshare/stock_zt_pool_api.py +0 -0
  20. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/akshare/yjyg_sync_api.py +0 -0
  21. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/em/__init__.py +0 -0
  22. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/em/east_money_debt_api.py +0 -0
  23. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/em/east_money_etf_api.py +0 -0
  24. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/em/east_money_stock_api.py +0 -0
  25. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/em/east_money_stock_gdfx_free_top_10_api.py +0 -0
  26. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/em/east_money_stock_hk_api.py +0 -0
  27. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/em/east_money_stock_quotes_sync_api.py +0 -0
  28. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/em/east_money_stock_us_api.py +0 -0
  29. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/em/east_money_stock_v2_api.py +0 -0
  30. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/em/em_concept_index_api.py +0 -0
  31. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/hk/__init__.py +0 -0
  32. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/hk/ths_hk_company_info_api.py +0 -0
  33. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/k_line/__init__.py +0 -0
  34. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/k_line/stock_k_line_data_api.py +0 -0
  35. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/k_line/stock_minute_data_api.py +0 -0
  36. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/kpl/__init__.py +0 -0
  37. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/kpl/common/__init__.py +0 -0
  38. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/kpl/common/kpl_common_api.py +0 -0
  39. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/kpl/common/kpl_common_field_constant.py +0 -0
  40. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/kpl/concept/__init__.py +0 -0
  41. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/kpl/concept/kpl_concept_api.py +0 -0
  42. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/kpl/constant/__init__.py +0 -0
  43. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/kpl/constant/kpl_constant.py +0 -0
  44. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/kpl/industry/__init__.py +0 -0
  45. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/kpl/industry/kpl_industry_api.py +0 -0
  46. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/kpl/selection/__init__.py +0 -0
  47. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/kpl/selection/kpl_selection_plate_api.py +0 -0
  48. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/kpl/symbol/__init__.py +0 -0
  49. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/kpl/symbol/kpl_real_time_quotes_api.py +0 -0
  50. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/kpl/symbol/kpl_symbol_common_field_constant.py +0 -0
  51. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/kpl/symbol/symbol_his_quotes_api.py +0 -0
  52. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/msg/__init__.py +0 -0
  53. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/msg/push_msg_api.py +0 -0
  54. {mns_common-1.3.6.0/mns_common/api/qmt → mns_common-1.3.6.3/mns_common/api/proxies}/__init__.py +0 -0
  55. {mns_common-1.3.6.0/mns_common/api/ths/company → mns_common-1.3.6.3/mns_common/api/qmt}/__init__.py +0 -0
  56. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/qmt/qmt_minunte_tick_data.py +0 -0
  57. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/__init__.py +0 -0
  58. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/big_deal/__init__.py +0 -0
  59. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/big_deal/ths_big_deal_api.py +0 -0
  60. {mns_common-1.3.6.0/mns_common/api/us → mns_common-1.3.6.3/mns_common/api/ths/company}/__init__.py +0 -0
  61. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/company/ths_company_announce_api.py +0 -0
  62. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/company/ths_company_info_api.py +0 -0
  63. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/concept/__init__.py +0 -0
  64. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/concept/app/__init__.py +0 -0
  65. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/concept/app/ths_concept_detail_app.py +0 -0
  66. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/concept/app/ths_concept_index_app.py +0 -0
  67. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/concept/web/__init__.py +0 -0
  68. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/concept/web/ths_common_js_api.py +0 -0
  69. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/concept/web/ths_company_info_web.py +0 -0
  70. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/concept/web/ths_concept_detail_web.py +0 -0
  71. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/concept/web/ths_concept_index_web.py +0 -0
  72. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/self_choose/__init__.py +0 -0
  73. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/self_choose/ths_self_choose_api.py +0 -0
  74. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/wen_cai/__init__.py +0 -0
  75. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/wen_cai/ths_wen_cai_api.py +0 -0
  76. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/zt/__init__.py +0 -0
  77. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/zt/ths_stock_zt_pool_api.py +0 -0
  78. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/ths/zt/ths_stock_zt_pool_v2_api.py +0 -0
  79. {mns_common-1.3.6.0/mns_common/api/xueqiu → mns_common-1.3.6.3/mns_common/api/us}/__init__.py +0 -0
  80. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/us/ths_us_company_info_api.py +0 -0
  81. {mns_common-1.3.6.0/mns_common/component/classify → mns_common-1.3.6.3/mns_common/api/xueqiu}/__init__.py +0 -0
  82. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/api/xueqiu/xue_qiu_k_line_api.py +0 -0
  83. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/__init__.py +0 -0
  84. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/cache/__init__.py +0 -0
  85. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/cache/cache_service.py +0 -0
  86. {mns_common-1.3.6.0/mns_common/component/cookie → mns_common-1.3.6.3/mns_common/component/classify}/__init__.py +0 -0
  87. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/classify/symbol_classify_api.py +0 -0
  88. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/classify/symbol_classify_param.py +0 -0
  89. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/common_service_fun_api.py +0 -0
  90. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/company/__init__.py +0 -0
  91. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/company/company_common_service_api.py +0 -0
  92. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/company/company_common_service_new_api.py +0 -0
  93. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/concept/__init__.py +0 -0
  94. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/concept/kpl_concept_common_service_api.py +0 -0
  95. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/concept/ths_concept_common_service_api.py +0 -0
  96. {mns_common-1.3.6.0/mns_common/component/deal → mns_common-1.3.6.3/mns_common/component/cookie}/__init__.py +0 -0
  97. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/cookie/cookie_info_service.py +0 -0
  98. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/data/__init__.py +0 -0
  99. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/data/data_init_api.py +0 -0
  100. {mns_common-1.3.6.0/mns_common/component/hk → mns_common-1.3.6.3/mns_common/component/deal}/__init__.py +0 -0
  101. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/deal/deal_service_api.py +0 -0
  102. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/deal/terminal_enum.py +0 -0
  103. {mns_common-1.3.6.0/mns_common/component/price → mns_common-1.3.6.3/mns_common/component/hk}/__init__.py +0 -0
  104. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/hk/company_hk_service_api.py +0 -0
  105. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/industry/__init__.py +0 -0
  106. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/industry/ths_industry_index_api.py +0 -0
  107. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/k_line/__init__.py +0 -0
  108. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/k_line/clean/__init__.py +0 -0
  109. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/k_line/clean/k_line_param.py +0 -0
  110. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/k_line/clean/sh_small_normal_zt_k_line_check_api.py +0 -0
  111. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/k_line/common/__init__.py +0 -0
  112. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/k_line/common/k_line_common_service_api.py +0 -0
  113. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/k_line/patterns/__init__.py +0 -0
  114. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/k_line/patterns/k_line_patterns_service_api.py +0 -0
  115. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/k_line/patterns/pattern_Enum.py +0 -0
  116. {mns_common-1.3.6.0/mns_common/component/qmt → mns_common-1.3.6.3/mns_common/component/price}/__init__.py +0 -0
  117. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/price/trade_price_service_api.py +0 -0
  118. {mns_common-1.3.6.0/mns_common/component/redis_msg → mns_common-1.3.6.3/mns_common/component/proxies}/__init__.py +0 -0
  119. {mns_common-1.3.6.0/mns_common/component/self_choose → mns_common-1.3.6.3/mns_common/component/qmt}/__init__.py +0 -0
  120. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/qmt/qmt_buy_service.py +0 -0
  121. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/real_time/__init__.py +0 -0
  122. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/real_time/real_time_common_service_api.py +0 -0
  123. {mns_common-1.3.6.0/mns_common/component/task → mns_common-1.3.6.3/mns_common/component/redis_msg}/__init__.py +0 -0
  124. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/redis_msg/redis_msg_publish_service.py +0 -0
  125. {mns_common-1.3.6.0/mns_common/component/tfp → mns_common-1.3.6.3/mns_common/component/self_choose}/__init__.py +0 -0
  126. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/self_choose/black_list_service_api.py +0 -0
  127. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/self_choose/self_choose_service_api.py +0 -0
  128. {mns_common-1.3.6.0/mns_common/db/v2 → mns_common-1.3.6.3/mns_common/component/task}/__init__.py +0 -0
  129. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/task/real_time_data_sync_check.py +0 -0
  130. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/tfp/stock_tfp_api.py +0 -0
  131. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/trade_date/__init__.py +0 -0
  132. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/trade_date/trade_date_common_service_api.py +0 -0
  133. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/zt/__init__.py +0 -0
  134. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/component/zt/zt_common_service_api.py +0 -0
  135. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/constant/__init__.py +0 -0
  136. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/constant/black_list_classify_enum.py +0 -0
  137. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/constant/east_money_stock_api.py +0 -0
  138. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/constant/extra_income_db_name.py +0 -0
  139. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/constant/price_enum.py +0 -0
  140. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/constant/redis_msg_constant.py +0 -0
  141. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/constant/self_choose_constant.py +0 -0
  142. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/db/MongodbUtil.py +0 -0
  143. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/db/MongodbUtilLocal.py +0 -0
  144. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/db/__init__.py +0 -0
  145. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/db/v2/MongodbUtilV2.py +0 -0
  146. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/utils/__init__.py +0 -0
  147. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/utils/async_fun.py +0 -0
  148. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/utils/cmd_util.py +0 -0
  149. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/utils/data_frame_util.py +0 -0
  150. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/utils/date_handle_util.py +0 -0
  151. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/utils/db_util.py +0 -0
  152. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/utils/file_util.py +0 -0
  153. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common/utils/ip_util.py +0 -0
  154. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common.egg-info/dependency_links.txt +0 -0
  155. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/mns_common.egg-info/top_level.txt +0 -0
  156. {mns_common-1.3.6.0 → mns_common-1.3.6.3}/setup.cfg +0 -0
@@ -1,3 +1,3 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns_common
3
- Version: 1.3.6.0
3
+ Version: 1.3.6.3
@@ -0,0 +1,231 @@
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
+
9
+ import requests
10
+ import json
11
+ import pandas as pd
12
+ from concurrent.futures import ThreadPoolExecutor
13
+ import datetime
14
+ from loguru import logger
15
+
16
+ # 最大返回条数
17
+ max_number = 5800
18
+ # 最小返回条数
19
+ min_number = 5600
20
+ # 分页条数
21
+ page_number = 100
22
+
23
+
24
+ def get_stock_page_data(pn, fields, fs, proxies):
25
+ """
26
+ 获取单页股票数据
27
+ """
28
+ # 获取当前日期和时间
29
+ current_time = datetime.datetime.now()
30
+
31
+ # 将当前时间转换为时间戳(以毫秒为单位)
32
+ current_timestamp_ms = int(current_time.timestamp() * 1000)
33
+
34
+ url = "https://13.push2.eastmoney.com/api/qt/clist/get"
35
+ params = {
36
+ "cb": "jQuery1124046660442520420653_" + str(current_timestamp_ms),
37
+ "pn": str(pn),
38
+ "pz": "10000", # 每页最大200条
39
+ "po": "0",
40
+ "np": "3",
41
+ "ut": "bd1d9ddb04089700cf9c27f6f7426281",
42
+ "fltt": "2",
43
+ "invt": "2",
44
+ "wbp2u": "|0|0|0|web",
45
+ "fid": "f12",
46
+ "fs": fs,
47
+ "fields": fields,
48
+ "_": current_timestamp_ms
49
+ }
50
+ try:
51
+ r = requests.get(url, params, proxies=proxies)
52
+ data_text = r.text
53
+ if pn == 1:
54
+ try:
55
+ begin_index_total = data_text.index('"total":')
56
+
57
+ end_index_total = data_text.index('"diff"')
58
+ global max_number
59
+ max_number = int(data_text[begin_index_total + 8:end_index_total - 1])
60
+ except Exception as e:
61
+ logger.error(f"获取第{pn}页股票列表异常: {e}")
62
+ return pd.DataFrame()
63
+
64
+ begin_index = data_text.index('[')
65
+ end_index = data_text.index(']')
66
+ data_json = data_text[begin_index:end_index + 1]
67
+ data_json = json.loads(data_json)
68
+ if data_json is None:
69
+ return pd.DataFrame()
70
+ else:
71
+ return pd.DataFrame(data_json)
72
+ except Exception as e:
73
+ logger.error(f"获取第{pn}页股票列表异常: {e}")
74
+ return pd.DataFrame()
75
+
76
+
77
+ def all_stock_ticker_data_new(fields, fs, proxies) -> pd.DataFrame:
78
+ """
79
+ 使用多线程获取所有股票数据
80
+ """
81
+
82
+ per_page = page_number
83
+ total_pages = (max_number + per_page - 1) // per_page # 向上取整
84
+
85
+ # 创建线程池
86
+ with ThreadPoolExecutor(max_workers=10) as executor:
87
+ # 提交任务,获取每页数据
88
+ futures = [executor.submit(get_stock_page_data, pn, fields, fs, proxies)
89
+ for pn in range(1, total_pages + 1)]
90
+
91
+ # 收集结果
92
+ results = []
93
+ for future in futures:
94
+ result = future.result()
95
+ if not result.empty:
96
+ results.append(result)
97
+
98
+ # 合并所有页面的数据
99
+ if results:
100
+ return pd.concat(results, ignore_index=True)
101
+ else:
102
+ return pd.DataFrame()
103
+
104
+
105
+ def get_real_time_quotes_all_stocks(proxies):
106
+ fields = ("f352,f2,f3,f5,f6,f8,f10,f11,f22,f12,f14,f15,f16,f17,"
107
+ "f18,f20,f21,f26,f33,f34,f35,f62,f66,f69,f72,f100,f184,f211,f212"),
108
+ fs = "m:0 t:6,m:0 t:80,m:1 t:2,m:1 t:23,m:0 t:81 s:2048"
109
+ # 获取第一页数据
110
+ page_one_df = get_stock_page_data(1, fields, fs, proxies)
111
+ # 数据接口正常返回5600以上的数量
112
+ if page_one_df.shape[0] > min_number:
113
+ page_one_df = rename_real_time_quotes_df(page_one_df)
114
+ page_one_df.drop_duplicates('symbol', keep='last', inplace=True)
115
+ return page_one_df
116
+ else:
117
+ page_df = all_stock_ticker_data_new(fields, fs, proxies)
118
+ page_df = rename_real_time_quotes_df(page_df)
119
+ page_df.drop_duplicates('symbol', keep='last', inplace=True)
120
+ return page_df
121
+
122
+
123
+ # 获取所有股票实时行情数据 f33,委比
124
+ def rename_real_time_quotes_df(temp_df):
125
+ temp_df = temp_df.rename(columns={
126
+ "f2": "now_price",
127
+ "f3": "chg",
128
+ "f5": "volume",
129
+ "f6": "amount",
130
+ "f8": "exchange",
131
+ "f10": "quantity_ratio",
132
+ "f22": "up_speed",
133
+ "f11": "up_speed_05",
134
+ "f12": "symbol",
135
+ "f14": "name",
136
+ "f15": "high",
137
+ "f16": "low",
138
+ "f17": "open",
139
+ "f18": "yesterday_price",
140
+ "f20": "total_mv",
141
+ "f21": "flow_mv",
142
+ "f26": "list_date",
143
+ "f33": "wei_bi",
144
+ "f34": "outer_disk",
145
+ "f35": "inner_disk",
146
+ "f62": "today_main_net_inflow",
147
+ "f66": "super_large_order_net_inflow",
148
+ "f69": "super_large_order_net_inflow_ratio",
149
+ "f72": "large_order_net_inflow",
150
+ # "f78": "medium_order_net_inflow",
151
+ # "f84": "small_order_net_inflow",
152
+ "f100": "industry",
153
+ # "f103": "concept",
154
+ "f184": "today_main_net_inflow_ratio",
155
+ "f352": "average_price",
156
+ "f211": "buy_1_num",
157
+ "f212": "sell_1_num"
158
+ })
159
+
160
+ temp_df.loc[temp_df['buy_1_num'] == '-', 'buy_1_num'] = 0
161
+ temp_df.loc[temp_df['sell_1_num'] == '-', 'sell_1_num'] = 0
162
+ temp_df.loc[temp_df['up_speed_05'] == '-', 'up_speed_05'] = 0
163
+ temp_df.loc[temp_df['up_speed'] == '-', 'up_speed'] = 0
164
+ temp_df.loc[temp_df['average_price'] == '-', 'average_price'] = 0
165
+ temp_df.loc[temp_df['wei_bi'] == '-', 'wei_bi'] = 0
166
+ temp_df.loc[temp_df['yesterday_price'] == '-', 'yesterday_price'] = 0
167
+ temp_df.loc[temp_df['now_price'] == '-', 'now_price'] = 0
168
+ temp_df.loc[temp_df['chg'] == '-', 'chg'] = 0
169
+ temp_df.loc[temp_df['volume'] == '-', 'volume'] = 0
170
+ temp_df.loc[temp_df['amount'] == '-', 'amount'] = 0
171
+ temp_df.loc[temp_df['exchange'] == '-', 'exchange'] = 0
172
+ temp_df.loc[temp_df['quantity_ratio'] == '-', 'quantity_ratio'] = 0
173
+ temp_df.loc[temp_df['high'] == '-', 'high'] = 0
174
+ temp_df.loc[temp_df['low'] == '-', 'low'] = 0
175
+ temp_df.loc[temp_df['open'] == '-', 'open'] = 0
176
+ temp_df.loc[temp_df['total_mv'] == '-', 'total_mv'] = 0
177
+ temp_df.loc[temp_df['flow_mv'] == '-', 'flow_mv'] = 0
178
+ temp_df.loc[temp_df['inner_disk'] == '-', 'inner_disk'] = 0
179
+ temp_df.loc[temp_df['outer_disk'] == '-', 'outer_disk'] = 0
180
+ temp_df.loc[temp_df['today_main_net_inflow_ratio'] == '-', 'today_main_net_inflow_ratio'] = 0
181
+ temp_df.loc[temp_df['today_main_net_inflow'] == '-', 'today_main_net_inflow'] = 0
182
+ temp_df.loc[temp_df['super_large_order_net_inflow'] == '-', 'super_large_order_net_inflow'] = 0
183
+ temp_df.loc[temp_df['super_large_order_net_inflow_ratio'] == '-', 'super_large_order_net_inflow_ratio'] = 0
184
+ temp_df.loc[temp_df['large_order_net_inflow'] == '-', 'large_order_net_inflow'] = 0
185
+ # temp_df.loc[temp_df['medium_order_net_inflow'] == '-', 'medium_order_net_inflow'] = 0
186
+ # temp_df.loc[temp_df['small_order_net_inflow'] == '-', 'small_order_net_inflow'] = 0
187
+
188
+ temp_df["list_date"] = pd.to_numeric(temp_df["list_date"], errors="coerce")
189
+ temp_df["wei_bi"] = pd.to_numeric(temp_df["wei_bi"], errors="coerce")
190
+ temp_df["average_price"] = pd.to_numeric(temp_df["average_price"], errors="coerce")
191
+ temp_df["yesterday_price"] = pd.to_numeric(temp_df["yesterday_price"], errors="coerce")
192
+ temp_df["now_price"] = pd.to_numeric(temp_df["now_price"], errors="coerce")
193
+ temp_df["chg"] = pd.to_numeric(temp_df["chg"], errors="coerce")
194
+ temp_df["volume"] = pd.to_numeric(temp_df["volume"], errors="coerce")
195
+ temp_df["amount"] = pd.to_numeric(temp_df["amount"], errors="coerce")
196
+ temp_df["exchange"] = pd.to_numeric(temp_df["exchange"], errors="coerce")
197
+ temp_df["quantity_ratio"] = pd.to_numeric(temp_df["quantity_ratio"], errors="coerce")
198
+ temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
199
+ temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
200
+ temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
201
+ temp_df["total_mv"] = pd.to_numeric(temp_df["total_mv"], errors="coerce")
202
+ temp_df["flow_mv"] = pd.to_numeric(temp_df["flow_mv"], errors="coerce")
203
+ temp_df["outer_disk"] = pd.to_numeric(temp_df["outer_disk"], errors="coerce")
204
+ temp_df["inner_disk"] = pd.to_numeric(temp_df["inner_disk"], errors="coerce")
205
+ temp_df["today_main_net_inflow"] = pd.to_numeric(temp_df["today_main_net_inflow"], errors="coerce")
206
+ temp_df["super_large_order_net_inflow"] = pd.to_numeric(temp_df["super_large_order_net_inflow"],
207
+ errors="coerce")
208
+ temp_df["super_large_order_net_inflow_ratio"] = pd.to_numeric(temp_df["super_large_order_net_inflow_ratio"],
209
+ errors="coerce")
210
+ temp_df["large_order_net_inflow"] = pd.to_numeric(temp_df["large_order_net_inflow"],
211
+ errors="coerce")
212
+ # temp_df["medium_order_net_inflow"] = pd.to_numeric(temp_df["medium_order_net_inflow"],
213
+ # errors="coerce")
214
+ # temp_df["small_order_net_inflow"] = pd.to_numeric(temp_df["small_order_net_inflow"], errors="coerce")
215
+
216
+ # 大单比例
217
+ temp_df['large_order_net_inflow_ratio'] = round((temp_df['large_order_net_inflow'] / temp_df['amount']) * 100, 2)
218
+
219
+ # 外盘是内盘倍数
220
+ temp_df['disk_ratio'] = round((temp_df['outer_disk'] - temp_df['inner_disk']) / temp_df['inner_disk'], 2)
221
+ # 只有外盘没有内盘
222
+ temp_df.loc[temp_df["inner_disk"] == 0, ['disk_ratio']] = 1688
223
+ temp_df = temp_df.sort_values(by=['chg'], ascending=False)
224
+ return temp_df
225
+
226
+
227
+ # 示例调用
228
+ if __name__ == "__main__":
229
+ while True:
230
+ df = get_real_time_quotes_all_stocks()
231
+ logger.info("涨停数据,{}", 1)
@@ -0,0 +1,65 @@
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
+ from loguru import logger
9
+ import requests
10
+ import time
11
+ import hashlib
12
+ import json
13
+
14
+ # 提取订单
15
+ """
16
+ orderId:提取订单号
17
+ secret:用户密钥
18
+ num:提取IP个数
19
+ pid:省份
20
+ cid:城市
21
+ type:请求类型,1=http/https,2=socks5
22
+ unbindTime:使用时长,秒/s为单位
23
+ noDuplicate:去重,0=不去重,1=去重
24
+ lineSeparator:分隔符
25
+ singleIp:切换,0=切换,1=不切换
26
+ """
27
+
28
+
29
+ def get_proxy_api(order_id, secret, unbind_time):
30
+ num = "1"
31
+ pid = "-1"
32
+ cid = ""
33
+ noDuplicate = "0"
34
+ lineSeparator = "0"
35
+ singleIp = "0"
36
+ time_str = str(int(time.time())) # 时间戳
37
+
38
+ # 计算sign
39
+ txt = "orderId=" + order_id + "&" + "secret=" + secret + "&" + "time=" + time_str
40
+ sign = hashlib.md5(txt.encode()).hexdigest()
41
+ # 访问URL获取IP
42
+ url = (
43
+ "http://api.hailiangip.com:8422/api/getIp?type=1" + "&num=" + num + "&pid=" + pid
44
+ + "&unbindTime=" + unbind_time + "&cid=" + cid
45
+ + "&orderId=" + order_id + "&time=" + time_str + "&sign=" + sign + "&dataType=0"
46
+ + "&lineSeparator=" + lineSeparator + "&noDuplicate=" + noDuplicate + "&singleIp=" + singleIp)
47
+ my_response = requests.get(url).content
48
+ js_res = json.loads(my_response)
49
+ for dic in js_res["data"]:
50
+ try:
51
+ ip = dic["ip"]
52
+ port = dic["port"]
53
+ ip_port = ip + ":" + str(port)
54
+ return ip_port
55
+ except BaseException as e:
56
+ logger.error("获取ip地址异常:{}", e)
57
+ return None
58
+
59
+
60
+ if __name__ == '__main__':
61
+ order_id = ''
62
+ secret = ''
63
+ unbind_time = str(60 * 10)
64
+ ip = get_proxy_api(order_id, secret, unbind_time)
65
+ print(ip)
@@ -0,0 +1,80 @@
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
+
9
+ import mns_common.api.proxies.liu_guan_proxy_api as liu_guan_proxy_api
10
+ from functools import lru_cache
11
+ import pandas as pd
12
+ import mns_common.utils.data_frame_util as data_frame_util
13
+ from mns_common.db.MongodbUtil import MongodbUtil
14
+ import mns_common.constant.db_name_constant as db_name_constant
15
+ import datetime
16
+
17
+ mongodb_util = MongodbUtil('27017')
18
+
19
+
20
+ @lru_cache(maxsize=None)
21
+ def query_liu_guan_proxy_ip():
22
+ ip_proxy_pool = mongodb_util.find_all_data(db_name_constant.IP_PROXY_POOL)
23
+ return ip_proxy_pool
24
+
25
+
26
+ def clear_proxy_ip_cache():
27
+ query_liu_guan_proxy_ip.cache_clear()
28
+ mongodb_util.remove_data(db_name_constant.IP_PROXY_POOL)
29
+
30
+
31
+ def check_valid(str_now_date, ip_proxy_pool):
32
+ effect_time = list(ip_proxy_pool['effect_time'])[0]
33
+ if effect_time > str_now_date:
34
+ return True
35
+ else:
36
+ clear_proxy_ip_cache()
37
+ return False
38
+
39
+
40
+ def generate_proxy_ip():
41
+ query = {"type": "liu_guan_proxy", }
42
+ stock_account_info = mongodb_util.find_query_data(db_name_constant.STOCK_ACCOUNT_INFO, query)
43
+ order_id = list(stock_account_info['password'])[0]
44
+ secret = list(stock_account_info['account'])[0]
45
+
46
+ now_date = datetime.datetime.now()
47
+ time_to_add = datetime.timedelta(minutes=9, seconds=40)
48
+ new_date = now_date + time_to_add
49
+ str_now_date = new_date.strftime('%Y-%m-%d %H:%M:%S')
50
+
51
+ # 获取10分钟动态ip
52
+ ip = liu_guan_proxy_api.get_proxy_api(order_id, secret, '600')
53
+
54
+ result_dict = {"_id": ip,
55
+ 'effect_time': str_now_date,
56
+ 'ip': ip}
57
+ result_df = pd.DataFrame(result_dict, index=[1])
58
+
59
+ mongodb_util.insert_mongo(result_df, db_name_constant.IP_PROXY_POOL)
60
+
61
+ return ip
62
+
63
+
64
+ def get_proxy_ip(str_now_date):
65
+ ip_proxy_pool = query_liu_guan_proxy_ip()
66
+ if data_frame_util.is_empty(ip_proxy_pool):
67
+ return generate_proxy_ip()
68
+ else:
69
+ if check_valid(str_now_date, ip_proxy_pool):
70
+ return list(ip_proxy_pool['ip'])[0]
71
+ else:
72
+ return generate_proxy_ip()
73
+
74
+
75
+ if __name__ == '__main__':
76
+ while True:
77
+ now_date = datetime.datetime.now()
78
+ str_now_date_test = now_date.strftime('%Y-%m-%d %H:%M:%S')
79
+ ip_test = get_proxy_ip(str_now_date_test)
80
+ print(ip_test)
@@ -0,0 +1,7 @@
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)
@@ -5,6 +5,10 @@ file_path = os.path.abspath(__file__)
5
5
  end = file_path.index('mns') + 14
6
6
  project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
+
9
+ # ip代理池
10
+ IP_PROXY_POOL = 'ip_proxy_pool'
11
+
8
12
  # 大单同步表
9
13
  BIG_DEAL_NAME = "ths_big_deal_fund"
10
14
  # 大单选择表
@@ -0,0 +1,7 @@
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)
@@ -1,3 +1,3 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-common
3
- Version: 1.3.6.0
3
+ Version: 1.3.6.3
@@ -17,6 +17,7 @@ mns_common/api/em/__init__.py
17
17
  mns_common/api/em/east_money_debt_api.py
18
18
  mns_common/api/em/east_money_etf_api.py
19
19
  mns_common/api/em/east_money_stock_api.py
20
+ mns_common/api/em/east_money_stock_api_v3.py
20
21
  mns_common/api/em/east_money_stock_gdfx_free_top_10_api.py
21
22
  mns_common/api/em/east_money_stock_hk_api.py
22
23
  mns_common/api/em/east_money_stock_quotes_sync_api.py
@@ -46,6 +47,8 @@ mns_common/api/kpl/symbol/kpl_symbol_common_field_constant.py
46
47
  mns_common/api/kpl/symbol/symbol_his_quotes_api.py
47
48
  mns_common/api/msg/__init__.py
48
49
  mns_common/api/msg/push_msg_api.py
50
+ mns_common/api/proxies/__init__.py
51
+ mns_common/api/proxies/liu_guan_proxy_api.py
49
52
  mns_common/api/qmt/__init__.py
50
53
  mns_common/api/qmt/qmt_minunte_tick_data.py
51
54
  mns_common/api/ths/__init__.py
@@ -109,6 +112,8 @@ mns_common/component/k_line/patterns/k_line_patterns_service_api.py
109
112
  mns_common/component/k_line/patterns/pattern_Enum.py
110
113
  mns_common/component/price/__init__.py
111
114
  mns_common/component/price/trade_price_service_api.py
115
+ mns_common/component/proxies/__init__.py
116
+ mns_common/component/proxies/proxy_common_api.py
112
117
  mns_common/component/qmt/__init__.py
113
118
  mns_common/component/qmt/qmt_buy_service.py
114
119
  mns_common/component/real_time/__init__.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.6.0',
5
+ version='1.3.6.3',
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