mns-common 1.5.1.7__py3-none-any.whl → 1.5.1.9__py3-none-any.whl

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 (22) hide show
  1. mns_common/api/{akshare → em/real_time/real_time}/__init__.py +1 -1
  2. mns_common/api/em/real_time/{east_money_debt_api.py → real_time/east_money_debt_api.py} +135 -19
  3. mns_common/api/em/real_time/{east_money_etf_api.py → real_time/east_money_etf_api.py} +140 -10
  4. mns_common/api/em/real_time/{east_money_stock_a_api.py → real_time/east_money_stock_a_api.py} +18 -16
  5. mns_common/api/em/real_time/{east_money_stock_hk_api.py → real_time/east_money_stock_hk_api.py} +234 -102
  6. mns_common/api/em/real_time/{real_time_quotes_repeat_api.py → real_time/real_time_quotes_repeat_api.py} +0 -4
  7. {mns_common-1.5.1.7.dist-info → mns_common-1.5.1.9.dist-info}/METADATA +1 -1
  8. {mns_common-1.5.1.7.dist-info → mns_common-1.5.1.9.dist-info}/RECORD +16 -22
  9. mns_common/api/akshare/k_line_api.py +0 -123
  10. mns_common/api/akshare/stock_bid_ask_api.py +0 -94
  11. mns_common/api/akshare/stock_dt_pool.py +0 -47
  12. mns_common/api/akshare/stock_zb_pool.py +0 -48
  13. mns_common/api/akshare/stock_zt_pool_api.py +0 -47
  14. mns_common/api/akshare/yjyg_sync_api.py +0 -98
  15. /mns_common/api/em/{concept → real_time/concept}/__init__.py +0 -0
  16. /mns_common/api/em/{concept → real_time/concept}/em_concept_index_api.py +0 -0
  17. /mns_common/api/em/{gd → real_time/gd}/__init__.py +0 -0
  18. /mns_common/api/em/{gd → real_time/gd}/east_money_stock_gdfx_free_top_10_api.py +0 -0
  19. /mns_common/api/em/real_time/{east_money_stock_a_v2_api.py → real_time/east_money_stock_a_v2_api.py} +0 -0
  20. /mns_common/api/em/real_time/{east_money_stock_us_api.py → real_time/east_money_stock_us_api.py} +0 -0
  21. {mns_common-1.5.1.7.dist-info → mns_common-1.5.1.9.dist-info}/WHEEL +0 -0
  22. {mns_common-1.5.1.7.dist-info → mns_common-1.5.1.9.dist-info}/top_level.txt +0 -0
@@ -5,12 +5,18 @@ file_path = os.path.abspath(__file__)
5
5
  end = file_path.index('mns') + 16
6
6
  project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
- from concurrent.futures import ThreadPoolExecutor
9
8
  import pandas as pd
10
9
  from loguru import logger
11
10
  import requests
12
- import json
13
11
  import time
12
+ import numpy as np
13
+ import mns_common.component.proxies.proxy_common_api as proxy_common_api
14
+ import concurrent.futures
15
+ from concurrent.futures import ThreadPoolExecutor
16
+ from threading import Lock
17
+ import mns_common.utils.data_frame_util as data_frame_util
18
+ import json
19
+ import mns_common.component.cookie.cookie_info_service as cookie_info_service
14
20
 
15
21
  # 最大返回条数
16
22
  max_number = 4500
@@ -225,113 +231,239 @@ def get_hk_real_time_quotes(cookie, proxies):
225
231
 
226
232
 
227
233
  # 获取港股通名单 todo 被封以后替换
228
- def stock_hk_ggt_components_em(proxies) -> pd.DataFrame:
229
- pn = 1
230
-
234
+ def stock_hk_ggt_components_em(cookie, pn, proxies, page_size, time_out) -> pd.DataFrame:
231
235
  """
232
236
  东方财富网-行情中心-港股市场-港股通成份股
233
237
  https://quote.eastmoney.com/center/gridlist.html#hk_components
234
238
  :return: 港股通成份股
235
239
  :rtype: pandas.DataFrame
236
240
  """
