guanjun.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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. logger = logging.getLogger(__name__)
  21. data_game = item['data_game'].replace('年', "-").replace('月', "-").replace('日', "")
  22. time_game = item['time_game']
  23. ctime = data_game + " " + time_game + ":00"
  24. # uptime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
  25. league_name = item['league_name']
  26. # tema_home = item['tema_home']
  27. league_id = item['league_id']
  28. # match_id = item['game_id']
  29. new_league_name = item['new_league_name']
  30. # 冠军赔率
  31. # champion_team = round(item['champion_team'], 2)
  32. # 冠军玩法
  33. champion_datas = item['champion_data']
  34. # 构建唯一哈希索引
  35. time1 = time.mktime(time.strptime(ctime, '%Y-%m-%d %H:%M:%S')) + 43200
  36. time2 = time.localtime(time1)
  37. time3 = time.strftime('%Y-%m-%d %H:%M:%S', time2)
  38. ball = item['ball']
  39. if ball == 1:
  40. game_code = 'zq'
  41. league_table = 'zq_cleague35'
  42. odds_table = "zq_chain35"
  43. elif ball == 2:
  44. game_code = 'lq'
  45. league_table = 'lq_cleague35'
  46. odds_table = "lq_chain35"
  47. elif ball == 3:
  48. game_code = 'wq'
  49. league_table = "wq_cleague35"
  50. odds_table = "wq_chain35"
  51. elif ball == 4:
  52. game_code = 'bq'
  53. league_table = "bq_cleague35"
  54. odds_table = "bq_chain35"
  55. else:
  56. print(ball, "冠军数据球类错误")
  57. return
  58. uuid = Helper.genearte_uuid(league_name + 'hg3535')
  59. if self.db[league_table].find({'lg_id': league_id}).count() < 1:
  60. league_list = []
  61. payload_key = ['game_code', 'title', 'lg_id', 'source']
  62. payload_value = [game_code, 'league', league_id, 'hg3535']
  63. l_payload = dict(zip(payload_key, payload_value))
  64. league_key = ['name_chinese', 'kind', 'match_mode', 'if_stop', 'identity', 'belong', 'last_time',
  65. 'lg_id', 'source', 'uuid']
  66. league_value = [new_league_name, '0', '0', '0', uuid, '0', time3, league_id, 'hg3535', uuid]
  67. league_dict = dict(zip(league_key, league_value))
  68. league_list.append(league_dict)
  69. l_payload['data'] = league_list
  70. try:
  71. res = Helper.async_post(LEAGUE_URL, l_payload)
  72. if res:
  73. if res.get('status') == 1:
  74. logger.info('{}, {}冠军联赛, 提交成功, {}'.format(game_code, league_name, res))
  75. logger.info(league_list)
  76. self.db[league_table].insert(league_dict)
  77. # self.db[league_table].update({'lg_id': league_id}, {'$set': league_dict},
  78. # upsert=True)
  79. else:
  80. logger.warning('{}, {}, 冠军联赛, 提交失败, {}'.format(game_code, league_name, res))
  81. logger.warning(l_payload)
  82. else:
  83. logger.warning('{}, {}, 冠军联赛, 接口异常, 提交失败, {}'.format(game_code, league_name, res))
  84. logger.warning(l_payload)
  85. except Exception as e:
  86. logger.warning('冠军联赛接口异常, 提交失败, {}'.format(e))
  87. logger.warning(e)
  88. else:
  89. logging.info('{},冠军联赛数据已存在'.format(league_name))
  90. payload_key1 = ['game_code', 'title', 'source', 'lg_id', 'uuid']
  91. payload_value1 = [game_code, 'odds_ch', 'hg3535', league_id, uuid]
  92. chain_dict = dict(zip(payload_key1, payload_value1))
  93. data_list = []
  94. only_list = []
  95. set_id = item['set_id']
  96. for champion_data in champion_datas:
  97. mn = champion_data['mn']
  98. odd_datas = champion_data['o']
  99. for odd_data in odd_datas:
  100. tema = odd_data[0]
  101. odd = round(float(odd_data[2]) - 1, 2)
  102. sole = Helper.genearte_MD5(mn + str(league_id) + league_name + new_league_name + tema, 0)
  103. odds_only = Helper.genearte_MD5(
  104. mn + str(league_id) + league_name + new_league_name + str(odd) + tema, 0)
  105. # if self.db[odds_table].find({'odds_only': odds_only}).count() < 1:
  106. data_key = ['match_id', 'lg_id', 'odds_code', 'status', 'sort', 'p_code', 'odds',
  107. 'condition', 'odds_only', 'sole', 'source', 'type', 'team', 'uuid']
  108. data_value = [set_id, league_id, mn, '0', '0', new_league_name, odd, '0', odds_only,
  109. sole, 'hg3535', '1', tema, uuid]
  110. chain_data = dict(zip(data_key, data_value))
  111. data_list.append(chain_data)
  112. if data_list:
  113. chain_dict['data'] = data_list
  114. chain_dict['odds_only'] = only_list
  115. try:
  116. res = Helper.async_post(ODDSCH, chain_dict)
  117. if res:
  118. if res.get('status') == 1:
  119. logger.info('{}冠军赔率,提交成功, {}'.format(game_code, res))
  120. logger.info(chain_dict)
  121. self.db[odds_table].insert(chain_data)
  122. else:
  123. logger.warning('{}, 冠军赔率接口, 提交失败, {}'.format(game_code, res))
  124. logger.warning(chain_dict)
  125. else:
  126. logger.warning('{}, 冠军赔率接口, 接口异常, 提交失败, {}'.format(game_code, res))
  127. logger.warning(chain_dict)
  128. except Exception as e:
  129. logger.warning('冠军赔率接口异常,提交失败')
  130. logger.warning(e)
  131. else:
  132. logger.info('足球冠军赔率, 列表为空, 不提交过')
  133. reactor.callFromThread(out.callback, item)