来自网址的电报机器人图像 - 不需要的缓存

时间:2017-03-10 13:20:49

标签: python caching telegram python-telegram-bot

我正在研究一个电报机器人,可根据要求显示来自多个网络摄像头的图像。我从网址获取图片,然后发送给用户(使用bot.sendPhoto())我的问题是,对于任何给定的网络摄像头,文件名不会改变,似乎照片是从电报的缓存发送的。因此它将在第一次请求图像时显示图像。

我已经考虑过从网址下载图片,使用变量名称保存(比如带有时间戳的名称)然后将其发送到聊天中,这似乎是一个不优雅的解决方案,并希望有更好的东西。就像强制图像不被缓存在电报服务器上一样。

我正在使用python-telegram-bot包装器,但我不确定它是否特定于此。

有什么想法吗?我尝试过搜索,但到目前为止我的搜索量很少。 提前谢谢。

3 个答案:

答案 0 :(得分:4)

我也有同样的问题,但我找到了最简单的解决方案。

调用图像时,必须向图像链接添加带时间戳的参数。 例如:

http://www.example.com/img/img.jpg?a=TIMESTAMP

其中TIMESTAMP是基于您正在使用的语言的时间戳功能。

简单但棘手;)

答案 1 :(得分:1)

我认为最好的方法是像在React中一样做,同样,首先在缓存中检查相同的URL调用。

如果您使用的是Python,最好的方法是:

timestamp = datetime.datetime.now().isoformat()
# Above statement returns like: '2013-11-18T08:18:31.809000'
pic_url = '{0}?a={1}'.format(img_url, timestamp)

希望有帮助!

答案 2 :(得分:0)

我遇到了同样的问题。我想创建一个机器人,它发送由滑雪场的网络摄像头拍摄的图像(webcam.example.com/image.jpg)。不幸的是,文件名和url永远不会更新,电报总是发送缓存的图像。所以我决定改变传递给api的url。为了实现这一点,我写了一个简单的php网站(example.com/photo.php),它重定向到照片的原始网址。之后,我在我的网站空间创建了一个文件夹(example.com/getphoto/),里面有一个.htaccess文件。 .htaccess将此文件夹中的所有请求重定向到photo.php站点,该站点重定向到图像(webcam.example.com/image.jpg)。因此,您可以将所有内容添加到文件夹的URL并仍然可以获取图片(例如example.com/getphoto/42或example.com/getphoto/hrte8437g)。电报api似乎通过url缓存照片,所以如果你总是将另一个结尾添加到传递给api的url,电报不会使用缓存版本而是发送当前图像。始终更改网址的最简单方法是向其添加当前日期。

example.com/photo.php

<?php
header("Location: http://webcam.example.com/image.jpg");
die();
?>

example.com/getphoto/.htaccess

RewriteEngine on
RewriteRule ^(.*)$ http://example.com/photo.php

在python中:

bot.sendPhoto(chat_id, 'example.com/getphoto/' + strftime("%Y-%m-%d_%H-%M-%S", gmtime()))

此解决方法也适用于其他语言,如java或php。您只需要更改获取当前日期的方式。