getLimitUpNewsData.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. # -*- coding:utf-8 -*-
  2. __author__ = 'weijie'
  3. from EmQuantAPI import *
  4. from datetime import timedelta, datetime
  5. import time as _time
  6. import traceback
  7. import requests
  8. import re
  9. from dbOperationStock import dbOperationStock
  10. import db_config
  11. print("开始了")
  12. def mainCallback(quantdata):
  13. print ("mainCallback",str(quantdata))
  14. #登录掉线或者 登陆数达到上线(即登录被踢下线) 这时所有的服务都会停止
  15. if str(quantdata.ErrorCode) == "10001011" or str(quantdata.ErrorCode) == "10001009":
  16. print ("Your account is disconnect. You can force login automatically here if you need.")
  17. #行情登录验证失败(每次连接行情服务器时需要登录验证)或者行情流量验证失败时,会取消所有订阅,用户需根据具体情况处理
  18. elif str(quantdata.ErrorCode) == "10001021" or str(quantdata.ErrorCode) == "10001022":
  19. print ("Your all csq subscribe have stopped.")
  20. #行情服务器断线自动重连连续6次失败(1分钟左右)不过重连尝试还会继续进行直到成功为止,遇到这种情况需要确认两边的网络状况
  21. elif str(quantdata.ErrorCode) == "10002009":
  22. print ("Your all csq subscribe have stopped, reconnect 6 times fail.")
  23. # 行情订阅遇到一些错误(这些错误会导致重连,错误原因通过日志输出,统一转换成EQERR_QUOTE_RECONNECT在这里通知),正自动重连并重新订阅,可以做个监控
  24. elif str(quantdata.ErrorCode) == "10002012":
  25. print ("csq subscribe break on some error, reconnect and request automatically.")
  26. # 资讯服务器断线自动重连连续6次失败(1分钟左右)不过重连尝试还会继续进行直到成功为止,遇到这种情况需要确认两边的网络状况
  27. elif str(quantdata.ErrorCode) == "10002014":
  28. print ("Your all cnq subscribe have stopped, reconnect 6 times fail.")
  29. # 资讯订阅遇到一些错误(这些错误会导致重连,错误原因通过日志输出,统一转换成EQERR_INFO_RECONNECT在这里通知),正自动重连并重新订阅,可以做个监控
  30. elif str(quantdata.ErrorCode) == "10002013":
  31. print ("cnq subscribe break on some error, reconnect and request automatically.")
  32. # 资讯登录验证失败(每次连接资讯服务器时需要登录验证)或者资讯流量验证失败时,会取消所有订阅,用户需根据具体情况处理
  33. elif str(quantdata.ErrorCode) == "10001024" or str(quantdata.ErrorCode) == "10001025":
  34. print("Your all cnq subscribe have stopped.")
  35. else:
  36. pass
  37. def cnqCallback(quantdata):
  38. db = dbOperationStock(db_config.db_stock)
  39. for code in data.Data:
  40. # total = len(data.Data[code])
  41. for k in range(0, len(data.Data[code])):
  42. # print(data.Data[code][k])
  43. # print(data.Data[code][k][7])
  44. se = requests.session()
  45. url = "http://app.jg.eastmoney.com/NewsData/GetNewsText.do?cid=Admin&cid=Admin&id=" + data.Data[code][k][5]
  46. dfNews = se.post(url).text.replace("'", '"').replace('/ ', '/')
  47. dfNew = eval(dfNews)
  48. # print(dfNew)
  49. content = str(dfNew['text']).replace("<a","<span").replace("/a>","/span>")
  50. pattern = 'https://z1.*?\.jpg'
  51. p2 = re.findall(pattern, str(content))
  52. # print(p2)
  53. imgUrl = "http://47.96.39.5:8080/public/default.png"
  54. if(0 != len(p2)) :
  55. imgUrl = p2[0]
  56. sql = "insert into `news` (`title`, `cover`, `content`, `source`, `hot`, `publish_time`, `create_time`, `update_time`) values('" + str(dfNew['Title']) + "', '" + str(imgUrl) + "', '" + str(content) +"', '" + str(dfNew['medianame']) + "',0,'" + str(dfNew['Date']) + "',now(),now());"
  57. # print(sql)
  58. db.insert(sql)
  59. db.close()
  60. try:
  61. #调用登录函数(激活后使用,不需要用户名密码)
  62. loginResult = c.start("ForceLogin=1", '', mainCallback)
  63. if(loginResult.ErrorCode != 0):
  64. print("login in fail")
  65. exit()
  66. # 资讯查询使用范例
  67. data = c.cfn("S888005002API", "sectornews", eCfnMode_EndCount, "starttime=20201106010000,endtime=20201107,count=10")
  68. print("cfn输出结果======分隔线======")
  69. if (not isinstance(data, c.EmQuantData)):
  70. print (data)
  71. else:
  72. if (data.ErrorCode != 0):
  73. print("request cfn Error, ", data.ErrorMsg)
  74. else:
  75. db = dbOperationStock(db_config.db_stock)
  76. for code in data.Data:
  77. # total = len(data.Data[code])
  78. for k in range(0, len(data.Data[code])):
  79. # print(data.Data[code][k])
  80. # print(data.Data[code][k][7])
  81. se = requests.session()
  82. url = "http://app.jg.eastmoney.com/NewsData/GetNewsText.do?cid=Admin&cid=Admin&id=" + data.Data[code][k][5]
  83. dfNews = se.post(url).text.replace("'", '"').replace('/ ', '/')
  84. dfNew = eval(dfNews)
  85. # print(dfNew)
  86. content = str(dfNew['text']).replace("<a","<span").replace("/a>","/span>")
  87. pattern = 'https://z1.*?\.jpg'
  88. p2 = re.findall(pattern, str(content))
  89. # print(p2)
  90. imgUrl = "http://47.96.39.5:8080/public/default.png"
  91. if(0 != len(p2)) :
  92. imgUrl = p2[0]
  93. sql = "insert into `news` (`title`, `cover`, `content`, `source`, `hot`, `publish_time`, `create_time`, `update_time`) values('" + str(dfNew['Title']) + "', '" + str(imgUrl) + "', '" + str(content) +"', '" + str(dfNew['medianame']) + "',0,'" + str(dfNew['Date']) + "',now(),now());"
  94. # print(sql)
  95. db.insert(sql)
  96. db.close()
  97. # # 资讯订阅使用范例 S888005009API 昨日涨停
  98. data = c.cnq("S888005002API","sectornews","",cnqCallback)
  99. if data.ErrorCode != 0:
  100. print("request cnq Error, ", data.ErrorMsg)
  101. else:
  102. print("cnq输出结果======分隔线======")
  103. text = input("press any key to cancel cnq \r\n")
  104. # 取消订阅
  105. data = c.cnqcancel(data.SerialID)
  106. #退出
  107. data = logoutResult = c.stop()
  108. except Exception as ee:
  109. print("error >>>",ee)
  110. traceback.print_exc()
  111. else:
  112. print("demo end")