#!/usr/bin/env python # -*- coding: utf-8 -*- import json from datetime import datetime from datetime import date import itertools __author__ = 'ethereal' __mtime__ = '2019/3/29' # a = {'concede_size': {'3078257': {'concede_home_rule': ['-0/0.5', ''], 'concede_home': ['1.03', '0.00'], 'concede_guest_rule': ['+0/0.5', ''], 'concede_guest': ['0.81', '0.00'], 'half_concede_home_rule': '', 'half_concede_home': '', 'half_concede_guest_rule': '', 'half_concede_guest': '', 'size_home_rule': ['6', '5.5/6'], 'size_home': ['0.99', '0.64'], 'size_guest_rule': ['6', '5.5/6'], 'size_guest': ['0.83', '1.21'], 'half_size_guest': '', 'half_size_guest_rule': '', 'half_size_home': '', 'half_size_home_rule': '', 'league_id': 28188, 'league_name': '哥斯达黎加甲组联赛', 'game_id': '3078257', 'team_home': '佩雷斯泽内度', 'team_guest': '阿拉伦斯', 'number': '4', 'time_game': '63:36', 'corner_ball': '', 'score_home': '2', 'score_guest': '3', 'half_way': '下半场'}}, 'capot': {'3078257': {'capot_home': '', 'capot_guest': '', 'capot_dogfall': '', 'half_capot_home': '', 'half_capot_guest': '', 'half_capot_dogfall': '', 'league_id': 28188, 'league_name': '哥斯达黎加甲组联赛', 'game_id': '3078257', 'team_home': '佩雷斯泽内度', 'team_guest': '阿拉伦斯', 'number': '4', 'data_game': '28 / 03', 'time_game': '63:36', 'corner_ball': '', 'score_home': '2', 'score_guest': '3', 'half_way': '下半场'}}, 'odd_even': {'3078257': {'odd_even_odd': '', 'odd_even_even': '', 'half_odd_even_odd': '', 'half_odd_even_even': '', 'league_id': 28188, 'league_name': '哥斯达黎加甲组联赛', 'game_id': '3078257', 'team_home': '佩雷斯泽内度', 'team_guest': '阿拉伦斯', 'number': '4', 'data_game': '28 / 03', 'time_game': '63:36', 'corner_ball': '', 'score_home': '2', 'score_guest': '3', 'half_way': '下半场'}}, 'total_goal': {'3078257': {'total_goal_zero': '', 'total_goal_two': '', 'total_goal_four': '', 'total_goal_seven': '', 'half_total_goal_zero': '', 'half_total_goal_one': '', 'half_total_goal_two': '', 'half_total_goal_three': '', 'league_id': 28188, 'league_name': '哥斯达黎加甲组联赛', 'game_id': '3078257', 'team_home': '佩雷斯泽内度', 'team_guest': '阿拉伦斯', 'number': '4', 'data_game': '28 / 03', 'time_game': '63:36', 'corner_ball': '', 'score_home': '2', 'score_guest': '3', 'half_way': '下半场'}}, 'half_full': {'3078257': {'half_full_home_home': '', 'half_full_home_dogfall': '', 'half_full_home_guest': '', 'half_full_dogfall_home': '', 'half_full_dogfall_dogfall': '', 'half_full_dogfall_guest': '', 'half_full_guest_home': '', 'half_full_guest_dogfall': '', 'half_full_guest_guest': '', 'league_id': 28188, 'league_name': '哥斯达黎加甲组联赛', 'game_id': '3078257', 'team_home': '佩雷斯泽内度', 'team_guest': '阿拉伦斯', 'number': '4', 'data_game': '28 / 03', 'time_game': '63:36', 'corner_ball': '', 'score_home': '2', 'score_guest': '3', 'half_way': '下半场'}}, 'bodan': {'3078257': {'bodan': '', 'half_bodan': '', 'league_id': 28188, 'league_name': '哥斯达黎加甲组联赛', 'game_id': '3078257', 'team_home': '佩雷斯泽内度', 'team_guest': '阿拉伦斯', 'number': '4', 'data_game': '28 / 03', 'time_game': '63:36', 'corner_ball': '', 'score_home': '2', 'score_guest': '3', 'half_way': '下半场'}}, 'first_last_ball': {'3078257': {'first_ball_home': '', 'first_ball_guest': '', 'last_ball_home': '', 'last_ball_guest': '', 'not_ball': '', 'league_id': 28188, 'league_name': '哥斯达黎加甲组联赛', 'game_id': '3078257', 'team_home': '佩雷斯泽内度', 'team_guest': '阿拉伦斯', 'number': '4', 'data_game': '28 / 03', 'time_game': '63:36', 'corner_ball': '', 'score_home': '2', 'score_guest': '3', 'half_way': '下半场'}}} # c = json.dumps(a,ensure_ascii=False) # print(c) # concede_size # with open('test.json','r') as f: # for line in f: # temp = json.loads(line) # print(temp) # 二级页面url= http://hg3535z.com/odds2/d/getamodds?eid=3108814&iip=true&ubt=am&isp=false # from xpinyin import Pinyin # wordvalue = "ATP美国女子网球公开赛2019" # p = Pinyin() # s = p.get_initials(wordvalue, u'').lower() # print(s) # import time # utime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time() + 60)) # print(utime) # a = { # "i": [true, 4, 3110520, 2, 1, "sh", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "14 / 04", "", "", false, true, "棒球", 0], # "eg": { # "c": { # "k": 29400, # "n": "美国职业棒球" # }, # "es": [{ # "dbg": false, # "egid": 0, # "g": "", # "i": ["亚特兰大勇士队", "纽约大都会队", "9", "True", "14 / 04", "", "9", "False", "0", "0", "2", "1", "", "", "", "", 0, "", "", 16, "True"], # "ibs": true, # "ibsc": false, # "k": 3110520, # "o": { # "ah": { # "s": 1, # "v": ["h3164784133", "-1.5", "h3164784134", "+1.5", "o3164784133", "1.33", "o3164784134", "0.55"], # "n": "滚球 让球" # }, # "ou": { # "s": 2, # "v": ["h3164784135", "6.5", "h3164784136", "6.5", "o3164784135", "0.70", "o3164784136", "1.04"], # "n": "总得分:滚球 大 / 小" # }, # "oe": { # "s": 6, # "v": ["o3164784137", "0.51", "o3164784138", "1.58"], # "n": "总得分:滚球 单 / 双" # }, # "ml": { # "s": 5, # "v": ["o3164784139", "0.00", "o3164784140", "0.00"], # "n": "滚球 独赢盘" # } # }, # "p-o": [{ # "n": "净胜球数", # "st": "ha", # "mgk": 9, # "s": 7, # "k": 301, # "o": [ # ["亚特兰大勇士队-赢得1分", "o3164784186", "3.15", "0"], # ["亚特兰大勇士队-赢得2分", "o3164784187", "5.5", "3"], # ["亚特兰大勇士队-赢得3分", "o3164784188", "9.5", "6"], # ["亚特兰大勇士队-赢得4分或更多", "o3164784189", "7.5", "9"], # ["纽约大都会队-赢得1分", "o3164784190", "5.0", "2"], # ["纽约大都会队-赢得2分", "o3164784191", "7.5", "5"], # ["纽约大都会队-赢得3分", "o3164784192", "11.5", "8"], # ["纽约大都会队-赢得4分或更多", "o3164784193", "10.0", "11"] # ] # }, { # "n": "第6局获胜者", # "st": "ha", # "mgk": 0, # "s": 3000, # "k": 4000, # "o": [ # ["和局", "o3164784213", "1.50"], # ["亚特兰大勇士队", "o3164784214", "5.5"], # ["纽约大都会队", "o3164784215", "3.80"] # ] # }, { # "n": "加时", # "st": "ha", # "mgk": 312, # "s": 8, # "k": 13520, # "o": [ # ["是", "o3164784228", "6.0"], # ["不是", "o3164784229", "1.09"] # ] # }], # "pci": { # "ctid": 0 # }, # "sb": { # "fb": false, # "sb": false, # "tb": false, # "ot": 0, # "ps": [{ # "adv": -1, # "a": 1.0, # "e": 3110520, # "h": 2.0, # "p": "ft" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 0.0, # "p": "ot" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 0.0, # "p": "i1" # }, { # "adv": -1, # "a": 1.0, # "e": 3110520, # "h": 1.0, # "p": "i2" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 1.0, # "p": "i3" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 0.0, # "p": "i4" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 0.0, # "p": "i5" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 0.0, # "p": "i6" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 0.0, # "p": "i7" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 0.0, # "p": "i8" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 0.0, # "p": "i9" # }], # "a": 1, # "h": 2, # "k": 3110520, # "iwd": false, # "ls": -1, # "s": 1, # "ts": 0, # "tt": 0, # "ct": "00:00", # "cp": "i5" # }, # "egn": "" # }, { # "dbg": false, # "egid": 0, # "g": "", # "i": ["ATL Braves - Team Runs - Over", "ATL Braves - Team Runs - Under", "9", "True", "14 / 04", "", "9", "False", "0", "0", "2", "0", "", "", "", "", 0, "", "", 16, "True"], # "ibs": true, # "ibsc": false, # "k": 3110522, # "o": { # "ou": { # "s": 3, # "v": ["h3164784242", "3.5", "h3164784243", "3.5", "o3164784242", "1.12", "o3164784243", "0.63"], # "n": "球队得分:亚特兰大勇士队-滚球 大 / 小" # } # }, # "pci": { # "ctid": 208, # "ctn": "球队得分" # }, # "egn": "" # }, { # "dbg": false, # "egid": 0, # "g": "", # "i": ["NY Mets - Team Runs - Over", "NY Mets - Team Runs - Under", "9", "True", "14 / 04", "", "9", "False", "0", "0", "1", "0", "", "", "", "", 0, "", "", 16, "True"], # "ibs": true, # "ibsc": false, # "k": 3110524, # "o": { # "ou": { # "s": 4, # "v": ["h3164784261", "2.5", "h3164784263", "2.5", "o3164784261", "0.55", "o3164784263", "1.23"], # "n": "球队得分:纽约大都会队-滚球 大 / 小" # } # }, # "pci": { # "ctid": 209, # "ctn": "球队得分" # }, # "egn": "" # }] # }, # "ot": 2, # "sc": { # "3110520": { # "a": 1, # "h": 2 # }, # "3110522": { # "a": 0, # "h": 2 # }, # "3110524": { # "a": 0, # "h": 1 # } # }, # "v": 40576 # } # print(a) # data = { # "i": ['true', 4, 3110520, 2, 1, "sh", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "14 / 04", "", "", 'false', 'true', "棒球", 0], # "eg": { # "c": { # "k": 29400, # "n": "美国职业棒球" # }, # "es": [{ # "dbg": 'false', # "egid": 0, # "g": "", # "i": ["亚特兰大勇士队", "纽约大都会队", "9", "True", "14 / 04", "", "9", "False", "0", "0", "2", "1", "", "", "", "", 0, "", "", 16, "True"], # "ibs": 'true', # "ibsc": 'false', # "k": 3110520, # "o": { # "ah": { # "s": 1, # "v": ["h3164784133", "-1.5", "h3164784134", "+1.5", "o3164784133", "1.33", "o3164784134", "0.55"], # "n": "滚球 让球" # }, # "ou": { # "s": 2, # "v": ["h3164784135", "6.5", "h3164784136", "6.5", "o3164784135", "0.70", "o3164784136", "1.04"], # "n": "总得分:滚球 大 / 小" # }, # "oe": { # "s": 6, # "v": ["o3164784137", "0.51", "o3164784138", "1.58"], # "n": "总得分:滚球 单 / 双" # }, # "ml": { # "s": 5, # "v": ["o3164784139", "0.00", "o3164784140", "0.00"], # "n": "滚球 独赢盘" # } # }, # "p-o": [{ # "n": "净胜球数", # "st": "ha", # "mgk": 9, # "s": 7, # "k": 301, # "o": [ # ["亚特兰大勇士队-赢得1分", "o3164784186", "3.15", "0"], # ["亚特兰大勇士队-赢得2分", "o3164784187", "5.5", "3"], # ["亚特兰大勇士队-赢得3分", "o3164784188", "9.5", "6"], # ["亚特兰大勇士队-赢得4分或更多", "o3164784189", "7.5", "9"], # ["纽约大都会队-赢得1分", "o3164784190", "5.0", "2"], # ["纽约大都会队-赢得2分", "o3164784191", "7.5", "5"], # ["纽约大都会队-赢得3分", "o3164784192", "11.5", "8"], # ["纽约大都会队-赢得4分或更多", "o3164784193", "10.0", "11"] # ] # }, { # "n": "第6局获胜者", # "st": "ha", # "mgk": 0, # "s": 3000, # "k": 4000, # "o": [ # ["和局", "o3164784213", "1.50"], # ["亚特兰大勇士队", "o3164784214", "5.5"], # ["纽约大都会队", "o3164784215", "3.80"] # ] # }, { # "n": "加时", # "st": "ha", # "mgk": 312, # "s": 8, # "k": 13520, # "o": [ # ["是", "o3164784228", "6.0"], # ["不是", "o3164784229", "1.09"] # ] # }], # "pci": { # "ctid": 0 # }, # "sb": { # "fb": 'false', # "sb": 'false', # "tb": 'false', # "ot": 0, # "ps": [{ # "adv": -1, # "a": 1.0, # "e": 3110520, # "h": 2.0, # "p": "ft" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 0.0, # "p": "ot" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 0.0, # "p": "i1" # }, { # "adv": -1, # "a": 1.0, # "e": 3110520, # "h": 1.0, # "p": "i2" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 1.0, # "p": "i3" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 0.0, # "p": "i4" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 0.0, # "p": "i5" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 0.0, # "p": "i6" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 0.0, # "p": "i7" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 0.0, # "p": "i8" # }, { # "adv": -1, # "a": 0.0, # "e": 3110520, # "h": 0.0, # "p": "i9" # }], # "a": 1, # "h": 2, # "k": 3110520, # "iwd": 'false', # "ls": -1, # "s": 1, # "ts": 0, # "tt": 0, # "ct": "00:00", # "cp": "i5" # }, # "egn": "" # }, { # "dbg": 'false', # "egid": 0, # "g": "", # "i": ["ATL Braves - Team Runs - Over", "ATL Braves - Team Runs - Under", "9", "True", "14 / 04", "", "9", "False", "0", "0", "2", "0", "", "", "", "", 0, "", "", 16, "True"], # "ibs": 'true', # "ibsc": 'false', # "k": 3110522, # "o": { # "ou": { # "s": 3, # "v": ["h3164784242", "3.5", "h3164784243", "3.5", "o3164784242", "1.12", "o3164784243", "0.63"], # "n": "球队得分:亚特兰大勇士队-滚球 大 / 小" # } # }, # "pci": { # "ctid": 208, # "ctn": "球队得分" # }, # "egn": "" # }, { # "dbg": 'false', # "egid": 0, # "g": "", # "i": ["NY Mets - Team Runs - Over", "NY Mets - Team Runs - Under", "9", "True", "14 / 04", "", "9", "False", "0", "0", "1", "0", "", "", "", "", 0, "", "", 16, "True"], # "ibs": 'true', # "ibsc": 'false', # "k": 3110524, # "o": { # "ou": { # "s": 4, # "v": ["h3164784261", "2.5", "h3164784263", "2.5", "o3164784261", "0.55", "o3164784263", "1.23"], # "n": "球队得分:纽约大都会队-滚球 大 / 小" # } # }, # "pci": { # "ctid": 209, # "ctn": "球队得分" # }, # "egn": "" # }] # }, # "ot": 2, # "sc": { # "3110520": { # "a": 1, # "h": 2 # }, # "3110522": { # "a": 0, # "h": 2 # }, # "3110524": { # "a": 0, # "h": 1 # } # }, # "v": 40576 # } # c = json.dumps(data) # print(c) import jsonpath import requests # ids = jsonpath.jsonpath(res, '$..i-ot[0]..egs..es..i[16]') # ids新列表 # try: # url = "http://sports.5gogo.com/sports/MatchList/getOddsCode" # res = requests.get(url) # if res.status_code == 200: # res = res.json() # # res = res.text # # print(res) # odds_code = jsonpath.jsonpath(res, '$..data..odds_code')#递归取出odds_code 形成列表 # p_id = jsonpath.jsonpath(res, '$..data..odds_code') # 递归取出p_id 形成列表 # # print(len(odds_code)) # # print(len(p_id)) # a = zip(odds_code,p_id) #传递可迭代对象生成 # print(dict(a)) # except: # print('111111111111111111111111') # pass # a = [{'match_id': 3142618, 'create_time': '2019-04-26 10:56:32', 'status': 1, 'ball_type': '棒球'}, {'match_id': 3142621, 'create_time': '2019-04-26 10:56:32', 'status': 1, 'ball_type': '棒球'}] # # for i in a: # # print(i) # print(i['match_id']) import psycopg2 import time from functools import wraps from contextlib import contextmanager import psycopg2.extras # 测试一个函数的运行时间,使用方式:在待测函数直接添加此修饰器 def timethis(func): @wraps(func) def wrapper(*args, **kwargs): start = time.perf_counter() r = func(*args, **kwargs) end = time.perf_counter() print('\n============================================================') print('{}.{} : {}'.format(func.__module__, func.__name__, end - start)) print('============================================================\n') return r return wrapper # 测试一段代码运行的时间,使用方式:上下文管理器with # with timeblock('block_name'): # your_code_block... @contextmanager def timeblock(label='Code'): start = time.perf_counter() try: yield finally: end = time.perf_counter() print('==============================================================') print('{} run time: {}'.format(label, end - start)) print('==============================================================') class SqlConn(): ''' 连接数据库,以及进行一些操作的封装 ''' sql_name = '' database = '' user = '' password = '' port = 0 host = '' # 创建连接、游标 def __init__(self, *args, **kwargs): if kwargs.get("sql_name"): self.sql_name = kwargs.get("sql_name") if kwargs.get("database"): self.database = kwargs.get("database") if kwargs.get("user"): self.user = kwargs.get("user") if kwargs.get("password"): self.password = kwargs.get("password") if kwargs.get("port"): self.port = kwargs.get("port") if kwargs.get("host"): self.host = kwargs.get("host") if not (self.host and self.port and self.user and self.password and self.database): raise Warning("conn_error, missing some params!") sql_conn = { 'postgresql': psycopg2, } self.conn = sql_conn[self.sql_name].connect(host=self.host, port=self.port, user=self.user, password=self.password, database=self.database, ) self.cursor = self.conn.cursor(cursor_factory=psycopg2.extras.DictCursor) if not self.cursor: raise Warning("conn_error!") # 测试连接 def test_conn(self): if self.cursor: print("conn success!") else: print('conn error!') # 单条语句的并提交 def execute(self, sql_code): self.cursor.execute(sql_code) self.conn.commit() # 单条语句的不提交 def execute_no_conmmit(self, sql_code): self.cursor.execute(sql_code) # 构造多条语句,使用%s参数化,对于每个list都进行替代构造 def excute_many(self, sql_base, param_list): self.cursor.executemany(sql_base, param_list) # 批量执行(待完善) def batch_execute(self, sql_code): pass # 获取数据 def get_data(self, sql_code, count=0): self.cursor.execute(sql_code) if int(count): return self.cursor.fetchmany(count) else: return self.cursor.fetchall() # 更新数据 def updata_data(self, sql_code): self.cursor(sql_code) # 插入数据 def insert_data(self, sql_code): self.cursor(sql_code) # 滚动游标 def cursor_scroll(self, count, mode='relative'): self.cursor.scroll(count, mode=mode) # 提交 def commit(self): self.conn.commit() # 回滚 def rollback(self): self.conn.rollback() # 关闭连接 def close_conn(self): self.cursor.close() self.conn.close() class ComplexEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime): return obj.strftime('%Y-%m-%d %H:%M:%S') elif isinstance(obj, date): return obj.strftime('%Y-%m-%d') else: return json.JSONEncoder.default(self, obj) a = SqlConn(sql_name='postgresql',host='127.0.0.1',port=5432,user='postgres',password='9998877',database='postgres') a.test_conn() b = a.get_data("select match_id from st_ball_status2") # print(b) # print(b) d = list(itertools.chain(*b)) print(d) a.close_conn()