Уведомлять об изменении сайта с несколькими страницами (без создания большого количества запросов) - PullRequest
0 голосов
/ 23 марта 2020

Я хочу, чтобы моя программа что-то делала при изменении страницы.

У меня сейчас есть запрос python, который выполняет много запросов с 2400 threads. Всего 25000 requests В МИНУТУ .

Есть ли способ не делать много запросов и по-прежнему узнавать, когда страница изменяется в python?

Он отправляет 25000 запросов в общей сложности ~200 страниц. Эти страницы return json (it's an API yes). Речь идет о том, чтобы первым увидеть происходящее изменение. Но почему-то есть кто-то намного быстрее, чем я.

Как мне заставить мою программу работать быстрее?

Вот мой текущий код:

import requests
import time
from multiprocessing.dummy import Pool as ThreadPool
from discord_webhook import DiscordWebhook, DiscordEmbed
import time

cookie = ''
userids = [15189, 80254, 6459069]
typeids = [8, 41, 42, 43, 44, 45, 46, 47]
blacklist = [23705521]
seen = {}

session = requests.session()
session.cookies.set_cookie(requests.cookies.create_cookie(domain='.roblox.com', name='.ROBLOSECURITY', value=cookie))

def buy(id, price):
    print(id)
    try:
        if seen[str(id)] <= (round(time.time()) - 300):
            del(seen[str(id)])
        else:
            return
    except:
        seen[str(id)] = round(time.time())
    discordSignals = DiscordWebhook(url='https://discordapp.com/api/webhooks/0/A')
    embed = DiscordEmbed(title='New snipe', description='A new snipe with a price of less then 150R$', color=0xebedef)
    embed.set_author(name='', url='', icon_url='https://cdn.discordapp.com/avatars/0/a.png?size=128')
    embed.add_embed_field(name='Link', value="https://web.roblox.com/catalog/"+str(id))
    embed.add_embed_field(name="Price", value=str(price)+" R$")
    imgurl = session.get("https://thumbnails.roblox.com/v1/assets?assetIds="+str(id)+"&format=png&size=150x150").json()['data'][0]['imageUrl']
    embed.set_thumbnail(url=imgurl)
    discordSignals.add_embed(embed)
    response = discordSignals.execute()
    print(response)

checks = 0

def check(info):
    global blacklist
    global checks
    userid = info[0]
    typeid = info[1]
    cursor = ""
    goon = True
    req = session.get('https://www.roblox.com/users/inventory/list-json?assetTypeId='+str(typeid)+'&itemsPerPage=100&userId='+str(userid)+'&sortOrder=Desc&cursor='+cursor).json()
    while goon:
        for item in req['Data']['Items']:
            if item['Product'] != None:
                if item['Product']['IsLimited'] or item['Product']['IsLimitedUnique']:
                    checks += 1
                    print("CHECKS => " + str(checks) + " |  ID => " + str(item['Item']['AssetId']))
                    if item['Product']['PriceInRobux'] is not None and item['Product']['PriceInRobux'] <= 150 and item['Item']['AssetId'] not in blacklist:
                        buy(item['Item']['AssetId'], item['Product']['PriceInRobux'])
        if req['Data']['nextPageCursor'] is None:
            goon = False
        else:
            cursor = req['Data']['nextPageCursor']
            req = session.get('https://www.roblox.com/users/inventory/list-json?assetTypeId='+str(typeid)+'&itemsPerPage=100&userId='+str(userid)+'&sortOrder=Desc&cursor='+cursor).json()

counter = 0
def starter(userid):
    global typeids
    global counter
    payl = []
    for typeid in typeids:
        payl.append([userid,typeid])
    pool = ThreadPool(len(payl))
    pool.map(check, payl)

def start(dab):
    global userids
    starter(userids[2])
    starter(userids[1])
    starter(userids[0])

dabs = []
for _ in range(1000):
    dabs.append("dab")

while True:
    pool = ThreadPool(100)
    pool.map(start, dabs)

Спасибо за ваше время,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...