241
+ headers = {
242
+ 'Cookie': cookie
243
+ }
244
+ url = "https://33.push2.eastmoney.com/api/qt/clist/get"
245
+ params = {
246
+ "pn": str(pn),
247
+ "pz": str(page_size),
248
+ "po": "1",
249
+ "np": "2",
250
+ "ut": "bd1d9ddb04089700cf9c27f6f7426281",
251
+ "fltt": "2",
252
+ "fid": "f3",
253
+ "fs": "b:DLMK0146,b:DLMK0144",
254
+ "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f23,f24,"
255
+ "f25,f26,f22,f33,f11,f62,f128,f136,f115,f152",
256
+ "_": "1639974456250",
257
+ }
258
+ try:
259
+ if proxies is None:
260
+ r = requests.get(url, params=params, timeout=time_out, headers=headers)
261
+ else:
262
+ r = requests.get(url, params=params, proxies=proxies, timeout=time_out, headers=headers)
263
+
264
+ data_json = r.json()
265
+ temp_df = pd.DataFrame(data_json["data"]["diff"]).T
266
+ temp_df.reset_index(inplace=True)
267
+ temp_df["index"] = temp_df.index + 1
268
+ return temp_df
269
+ except Exception as e:
270
+ logger.error("获取港股通列表:{}", e)
271
+
272
+
273
+ def rename_hg_ggt(temp_df):
274
+ temp_df.columns = [
275
+ "序号",
276
+ "-",
277
+ "最新价",
278
+ "涨跌幅",
279
+ "涨跌额",
280
+ "成交量",
281
+ "成交额",
282
+ "-",
283
+ "-",
284
+ "-",
285
+ "-",
286
+ "-",
287
+ "代码",
288
+ "-",
289
+ "名称",
290
+ "最高",
291
+ "最低",
292
+ "今开",
293
+ "昨收",
294
+ "-",
295
+ "-",
296
+ "-",
297
+ "-",
298
+ "-",
299
+ "-",
300
+ "-",
301
+ "-",
302
+ "-",
303
+ "-",
304
+ "-",
305
+ "-",
306
+ "-",
307
+ "-",
308
+ "-",
309
+ "-",
310
+ ]
311
+ temp_df = temp_df[
312
+ [
313
+ "序号",
314
+ "代码",
315
+ "名称",
316
+ "最新价",
317
+ "涨跌额",
318
+ "涨跌幅",
319
+ "今开",
320
+ "最高",
321
+ "最低",
322
+ "昨收",
323
+ "成交量",
324
+ "成交额",
325
+ ]
326
+ ]
327
+
328
+ temp_df = temp_df.rename(columns={
329
+ "序号": "index",
330
+ "代码": "symbol",
331
+ "名称": "name",
332
+ "最新价": "now_price",
333
+ "涨跌额": "range",
334
+ "涨跌幅": "chg",
335
+ "今开": "open",
336
+ "最高": "high",
337
+ "最低": "low",
338
+ "昨收": "yesterday_price",
339
+ "成交额": "amount",
340
+ "成交量": "volume",
341
+ })
342
+
343
+ return temp_df
344
+
345
+
346
+ def get_stock_hk_ggt_components_em_count(cookie, pn, proxies, page_size, time_out):
347
+ headers = {
348
+ 'Cookie': cookie
349
+ }
350
+ url = "https://33.push2.eastmoney.com/api/qt/clist/get"
351
+ current_timestamp = str(int(round(time.time() * 1000, 0)))
352
+ params = {
353
+ "pn": str(pn),
354
+ "pz": str(page_size),
355
+ "po": "1",
356
+ "np": "2",
357
+ "ut": "bd1d9ddb04089700cf9c27f6f7426281",
358
+ "fltt": "2",
359
+ "fid": "f3",
360
+ "fs": "b:DLMK0146,b:DLMK0144",
361
+ "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f23,f24,"
362
+ "f25,f26,f22,f33,f11,f62,f128,f136,f115,f152",
363
+ "_": str(current_timestamp),
364
+ }
365
+ try:
366
+ if proxies is None:
367
+ r = requests.get(url, params, timeout=time_out, headers=headers)
368
+ else:
369
+ r = requests.get(url, params, proxies=proxies, timeout=time_out, headers=headers)
370
+ data_json = r.json()
371
+ total_number = int(data_json['data']['total'])
372
+ return total_number
373
+ except Exception as e:
374
+ logger.error("获取港股通列表,实时行情异常:{}", e)
375
+ return 0
376
+
377
+
378
+ def repeated_acquisition_ask_hk_gtt_async(em_cookie, time_out, max_number, num_threads, pages_per_thread):
379
+ per_page = page_number
380
+ total_pages = (max_number + per_page - 1) // per_page # 向上取整
237
381
  result_df = pd.DataFrame()
