使用 Azure 存储队列和 Python 自动发送推文
作者:互联网
如果我看看我覆盖面最大的地方,那就是Twitter。所以我决定创建一个自动化的Twitter活动。
如果我想玩Python-那么我可以以编程方式发送推文。
如果我想玩蔚蓝...我可以使用 Azure 函数计划推文
您可以在第 4 部分中查看结果
获取内容
如果您还没有看过本系列的其他部分,TLDR 是我要求患有神经多样性(多动症、双相情感障碍、阅读障碍等)的人填写一份简短的调查,最后一部分要求参与者向最近可能被诊断或正在考虑寻求诊断的人发送匿名消息。
存储队列
我需要一种方法来存储消息,以便可以调用它们。
最初,我想使用像Cosmos DB这样的NoSQL数据库。我本可以添加,然后让脚本提取当天的消息。schedule day
这将起作用,但是启动一个数据库来存储 30 个文档感觉很多。
我的下一个想法是做一些更轻松的事情(比如SQLite),然后我想起了PyTexas关于在Python中使用队列的演讲。虽然我不想让脚本运行那么长时间,但我开始考虑将文本存储在队列中。这时我记得有 Azure 存储队列。
简而言之,存储队列允许您存储数百万条消息(字节或 unicode)。它的主要功能是从队列顶部提取数据,然后删除消息或将其推送到底部。
这很完美,因为我已经有一个消息列表。我只需要将它们添加到队列中。然后,我的 azure 函数将只从处理消息的队列中调用。
from azure.storage.queues import QueueClient
import json
queue = QueueClient.from_connection_string(
conn_str=<CONNECTION_STRING>, queue_name=<QUEUE_NAME>
)
for idx, message in enumerate(messages):
queue.send_message({"index": idx, "text": message})
# to receive the message
_msg = json.loads(queue.receive_message()['content'])
Creating Images
Sending text to twitter didn't seem like the greatest option. There is a character limit and studies show tweets are more engaging when you add images. This gave me the idea of creating a base image and overlaying the text on the image.
我能够使用Canva构建一个简单的基础映像。然后,我使用枕头覆盖了文本。在图像上处理文本很难做到完美,所以我选择创建 4 个类别和每个类别的比例。
{
"md": 0.010,
"lg": 0.012,
"xl": 0.014,
"2xl": 0.020,
}
然后,我使用该比率自动缩放文本,直到边界框达到所需的大小。
draw = ImageDraw.Draw(image)
font_size = 1
font = ImageFont.truetype("assets/Lato-BoldItalic.ttf", font_size)
while font.getbbox(text)[1] < image_size_ratio:
font_size += 1
font = ImageFont.truetype("assets/Lato-BoldItalic.ttf", font_size)
它并不完美,但good_enough。然后我把那个索引和一个标签添加到图像上,我准备好了。