guanjun.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. # import datetime
  2. import pymongo
  3. import time
  4. import logging
  5. from twisted.internet import defer, reactor
  6. from ..utils.helper import Helper
  7. from ..settings import M_HOST, M_USER, M_PASSWORD, M_POST, M_DB, LEAGUE_URL, ODDSCH
  8. class Guanjunpipeline(object):
  9. def open_spider(self, spider):
  10. self.mongo = pymongo.MongoClient(host=M_HOST, username=M_USER, password=M_PASSWORD, port=M_POST)
  11. self.db = self.mongo[M_DB]
  12. @defer.inlineCallbacks
  13. def process_item(self, item, spider):
  14. out = defer.Deferred()
  15. reactor.callInThread(self._do_calculation, item, out)
  16. yield out
  17. defer.returnValue(item)
  18. # def process_item(self, item, spider):
  19. def _do_calculation(self, item, out):
  20. # def process_item(self, item, spider):
  21. logger = logging.getLogger(__name__)
  22. data_game = item['data_game'].replace('年', "-").replace('月', "-").replace('日', "")
  23. time_game = item['time_game']
  24. ctime = data_game + " " + time_game + ":00"
  25. # uptime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
  26. league_name = item['league_name']
  27. tema_home = item['tema_home']
  28. league_id = item['league_id']
  29. match_id = item['game_id']
  30. new_league_name = item['new_league_name']
  31. # 冠军赔率
  32. champion_team = round(item['champion_team'], 2)
  33. # 冠军玩法
  34. new_champion = item['new_champion']
  35. # 构建唯一哈希索引
  36. time1 = time.mktime(time.strptime(ctime, '%Y-%m-%d %H:%M:%S')) + 43200
  37. time2 = time.localtime(time1)
  38. time3 = time.strftime('%Y-%m-%d %H:%M:%S', time2)
  39. ball = item['ball']
  40. if ball == '足球':
  41. game_code = 'zq'
  42. league_table = 'zq_league35'
  43. odds_table = "zq_chain35"
  44. elif ball == '篮球':
  45. game_code = 'lq'
  46. league_table = 'lq_league35'
  47. odds_table = "lq_chain35"
  48. elif ball == '网球':
  49. game_code = 'wq'
  50. league_table = "wq_league35"
  51. odds_table = "wq_chain35"
  52. elif ball == '棒球':
  53. game_code = 'bq'
  54. league_table = "bq_league35"
  55. odds_table = "bq_chain35"
  56. else:
  57. print(ball, "冠军数据球类错误")
  58. return
  59. uuid = Helper.genearte_uuid(league_name + 'hg3535')
  60. if self.db[league_table].find({'uuid': uuid}).count() < 1:
  61. league_list = []
  62. payload_key = ['game_code', 'title', 'match_id', 'lg_id', 'source']
  63. payload_value = [game_code, 'league', match_id, league_id, 'hg3535']
  64. l_payload = dict(zip(payload_key, payload_value))
  65. league_key = ['name_chinese', 'kind', 'match_mode', 'if_stop', 'identity', 'belong', 'last_time',
  66. 'lg_id', 'source', 'uuid']
  67. league_value = [new_league_name, '0', '0', '0', uuid, '0', time3, league_id, 'hg3535', uuid]
  68. league_dict = dict(zip(league_key, league_value))
  69. league_list.append(league_dict)
  70. l_payload['data'] = league_list
  71. try:
  72. res = Helper.async_post(LEAGUE_URL, league_list)
  73. if res:
  74. if "成功" in res:
  75. logger.info('{}冠军联赛, 提交成功, {}'.format(game_code, res))
  76. logger.info(league_list)
  77. self.db[league_table].insert(league_list)
  78. else:
  79. logger.warning('{}, 冠军联赛, 提交失败, {}'.format(game_code, res))
  80. logger.warning(l_payload)
  81. else:
  82. logger.warning('{}, 冠军联赛, 接口异常, 提交失败, {}'.format(game_code, res))
  83. logger.warning(l_payload)
  84. except Exception as e:
  85. logger.warning('冠军联赛接口异常, 提交失败, {}'.format(e))
  86. logger.warning(e)
  87. else:
  88. logging.info('冠军联赛数据已存在')
  89. sole = Helper.genearte_MD5(new_champion + str(league_id) + league_name + new_league_name + tema_home, 0)
  90. odds_only = Helper.genearte_MD5(
  91. new_champion + str(league_id) + league_name + new_league_name + str(champion_team) + tema_home + str(
  92. match_id), 0)
  93. if self.db[odds_table].find({'odds_only': odds_only}).count() < 1:
  94. data_list = []
  95. payload_key1 = ['game_code', 'title', 'source']
  96. payload_value1 = [game_code, 'odds_ch', 'hg3535']
  97. only_list = []
  98. chain_dict = dict(zip(payload_key1, payload_value1))
  99. only_list.append(odds_only)
  100. data_key = ['match_id', 'lg_id', 'odds_code', 'status', 'sort', 'p_code', 'odds',
  101. 'condition', 'odds_only', 'sole', 'source', 'type', 'team', 'uuid']
  102. data_value = [match_id, league_id, new_champion, '0', '0', new_league_name, champion_team, '0', odds_only,
  103. sole, 'hg3535', '1', tema_home, uuid]
  104. chain_data = dict(zip(data_key, data_value))
  105. data_list.append(chain_data)
  106. chain_dict['data'] = data_list
  107. chain_dict['odds_only'] = only_list
  108. try:
  109. res = Helper.async_post(ODDSCH, chain_dict)
  110. if res:
  111. if "成功" in res:
  112. logger.info('{}冠军联赛, 提交成功, {}'.format(game_code, res))
  113. logger.info(chain_dict)
  114. self.db[odds_table].insert(chain_data)
  115. else:
  116. logger.warning('{}, 冠军联赛, 提交失败, {}'.format(game_code, res))
  117. logger.warning(chain_dict)
  118. else:
  119. logger.warning('{}, 冠军联赛, 接口异常, 提交失败, {}'.format(game_code, res))
  120. logger.warning(chain_dict)
  121. except Exception as e:
  122. logger.warning('冠军赔率接口异常,提交失败')
  123. logger.warning(e)
  124. else:
  125. logger.info('足球冠军已经提交过了')
  126. reactor.callFromThread(out.callback, item)