238
- while True:
239
- url = "https://33.push2.eastmoney.com/api/qt/clist/get"
240
- params = {
241
- "pn": str(pn),
242
- "pz": "5000",
243
- "po": "1",
244
- "np": "2",
245
- "ut": "bd1d9ddb04089700cf9c27f6f7426281",
246
- "fltt": "2",
247
- "fid": "f3",
248
- "fs": "b:DLMK0146,b:DLMK0144",
249
- "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f23,f24,"
250
- "f25,f26,f22,f33,f11,f62,f128,f136,f115,f152",
251
- "_": "1639974456250",
252
- }
253
- try:
254
- if proxies is None:
255
- r = requests.get(url, params=params)
256
- else:
257
- r = requests.get(url, params=params, proxies=proxies)
258
-
259
- data_json = r.json()
260
- temp_df = pd.DataFrame(data_json["data"]["diff"]).T
261
- temp_df.reset_index(inplace=True)
262
- temp_df["index"] = temp_df.index + 1
263
-
264
- temp_df.columns = [
265
- "序号",
266
- "-",
267
- "最新价",
268
- "涨跌幅",
269
- "涨跌额",
270
- "成交量",
271
- "成交额",
272
- "-",
273
- "-",
274
- "-",
275
- "-",
276
- "-",
277
- "代码",
278
- "-",
279
- "名称",
280
- "最高",
281
- "最低",
282
- "今开",
283
- "昨收",
284
- "-",
285
- "-",
286
- "-",
287
- "-",
288
- "-",
289
- "-",
290
- "-",
291
- "-",
292
- "-",
293
- "-",
294
- "-",
295
- "-",
296
- "-",
297
- "-",
298
- "-",
299
- "-",
300
- ]
301
- temp_df = temp_df[
302
- [
303
- "序号",
304
- "代码",
305
- "名称",
306
- "最新价",
307
- "涨跌额",
308
- "涨跌幅",
309
- "今开",
310
- "最高",
311
- "最低",
312
- "昨收",
313
- "成交量",
314
- "成交额",
315
- ]
316
- ]
317
- result_df = pd.concat([result_df, temp_df])
318
- if temp_df.shape[0] < page_number:
319
- break
320
- pn = pn + 1
321
- except Exception as e:
322
- logger.error("获取港股通列表:{}", e)
323
- return result_df
324
382
 
383
+ # 创建线程锁以确保线程安全
384
+ df_lock = Lock()
385
+
386
+ # 计算每个线程处理的页数范围
387
+ def process_page_range(start_page, end_page, thread_id):
388
+ nonlocal result_df
389
+ local_df = pd.DataFrame()
390
+ current_page = start_page
391
+ proxy_ip = proxy_common_api.generate_proxy_ip_api(1)
392
+
393
+ while current_page <= end_page and current_page <= total_pages:
394
+ proxies = {"https": proxy_ip, "http": proxy_ip}
395
+ try:
396
+ page_df = stock_hk_ggt_components_em(em_cookie, current_page, proxies, page_number, time_out)
397
+ if data_frame_util.is_not_empty(page_df):
398
+ local_df = pd.concat([local_df, page_df])
399
+ logger.info("线程{}获取页面数据成功: {}", thread_id, current_page)
400
+ current_page += 1
401
+ else:
402
+ time.sleep(0.2)
403
+ proxy_ip = proxy_common_api.generate_proxy_ip_api(1)
404
+ logger.info("线程{}获取页面数据失败: {}", thread_id, current_page)
405
+ except BaseException as e:
406
+ time.sleep(1)
407
+ proxy_ip = proxy_common_api.generate_proxy_ip_api(1)
408
+ logger.error("线程{}处理页面{}时发生错误: {}", thread_id, current_page, e)
409
+
410
+ with df_lock:
411
+ result_df = pd.concat([result_df, local_df])
412
+ return len(local_df)
413
+
414
+ # 计算每个线程的页面范围
415
+ page_ranges = []
416
+ for i in range(num_threads):
417
+ start_page = i * pages_per_thread + 1
418
+ end_page = (i + 1) * pages_per_thread
419
+ if start_page > total_pages:
420
+ break
421
+ page_ranges.append((start_page, end_page, i + 1))
422
+
423
+ # 使用线程池执行任务
424
+ with concurrent.futures.ThreadPoolExecutor(max_workers=num_threads) as executor:
425
+ # 提交所有任务
426
+ futures = [
427
+ executor.submit(process_page_range, start, end, tid)
428
+ for start, end, tid in page_ranges
429
+ ]
430
+
431
+ # 等待所有任务完成并获取结果
432
+ results = []
433
+ for future in concurrent.futures.as_completed(futures):
434
+ try:
435
+ result = future.result()
436
+ results.append(result)
437
+ except Exception as e:
438
+ logger.error("线程执行出错: {}", e)
439
+
440
+ return rename_hg_ggt(result_df)
325
441
 
326
- if __name__ == '__main__':
327
442
 
