道琼斯指数的当前股票价格是电报机器人的截图

时间:2017-09-24 23:15:05

标签: python python-3.x screenshot telegram-bot stockquotes

我正在创建一个电报机器人,它将向我发送道琼斯的当前股票价格。这个过程正在以这种方式工作,它需要从谷歌屏幕截图保存然后剪切它并将其作为消息发送。但是如果一个2人或更多人同时运行此命令会怎么样呢。我不想碰撞。我需要一些线程或什么?我可以更快地完成这个过程吗?

@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()

我正在使用pythonanywhere服务器。 python 3.5 或者还有其他一些简单的方法来获得当前的价格。对我而言,图片是一种更好的方式,但它可能会得到整数的价格。例如,雅虎财务并未显示道琼斯指数的当前价格

1 个答案:

答案 0 :(得分:0)

如果你想避免碰撞,我认为最好的方法是在短时间内缓存价格指数。显然,价格指数不会每秒都发生变化。

要实现缓存,您可以设置超时(让我们说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()