python-3.x 当前道琼斯指数的股票价格由电报机器人截图

wgeznvg7  于 2023-05-23  发布在  Python
关注(0)|答案(1)|浏览(130)

我正在创建一个电报机器人,它将向我发送道琼斯的当前股票价格。这个过程是这样运作的:它从谷歌屏幕截图,保存它,然后削减它,并发送它作为消息。但是如果两个或更多的人同时运行这个命令怎么办?我不希望碰撞。我需要一些线还是什么?我能更快地完成这个过程吗?

@bot.message_handler(func = lambda message: '📲Dow Jones'in message.text)

def repeat_all_messages222(message):
    url='https://www.google.com/search?q=dow+jones+current+price&oq=dow+jones+current+price&aqs=chrome..69i57&sourceid=chrome&ie=UTF-8'
    adr='/home/weblanss/mysite/dowJones/ss.png'
    
    bot.send_message(message.chat.id,'please wait your request is being processed')
    
    size=(120 ,190,760, 640 )
    ecran(url,size,adr)
    w2=open(adr,'rb')
    bot.send_photo(message.chat.id,w2)

def ecran (url,size,adr):
    display = Display(visible=0, size=(800, 600))
    display.start()

    browser = webdriver.Firefox()
   
    browser.implicitly_wait(15)

    browser.get(url)
    browser.implicitly_wait(15)
    browser.save_screenshot(adr)

    browser.quit()
    img = Image.open(adr)
    crop_rectangle = size
    cropped_img = img.crop(crop_rectangle)

    cropped_img.save(adr)
    display.stop()

我使用的是Python Anywhere服务器。Python 3.5
或者也许有其他简单的方法来获得当前的价格?对我来说,一张图片是一个更好的方法,但如果有可能得到一个整数的价格。例如雅虎财经并不显示道琼斯指数的现价

s3fp2yjn

s3fp2yjn1#

如果你想避免冲突,在我看来,最好的方法是缓存价格指数短时间。显然,价格指数并不是每秒钟都在变化。
为了实现缓存,您可以设置一个超时(假设1分钟)和一个标志。按如下方式初始化:
timeout = time.time()flag = False。请注意,time.time()返回当前时间。
每当用户请求价格指数时,首先检查超时时间是否超过1分钟:

if time.time() - timeout > 1 * 60:
    # you need to update the screenshot
else:
    # you can send the user the previously taken screenshot

这里的标志是为了防止碰撞。如果是flag is True,则表示系统正在截图,在完成之前不能再次请求。因此,我们完成代码如下:

if time.time() - timeout > 1 * 60:
    if flag is False:
        flag = True
        take_screenshot()
        flag = False
    while flag is True:
        time.sleep(1)
    send_screenshot()
else:
    send_screenshot()

相关问题