328
- result_df = stock_hk_ggt_components_em()
329
- cookie_test = 'qgqp_b_id=1e0d79428176ed54bef8434efdc0e8c3; mtp=1; ct=QVRY_s8Tiag1WfK2tSW2n03qpsX-PD8aH_rIjKVooawX8K33UVnpIofK088lD1lguWlE_OEIpQwn3PJWFPhHvSvyvYr4Zka3l4vxtZfH1Uikjtyy9z1H4Swo0rQzMKXncVzBXiOo5TjE-Dy9fcoG3ZF7UVdQ35jp_cFwzOlpK5Y; ut=FobyicMgeV51lVMr4ZJXvn-72bp0oeSOvtzifFY_U7kBFtR6og4Usd-VtBM5XBBvHq0lvd9xXkvpIqWro9EDKmv6cbKOQGyawUSMcKVP57isZCaM7lWQ6jWXajvTfvV4mIR-W_MZNK8VY0lL9W4qNMniJ6PBn_gkJsSAJCadmsyI9cxmjx--gR4m54pdF_nie_y4iWHys83cmWR2R7Bt1KKqB25OmkfCQTJJqIf7QsqangVGMUHwMC39Z9QhrfCFHKVNrlqS503O6b9GitQnXtvUdJhCmomu; pi=4253366368931142%3Bp4253366368931142%3B%E8%82%A1%E5%8F%8B9x56I87727%3BYNigLZRW%2FzMdGgVDOJbwReDWnTPHl51dB0gQLiwaCf1XY98mlJYx6eJbsoYr5Nie%2BX1L%2BzaMsec99KkX%2BT29Ds1arfST7sIBXxjUQ3dp11IPUnXy64PaBFRTHzMRWnCFJvvhc%2FAI41rXSGXolC8YMxI%2BvyPS%2BuErwgOVjC5vvsIiKeO7TLyKkhqqQJPX%2F7RWC5Sf3QLh%3Bdwjn4Xho10%2FKjqOgTWs%2FJF4%2FkdKzeuBwM8sz9aLvJovejAkCAyGMyGYA6AE67Xk2Ki7x8zdfBifF2DG%2Fvf2%2BXAYN8ZVISSEWTIXh32Z5MxEacK4JBTkqyiD93e1vFBOFQ82BqaiVmntUq0V6FrTUHGeh1gG5Sg%3D%3D; uidal=4253366368931142%e8%82%a1%e5%8f%8b9x56I87727; sid=170711377; vtpst=|; quote_lt=1; websitepoptg_api_time=1715777390466; emshistory=%5B%22%E8%BD%AC%E5%80%BA%E6%A0%87%22%2C%22%E8%BD%AC%E5%80%BA%E6%A0%87%E7%9A%84%22%5D; st_si=00364513876913; st_asi=delete; HAList=ty-116-00700-%u817E%u8BAF%u63A7%u80A1%2Cty-1-688695-%u4E2D%u521B%u80A1%u4EFD%2Cty-1-600849-%u4E0A%u836F%u8F6C%u6362%2Cty-1-603361-%u6D59%u6C5F%u56FD%u7965%2Cty-1-603555-ST%u8D35%u4EBA%2Cty-0-000627-%u5929%u8302%u96C6%u56E2%2Cty-0-002470-%u91D1%u6B63%u5927%2Cty-0-832876-%u6167%u4E3A%u667A%u80FD%2Cty-0-300059-%u4E1C%u65B9%u8D22%u5BCC%2Cty-107-CWB-%u53EF%u8F6C%u503AETF-SPDR; st_pvi=26930719093675; st_sp=2024-04-28%2017%3A27%3A05; st_inirUrl=https%3A%2F%2Fcn.bing.com%2F; st_sn=23; st_psi=20240517111108288-113200301321-2767127768'
330
- while True:
331
- df_hk_df = get_hk_real_time_quotes(cookie_test, None)
332
- df_hk_df = df_hk_df[[
333
- "symbol",
334
- "name",
335
- "chg", "amount"
336
- ]]
337
- logger.info('test')
443
+ # 港股通
444
+
445
+
446
+ def get_ggt_real_time_quotes(em_cookie, time_out, pages_per_thread):
447
+ try_numer = 3
448
+ while try_numer > 0:
449
+ proxy_ip = proxy_common_api.generate_proxy_ip_api(1)
450
+ proxies = {"https": proxy_ip,
451
+ "http": proxy_ip}
452
+
453
+ max_number = get_stock_hk_ggt_components_em_count(em_cookie, 1, proxies, 20, time_out)
454
+ if max_number > 0:
455
+ break
456
+ try_numer = try_numer - 1
457
+ if max_number == 0:
458
+ return pd.DataFrame()
459
+
460
+ total_pages = (max_number + page_number - 1) // page_number # 向上取整
461
+
462
+ num_threads = int((total_pages / pages_per_thread) + 1)
463
+ return repeated_acquisition_ask_hk_gtt_async(em_cookie, time_out, max_number, num_threads, pages_per_thread)
464
+
465
+
466
+ if __name__ == '__main__':
467
+ em_cookie = cookie_info_service.get_em_cookie()
468
+ test_df = get_ggt_real_time_quotes(em_cookie, 30, 6)
469
+ print(test_df)
@@ -18,10 +18,6 @@ fields = ("f352,f2,f3,f5,f6,f8,f10,f11,f22,f12,f14,f15,f16,f17,"
18
18
  "f18,f20,f21,f26,f33,f34,f35,f62,f66,f69,f72,f100,f184,f211,f212"),
