今天再来聊聊Power Automate Desktop的使用,之前我们介绍过如何利用“浏览器自动化和UI自动化”,获取某个时间段内关于某个关键词的热门youtube视频,然后让chatgpt帮我总结youtube视频,并用剪映自动生成一个新的视频,最后把内容用telegram bot发送给我这样一个场景。(详见微软Power Automate Desktop 之“UI自动化、浏览器自动化”)
发现自动化RPA还是蛮有意思的,可以很方便的实现一些重复工作,尤其对于不懂代码的朋友,可以很容易的配置出一个工作流。
*Power Automate Desktop官网下载地址:https://learn.microsoft.com/en-us/power-automate/desktop-flows/install#install-power-automate-using-the-msi-installer
今天再说说Power Automate Desktop的“条件、循环和计数器”的功能。我们照旧还是找个实际需求来介绍,直接讲功能可能会比较抽象。
大概需求是这样:我想获取关于IT信息的最新最热新闻,获取5条就行,然后把这5条新闻的标题和链接用telegram bot发送给我。
我就选择hacker news这个新闻网站吧,链接和api地址在下面。
我们看它的API描述发现,它提供的API,可以获取500条最新的新闻ID。
那我们实现需求大概的思路是这样:
step1:通过API获取500条新闻的ID。
step2:取前5条新闻的ID,然后循环这5条新闻,分别获取到这5条新闻的标题和链接。
step3:把这5条新闻的标题和链接用telegram bot发送给我。
接下来我们分步骤说明:
1、获取500条新闻的ID
我们用“调用web服务”的节点功能,把api的url复制进去(url在接口文档里有),然后选择get方法,内容类型为json。点保存即可。
把弹框往下拖动,你会发现调用web服务后,会生成三个变量。
你可以先运行这个节点试试看。在右侧的“流变量”这里,可以看到输出的结果。
statuscode是状态码,200说明是成功了,然后我们看webserviceresponse,看到已经成功的把前500个id返回给我们了。
2、将json转为自定义对象
第一步最后我们获取到的webserviceresponse变量值是一串json文本,我们需要转变一下格式,转变为对象,这样在后面我们比较好获取到前5个id并分别根据id获取新闻标题和链接。如果不太理解可以看后面步骤的内容,整体来看可能会比较好理解一些。
继续拖动一个“将json转为自定义对象”的节点,选择第一步的变量webserviceresponse,保存即可,这时你可以再运行下试试看。
如下,会发现格式已经转变成了列表数值的样式,每个id,都是一个对象。
3、取前5条新闻的ID,然后循环这5条新闻,分别获取到这5条新闻的标题和链接
这一步的逻辑相对复杂一点,要用到循环、条件和计数器的概念。
大概的思路是这样,我们已经有了500个id值了。然后呢,我就从第一个id开始,根据id获取新闻的标题和链接,第一个id获取完成,再获取第二个id….以此类推,一直到第五个id,获取完成后,流程结束。
如何配置呢?我直接把这一块的整体贴出来,看起来可能直观一些。
我们先看计数器,因为没有这个功能,我们用变量的方式实现。
如上红框处:我们先设置一个变量,给它分配一个值“0”。然后,我们循环id,每循环一次,变量值就+1,当等于5的时候,这个循环就结束了。目的就是只取前5个id。这里就用到了计数器,以及if-else循环。
然后,我们就根据获取到的5个id,分别去取这5个id的新闻标题和链接。如下红框处。
这里我们用到for each循环。
说下这里的要点
我们把循环出来的id存在变量里,比如newvar。
然后我们通过api获取web内容
如下,url其他内容是固定的,id这里是动态的,我们选择上一步的newvar变量。
获取到的web内容是json的格式,同理,我们把它转成自定义对象,然后分别设置title和url变量,也就是新闻标题和链接,如下:
title和url的变量值要写对:%JsonAsCustomObject2[‘title’]%、%JsonAsCustomObject2[‘url’]%
最后一步我们设置一个变量,也就是把这5条新闻的标题、链接合并起来,设置成一个变量。
4、把这5条新闻的标题和链接用telegram bot发送给我
最后我们再配置一个http节点,给telegram bot发送消息,url里拼接好bot的token,chatid和发送的text变量,这个节点之前有讲过,这里就不详细说了。
到此,我们的配置就完成了。
以上就是用Power Automate Desktop来实现获取新闻的自动化流程,挺有意思的吧?
说完了用Power Automate Desktop实现无代码配置,最后我们也可以试试用python来完成这个逻辑(适合初学者,经验丰富者就可以跳过了)
首先我们执行API调用,打印响应的状态
import requests
url = 'https://hacker-news.firebaseio.com/v0/topstories.json'
r = requests.get(url)
print("Status code:",r.status_code)
然后呢这个api调用,会返回一个列表,这个列表就是500个新闻的id,我们将响应文本转换为一个Python列表。并将其存储在submission_ids中。我们将使用这些ID来创建一系列字典,其中每个字典都存储了一篇文章的信息。
submission_ids = r.json()
然后我们创建了一个名为submission_dicts的空列表,用于存储前面所说的字典
submission_dicts = []
接下来,我们遍历前5篇文章的ID,对于每篇文章,都执行一个API调用,URL里面就包含submission_id的当前值。我们为当前处理的文章创建一个字典,并在其中存储文章的标题以及到其讨论页面的链接,然后我们遍历列表,对于每篇热门文章,都打印其标题、链接。最后,我们将submission_dict附加到submission_dicts末尾。
for submission_id in submission_ids[:5]:
url = ('https://hacker-news.firebaseio.com/v0/item/'+
str(submission_id)+'.json')
submission_r = requests.get(url)
print(submission_r.status_code)
response_dict = submission_r.json()
submission_dict = {
'title':response_dict['title'],
'link':'http://news.ycombinator.com/item?id='+str(submission_id),
}
submission_dicts.append(submission_dict)
最后我们就通过telegram bot把新闻的标题和链接发送出来。
def send_telegram_message(bot_token, chat_id, message):
send_text = 'https://api.telegram.org/bot' + bot_token + '/sendMessage?chat_id=' + chat_id + '&parse_mode=Markdown&text=' + message
response = requests.get(send_text)
return response.json()
bot_token = 'your_bot_token'
chat_id = 'your_chat_id'
for submission_dict in submission_dicts:
title = submission_dict['title']
link = submission_dict['link']
message = f"Title: {title}\nLink: {link}"
send_telegram_message(bot_token, chat_id, message)
这样就ok了。
视频介绍: