Exemplo n.º 1
0
 def ajax_php(self, step=1, params=None):
     """
     step=1:发送请求,校验参数w
     step=2:滑动滑块
     """
     if step == 1:
         params = {
             'gt': self.gt,
             'challenge': self.challenge,
             'lang': 'zh-cn',
             'w': get_full_page_w2(self.gt, self.challenge, self.s) + '1',
             'callback': 'geetest_' + now_str()
         }
     resp = fetch(self.session,
                  url=ajax_php_url,
                  headers=common_login_headers,
                  params=params)
     if resp is None:
         self.res = Resp.TIMEOUT
         return False
     if step != 1:
         res = json.loads(re.search(r'\((.*?)\)', resp.text, re.S).group(1))
         if res['data']['result'] != 'success':
             self.res = Resp.SLIDE_ERR
             return False
         self.validate = res['data']['validate']
         self.sec_code = self.validate + '|jordan'
     return True
Exemplo n.º 2
0
    def get_slide_images(self):
        """获取验证码图片的地址"""
        params = {
            'is_next': 'true',
            'type': 'slide3',
            'gt': self.gt,
            'challenge': self.challenge,
            'lang': 'zh-cn',
            'https': 'true',
            'protocol': 'https://',
            'offline': 'false',
            'product': 'popup',
            'api_server': 'captcha-api.com',
            'width': '100%',
            'callback': 'geetest_' + now_str()
        }
        resp = fetch(self.session,
                     url=get_php_url,
                     headers=common_login_headers,
                     params=params)
        if resp is None:
            self.res = Resp.TIMEOUT
            return False
        res = json.loads(re.search(r'\((.*?)\)', resp.text, re.S).group(1))

        # 获得滑动验证码图片的URL(带缺口+不带缺口)
        self.bg_url = prefix_url + res['data']['bg']
        self.full_bg_url = prefix_url + res['data']['fullbg']
        logger.info(
            f'滑动验证码图片,bg_url:{self.bg_url}, full_bg_url:{self.full_bg_url}')
        # 更新gt/challenge
        self.gt = res['data']['gt']
        self.challenge = res['data']['challenge']
        return True
Exemplo n.º 3
0
def get_shots(player_id: int, season_id: int):
    franchise_id_map = get_abbr_to_franchise_id_map()
    for season_type in [SeasonType.regular_season, SeasonType.playoffs]:
        url = shotchartdetail.build_shotchartdetail_url(
            player_id=player_id, season_id=season_id, season_type=season_type)
        res = fetch(
            url=url,
            description=f"get_shots {player_id} {season_id} {season_type.name}"
        )
        shots = res["resultSets"][0]["rowSet"]
        fshots = []
        indexes_to_remove = [0, 4, 6, 10, 19]
        for shot in shots:
            shot.append(season_type.value)
            shot[-3] = franchise_id_map[shot[-3]]
            shot[-2] = franchise_id_map[shot[-2]]
            # if shot[12] == None:
            #     print(*shot)
            #     if shot[16] < 18:
            #         shot[12] = "2PT Field Goal"
            fshot = tuple(
                [v for i, v in enumerate(shot) if i not in indexes_to_remove])
            fshots.append(fshot)

        insert_shots(fshots)
Exemplo n.º 4
0
def not_found(e):
    page = random.randint(1, rs.url["all"])
    url = (SOURCE_BASE + 'all/{}.csv').format(page)
    data = parser(fetch(url))
    return render_template('404.html',
                           data=data,
                           meta=meta,
                           val=int(time.time())), 404
Exemplo n.º 5
0
    def get_track(self):
        """获取滑动轨迹"""
        resp1 = fetch(self.session,
                      url=self.bg_url,
                      headers=common_login_headers)
        resp2 = fetch(self.session,
                      url=self.full_bg_url,
                      headers=common_login_headers)
        if not (resp1 and resp2):
            self.res = Resp.TIMEOUT
            return False
        img1 = Image.open(BytesIO(resp1.content))
        img2 = Image.open(BytesIO(resp2.content))

        # 计算偏移量
        self.offset = calculate_offset(img1, img2)

        # 根据偏移量获取轨迹
        self.track = get_track(self.offset)
        if self.track is None:
            self.res = Resp.TRACK_ERR
        return self.track is not None
Exemplo n.º 6
0
async def cmd_start(message: Message, state: FSMContext):
    await state.reset_data()
    await state.reset_state()
    await FormState.withBrands.set()

    brandList: list = fetch('api/params/brands')

    mapedBrandList = list(map(lambda brand: FormItem(brand), brandList))

    await state.update_data(brands=mapedBrandList)
    await message.answer(
        'Поїхали! Оберiть марку авто🚙',
        reply_markup=catalogueList(mapedBrandList,
                                   CONFIRM_BUTTON_CALLBACK_BRAND_DATA))
Exemplo n.º 7
0
 def set_gt_challenge(self) -> bool:
     """发送网络请求,拿到gt和challenge"""
     params = dict(t=now_str())
     resp = fetch(self.session,
                  url=gt_register_url,
                  headers=common_login_headers,
                  params=params)
     if resp is None:
         logger.warning('无法获取gt/challenge...')
         self.res = Resp.TIMEOUT
         return False
     res = resp.json()
     logger.info(f'gt/challenge请求结果:{res}')
     self.gt, self.challenge = res['gt'], res['challenge']
     return True
Exemplo n.º 8
0
def member(page=1,
           id=None,
           pages=rs.url["member"],
           base_url='member',
           endpoint='member'):
    if page > int(pages):
        abort(404)
    url = (SOURCE_BASE + base_url + '/{}.csv').format(page)
    data = hash_url(parser(fetch(url)))
    return render_template('member.html',
                           data=data,
                           meta=meta,
                           id=id,
                           pagination=gen_pagination(page, pages),
                           endpoint=endpoint,
                           val=int(time.time()))
Exemplo n.º 9
0
 def get_php(self):
     """注册参数s:s经过多层加密拼接成w"""
     params = {
         'gt': self.gt,
         'challenge': self.challenge,
         'lang': 'zh-cn',
         'w': get_full_page_w1(self.gt, self.challenge, self.s),
         'callback': 'geetest_' + now_str()
     }
     resp = fetch(self.session,
                  url=get_php_url,
                  headers=common_login_headers,
                  params=params)
     if resp is None:
         logger.warning('无法注册参数s...')
         self.res = Resp.TIMEOUT
     return resp is not None
Exemplo n.º 10
0
def member_home(hash_url,
                page=1,
                id=None,
                base_url='source',
                endpoint='member_home'):
    if hash_url not in rs.url["source"].keys():
        abort(404)
    if page > rs.url["source"][hash_url]:
        abort(404)
    url = (SOURCE_BASE + base_url + '/{0}/{1}.csv').format(hash_url, page)
    data = parser(fetch(url))
    return render_template('home.html',
                           data=data,
                           meta=meta,
                           id=id,
                           pagination=gen_pagination(
                               page, rs.url["source"][hash_url]),
                           endpoint=endpoint,
                           kwargs={'hash_url': hash_url},
                           val=int(time.time()))
Exemplo n.º 11
0
def get_players(season_id: int):
    url = commonallplayers.build_players_url(season_id=season_id)
    res = fetch(url=url, description=f"get_players {season_id}")
    # print(res["resultSets"][0]["headers"])
    players = res["resultSets"][0]["rowSet"]

    fplayers = []
    # indexes_to_remove = [0, 4, 6, 10, 19]
    indexes_to_remove = []
    for player in players:
        fplayer = tuple(
            [v for i, v in enumerate(player) if i not in indexes_to_remove])
        fplayers.append(fplayer)

    for p in fplayers:
        (
            id,
            name_last_first,
            name_first_last,
            _roster_status,
            season_from,
            season_to,
            playercode,
            franchise_id,
            _team_city,
            _team_name,
            _team_abbr,
            _team_code,
            _games_plgames_playedayed,
            _otherleague_exp_ch,
        ) = p
        franchise_id = None if franchise_id == 0 else franchise_id
        insert_player(
            id=id,
            name_last_first=name_last_first,
            name_first_last=name_first_last,
            season_from=season_from,
            season_to=season_to,
            code=playercode,
            franchise_id=franchise_id,
        )
Exemplo n.º 12
0
def date_year_month(y,
                    m,
                    page=1,
                    id=None,
                    date=rs.url["date"],
                    base_url='date',
                    endpoint='date_year_month',
                    kwargs=None):
    year_ok = None
    for year in date:
        if year['year'] == y:
            year_ok = year
            break
    if not year_ok:
        print("not year ok", y, date)
        abort(404)
    is_month_ok = m in year_ok['month'].keys()
    if not is_month_ok:
        print("not month ok", m)
        abort(404)
    is_page_ok = page <= year_ok['month'][m]
    if not is_page_ok:
        print("not page ok", page)
        abort(404)

    url = (SOURCE_BASE + base_url + '/{0:04d}{1:02d}/{2}.csv').format(
        y, m, page)
    data = parser(fetch(url))
    return render_template('home.html',
                           data=data,
                           meta=meta,
                           id=id,
                           pagination=gen_pagination(page,
                                                     year_ok['month'][m]),
                           endpoint=endpoint,
                           kwargs=kwargs if kwargs else {
                               'y': y,
                               'm': m
                           },
                           val=int(time.time()))
Exemplo n.º 13
0
async def selectYears(message: Message, state: FSMContext):
    messageText = message.text
    validateResult = validateYear(messageText)

    if bool(validateResult):
        await state.update_data(years=validateResult)
        await FormState.withPrice.set()
        priceList: list = fetch('api/params/price')

        mapedPriceList = list(map(lambda price: FormItem(price), priceList))

        await state.update_data(price=mapedPriceList)
        await message.answer(
            'Оберiть цiновий дiапазон (в долларах <b>США</b>)💵',
            reply_markup=catalogueList(mapedPriceList,
                                       CONFIRM_BUTTON_CALLBACK_PRICE_DATA),
            parse_mode=ParseMode.HTML)
    else:
        await message.answer(
            text=
            'Здається, що Ви ввели невiрну дату🤕.\nКорректний формат має бути точний рiк (наприклад, <b>2007</b>) або перiод (<b>2001-2007</b>)🧐',
            parse_mode=ParseMode.HTML)
Exemplo n.º 14
0
def rss(base_url='all'):
    url = SOURCE_BASE + base_url + '/rss.xml'
    return fetch(url, type="xml"), 200, {
        'Content-Type': 'text/xml; charset=utf-8'
    }