19
19
  fs = "m:0 t:6,m:0 t:80,m:1 t:2,m:1 t:23,m:0 t:81 s:2048"
20
20
 
21
- # 最大返回条数
22
- max_number = 5800
23
- # 最小返回条数
24
- min_number = 5600
25
21
  # 分页条数
26
22
  PAGE_SIZE = 100
27
23
 
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-common
3
- Version: 1.5.1.7
3
+ Version: 1.5.1.9
4
4
 
@@ -1,25 +1,19 @@
1
1
  mns_common/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
2
2
  mns_common/api/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
3
- mns_common/api/akshare/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
4
- mns_common/api/akshare/k_line_api.py,sha256=IfqJDG2e-_Ry1f_MqjIff6jad9IIC3TjnpmaJ9H_pbk,4290
5
- mns_common/api/akshare/stock_bid_ask_api.py,sha256=Af9t6Pv_-p7PJJ_7rF_JVaGBomkvePMMqALwuBh2Gfw,4139
6
- mns_common/api/akshare/stock_dt_pool.py,sha256=sKedOTzqsBZprJHJEr2sRYa8xbeSK7tRenqBE3wOdUc,2245
7
- mns_common/api/akshare/stock_zb_pool.py,sha256=ylcVgZTzsD3qz9WaItLtoqTf4t-Ex49MDtZUk0xaB5Q,2126
8
- mns_common/api/akshare/stock_zt_pool_api.py,sha256=-j_GZI3TTPV8XWnczgGjct5XZAHZdlptBcECv7Rfyzw,1929
9
- mns_common/api/akshare/yjyg_sync_api.py,sha256=cvk50_XhJWUqduOiC15SYvQTCQqECt6td_L2Hvnl7Jg,4108
10
3
  mns_common/api/em/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
11
- mns_common/api/em/concept/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
12
- mns_common/api/em/concept/em_concept_index_api.py,sha256=PP87ES8a_y0o3SKLzBsPrc7DCPI3MBCD-4SmoUUirl0,8285
13
- mns_common/api/em/gd/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
14
- mns_common/api/em/gd/east_money_stock_gdfx_free_top_10_api.py,sha256=I2-JjFjTjvOxjNAPzuJ1GK7ynvwJcZa_EbmRB2_pmm0,11813
15
4
  mns_common/api/em/real_time/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
16
- mns_common/api/em/real_time/east_money_debt_api.py,sha256=jMvMZtlrDfExl_4jZ1hepHX8rUoeVLoLSOIhRBjkUGk,14753
17
- mns_common/api/em/real_time/east_money_etf_api.py,sha256=tCyH4fNx-KfVRFuNGkgM8d_xkvR0oAfr8T3e7_XrjTM,14414
18
- mns_common/api/em/real_time/east_money_stock_a_api.py,sha256=-FtOGAsR4HtdqkKrm2JE65yTsUnvxAq5ACTp-VvSaSQ,12654
19
- mns_common/api/em/real_time/east_money_stock_a_v2_api.py,sha256=mL4uuL6sVsC2Vnl09826AUnzxePGAUhlZ7I5BBFw8Ks,14530
20
- mns_common/api/em/real_time/east_money_stock_hk_api.py,sha256=KFIYUZ3N4ULrataeCIXwZPo775O7joKgMF466uwVDdY,15154
21
- mns_common/api/em/real_time/east_money_stock_us_api.py,sha256=RiTrdZDuDgTOtiMSD1Ba9aQAx4vghM66pEp_LicH3Ps,11632
22
- mns_common/api/em/real_time/real_time_quotes_repeat_api.py,sha256=kihvxJCUqNr5rQR7CkK8ECWqYd65lcRfvvZoB_HYKH8,16090
5
+ mns_common/api/em/real_time/concept/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
6
+ mns_common/api/em/real_time/concept/em_concept_index_api.py,sha256=PP87ES8a_y0o3SKLzBsPrc7DCPI3MBCD-4SmoUUirl0,8285
7
+ mns_common/api/em/real_time/gd/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
8
+ mns_common/api/em/real_time/gd/east_money_stock_gdfx_free_top_10_api.py,sha256=I2-JjFjTjvOxjNAPzuJ1GK7ynvwJcZa_EbmRB2_pmm0,11813
9
+ mns_common/api/em/real_time/real_time/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
10
+ mns_common/api/em/real_time/real_time/east_money_debt_api.py,sha256=Ou97aq3-N7lge_Nj6FjkJo76agAhTLaz-Df-BK4dA0c,17483
11
+ mns_common/api/em/real_time/real_time/east_money_etf_api.py,sha256=wv1Ae3ydWDZkhlGgCKO8-z-PQj3qRSvoN75xNna4Qcs,19392
12
+ mns_common/api/em/real_time/real_time/east_money_stock_a_api.py,sha256=6xYcNJyMhFFL2eNxQ9c0TbQ53wgumNovVHisXgQX7bs,12737
13
+ mns_common/api/em/real_time/real_time/east_money_stock_a_v2_api.py,sha256=mL4uuL6sVsC2Vnl09826AUnzxePGAUhlZ7I5BBFw8Ks,14530
14
+ mns_common/api/em/real_time/real_time/east_money_stock_hk_api.py,sha256=G_GYF2JvKtYK0J61ySiUtkRKQGeCYz5-WACmucbZfzY,18015
15
+ mns_common/api/em/real_time/real_time/east_money_stock_us_api.py,sha256=RiTrdZDuDgTOtiMSD1Ba9aQAx4vghM66pEp_LicH3Ps,11632
16
+ mns_common/api/em/real_time/real_time/real_time_quotes_repeat_api.py,sha256=PKN2a_8fZpb7fA2Ns3FxVYiYlh34uxEFmmZu2MdqAu4,16008
23
17
  mns_common/api/hk/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
24
18
  mns_common/api/hk/ths_hk_company_info_api.py,sha256=Cxlbuccopa0G1s8o0uTnnyLn2QaxOvbDpJQJOj7J8a8,5360
25
19
  mns_common/api/k_line/__init__.py,sha256=itoGlqKhsx7EVXQoD1vchDKQ5GPB16vDjofTSuQtrXg,161
@@ -159,7 +153,7 @@ mns_common/utils/date_handle_util.py,sha256=XS-MyA8_7k35LOCFAYOHgVcVkMft_Kc4Wa9U
159
153
  mns_common/utils/db_util.py,sha256=hSmfNAN4vEeEaUva6_cicZEhb2jSnib-Gvk2reke1vc,2590
160
154
  mns_common/utils/file_util.py,sha256=egWu6PenGPRp_ixrNTHKarT4dAnOT6FETR82EHUZJnQ,1042
161
155
  mns_common/utils/ip_util.py,sha256=UTcYfz_uytB__6nlBf7T-izuI7hi4XdB6ET0sJgEel4,969
162
- mns_common-1.5.1.7.dist-info/METADATA,sha256=u0T_v08wnex8MtMRI8qfYjKUI8JWaZt7cgl3PzSP0fk,61
163
- mns_common-1.5.1.7.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
164
- mns_common-1.5.1.7.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
165
- mns_common-1.5.1.7.dist-info/RECORD,,
156
+ mns_common-1.5.1.9.dist-info/METADATA,sha256=MUTAjoLLP5YpPFbWtJ-VPEqZFBgSnWZmUDg69wum2NU,61
157
+ mns_common-1.5.1.9.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
158
+ mns_common-1.5.1.9.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
159
+ mns_common-1.5.1.9.dist-info/RECORD,,
@@ -1,123 +0,0 @@
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 requests
9
- import pandas as pd
10
- import mns_common.component.common_service_fun_api as common_service_fun_api
11
- from datetime import datetime
12
- import numpy as np
13
-
14
-
15
- def stock_zh_a_hist(
16
- symbol: str = "0.000001",
17
- period: str = 'daily',
18
- start_date: str = "19700101",
19
- end_date: str = "22220101",
20
- adjust: str = "",
21
- proxies: str = None
22
- ) -> pd.DataFrame:
23
- """
24
- 东方财富网-行情首页-沪深京 A 股-每日行情
25
- http://quote.eastmoney.com/concept/sh603777.html?from=classic
26
- :param symbol: 股票代码
27
- :type symbol: str
28
- :param period: choice of {'daily', 'weekly', 'monthly'}
29
- :type period: str
30
- :param start_date: 开始日期
31
- :type start_date: str
32
- :param end_date: 结束日期
33
- :type end_date: str
34
- :param adjust: choice of {"qfq": "前复权", "hfq": "后复权", "": "不复权"}
35
- :type adjust: str
36
- :param proxies: 代理ip
37
- :type proxies: str
38
-
39
- :return: 每日行情
40
- :rtype: pandas.DataFrame
41
- """
42
- adjust_dict = {"qfq": "1", "hfq": "2", "": "0"}
43
- period_dict = {'daily': '101', 'weekly': '102', 'monthly': '103'}
44
- url = "http://push2his.eastmoney.com/api/qt/stock/kline/get"
45
- now_date = datetime.now()
46
- now_time = int(now_date.timestamp() * 1000)
47
- now_time = str(now_time)
48
-
49
- params = {
50
- "fields1": "f1,f2,f3,f4,f5,f6",
51
- "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f116",
52
- "ut": "7eea3edcaed734bea9cbfc24409ed989",
53
- "klt": period_dict[period],
54
- "fqt": adjust_dict[adjust],
55
- "secid": symbol,
56
- "beg": "0",
57
- "end": "20500000",
58
- "_": now_time,
59
- }
60
-
61
- if proxies is None:
62
- r = requests.get(url, params=params)
63
- else:
64
- r = requests.get(url, params=params, proxies=proxies)
65
-
66
- data_json = r.json()
67
- temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]["klines"]])
68
- temp_df.columns = [
69
- "date",
70
- "open",
71
- "close",
72
- "high",
73
- "low",
74
- "volume",
75
- "amount",
76
- "pct_chg",
77
- "chg",
78
- "change",
79
- "exchange",
80
- ]
81
-
82
- temp_df['date'] = temp_df['date'].apply(
83
- lambda x: x.replace("-", ""))
84
- temp_df.index = temp_df["date"]
85
- temp_df = temp_df[start_date:end_date]
86
- temp_df.reset_index(inplace=True, drop=True)
87
- temp_df['open'] = pd.to_numeric(temp_df['open'])
88
- temp_df['close'] = pd.to_numeric(temp_df['close'])
89
- temp_df['high'] = pd.to_numeric(temp_df['high'])
90
- temp_df['low'] = pd.to_numeric(temp_df['low'])
91
- temp_df['volume'] = pd.to_numeric(temp_df['volume'])
92
- temp_df['amount'] = pd.to_numeric(temp_df['amount'])
93
- temp_df['pct_chg'] = pd.to_numeric(temp_df['pct_chg'])
94
- temp_df['chg'] = pd.to_numeric(temp_df['chg'])
95
- temp_df['change'] = pd.to_numeric(temp_df['change'])
96
- temp_df['exchange'] = pd.to_numeric(temp_df['exchange'])
97
-
98
- temp_df['symbol'] = symbol
99
- temp_df['_id'] = temp_df['symbol'] + '-' + temp_df['date']
100
- temp_df['last_price'] = round(((temp_df['close']) / (1 + temp_df['chg'] / 100)), 2)
101
- temp_df['max_chg'] = round(
102
- ((temp_df['high'] - temp_df['last_price']) / temp_df['last_price']) * 100, 2)
103
- temp_df['amount_level'] = round((temp_df['amount'] / common_service_fun_api.HUNDRED_MILLION), 2)
104
- temp_df['flow_mv'] = round(temp_df['amount'] * 100 / temp_df['exchange'], 2)
105
- temp_df['flow_mv_sp'] = round(temp_df['flow_mv'] / common_service_fun_api.HUNDRED_MILLION, 2)
106
-
107
- temp_df.replace([np.inf, -np.inf], 0, inplace=True)
108
- temp_df.fillna(0, inplace=True)
109
- return temp_df
110
-
111
-
112
- import mns_common.component.proxies.proxy_common_api as proxy_common_api
113
-
114
- if __name__ == '__main__':
115
- while True:
116
- proxy_ip = proxy_common_api.get_proxy_ip(5)
117
- df = stock_zh_a_hist("0.000001",
118
- 'daily',
119
- "19700101",
120
- "22220101",
121
- "",
122
- proxy_ip)
123
- print(df)
@@ -1,94 +0,0 @@
1
- import sys
2
- import os
3
-
4
- file_path = os.path.abspath(__file__)
5
- end = file_path.index('mns') + 7
6
- project_path = file_path[0:end]
7
- sys.path.append(project_path)
8
- import pandas as pd
9
- import requests
10
-
11
-
12
- def stock_bid_ask_em(symbol: str = "000001") -> pd.DataFrame:
13
- """
14
- 东方财富-行情报价
15
- https://quote.eastmoney.com/sz000001.html
16
- :param symbol: 股票代码
17
- :type symbol: str
18
- :return: 行情报价
19
- :rtype: pandas.DataFrame
20
- """
21
- url = "https://push2.eastmoney.com/api/qt/stock/get"
22
- params = {
23
- "fltt": "2",
24
- "invt": "2",
25
- "fields": "f120,f121,f122,f174,f175,f59,f163,f43,f57,f58,f169,f170,f46,f44,f51,"
26
- "f168,f47,f164,f116,f60,f45,f52,f50,f48,f167,f117,f71,f161,f49,f530,"
27
- "f135,f136,f137,f138,f139,f141,f142,f144,f145,f147,f148,f140,f143,f146,"
28
- "f149,f55,f62,f162,f92,f173,f104,f105,f84,f85,f183,f184,f185,f186,f187,"
29
- "f188,f189,f190,f191,f192,f107,f111,f86,f177,f78,f110,f262,f263,f264,f267,"
30
- "f268,f255,f256,f257,f258,f127,f199,f128,f198,f259,f260,f261,f171,f277,f278,"
31
- "f279,f288,f152,f250,f251,f252,f253,f254,f269,f270,f271,f272,f273,f274,f275,"
32
- "f276,f265,f266,f289,f290,f286,f285,f292,f293,f294,f295",
33
-
34
- "secid": symbol,
35
- }
36
- r = requests.get(url, params=params)
37
- data_json = r.json()
38
- tick_dict = {
39
- "now_price": data_json["data"]["f43"],
40
- "dt_price": data_json["data"]["f52"],
41
- "zt_price": data_json["data"]["f51"],
42
- "wei_bi": data_json["data"]["f191"],
43
- "sell_5": data_json["data"]["f31"],
44
- "sell_5_vol": data_json["data"]["f32"] * 100,
45
- "sell_4": data_json["data"]["f33"],
46
- "sell_4_vol": data_json["data"]["f34"] * 100,
47
- "sell_3": data_json["data"]["f35"],
48
- "sell_3_vol": data_json["data"]["f36"] * 100,
49
- "sell_2": data_json["data"]["f37"],
50
- "sell_2_vol": data_json["data"]["f38"] * 100,
51
- "sell_1": data_json["data"]["f39"],
52
- "sell_1_vol": data_json["data"]["f40"] * 100,
53
- "buy_1": data_json["data"]["f19"],
54
- "buy_1_vol": data_json["data"]["f20"] * 100,
55
- "buy_2": data_json["data"]["f17"],
56
- "buy_2_vol": data_json["data"]["f18"] * 100,
57
- "buy_3": data_json["data"]["f15"],
58
- "buy_3_vol": data_json["data"]["f16"] * 100,
59
- "buy_4": data_json["data"]["f13"],
60
- "buy_4_vol": data_json["data"]["f14"] * 100,
61
- "buy_5": data_json["data"]["f11"],
62
- "buy_5_vol": data_json["data"]["f12"] * 100,
63
- }
64
- temp_df = pd.DataFrame(tick_dict, index=[1])
65
- temp_df.reset_index(inplace=True)
66
- temp_df.loc[temp_df['wei_bi'] == '-', 'wei_bi'] = 0
67
- temp_df.loc[temp_df['sell_5_vol'] == '-', 'sell_5_vol'] = 0
68
- temp_df.loc[temp_df['sell_5'] == '-', 'sell_5'] = 0
69
- temp_df.loc[temp_df['sell_4_vol'] == '-', 'sell_4_vol'] = 0
70
- temp_df.loc[temp_df['sell_4'] == '-', 'sell_4'] = 0
71
- temp_df.loc[temp_df['sell_3_vol'] == '-', 'sell_3_vol'] = 0
72
- temp_df.loc[temp_df['sell_3'] == '-', 'sell_3'] = 0
73
- temp_df.loc[temp_df['sell_2_vol'] == '-', 'sell_2_vol'] = 0
74
- temp_df.loc[temp_df['sell_2'] == '-', 'sell_2'] = 0
75
- temp_df.loc[temp_df['sell_1_vol'] == '-', 'sell_1_vol'] = 0
76
- temp_df.loc[temp_df['sell_1'] == '-', 'sell_1'] = 0
77
- temp_df.loc[temp_df['buy_1_vol'] == '-', 'buy_1_vol'] = 0
78
- temp_df.loc[temp_df['buy_1'] == '-', 'buy_1'] = 0
79
- temp_df.loc[temp_df['buy_2_vol'] == '-', 'buy_2_vol'] = 0
80
- temp_df.loc[temp_df['buy_2'] == '-', 'buy_2'] = 0
81
- temp_df.loc[temp_df['buy_3_vol'] == '-', 'buy_3_vol'] = 0
82
- temp_df.loc[temp_df['buy_3'] == '-', 'buy_3'] = 0
83
- temp_df.loc[temp_df['buy_4_vol'] == '-', 'buy_4_vol'] = 0
84
- temp_df.loc[temp_df['buy_4'] == '-', 'buy_4'] = 0
85
- temp_df.loc[temp_df['buy_5_vol'] == '-', 'buy_5_vol'] = 0
86
- temp_df.loc[temp_df['buy_5'] == '-', 'buy_5'] = 0
87
- temp_df['symbol'] = symbol
88
- return temp_df
89
-
90
-
91
- if __name__ == '__main__':
92
- while True:
93
- df = stock_bid_ask_em('0.000001')
94
- print(df)