爷,您关注的帖子更新啦!(支持server酱)
***0x0 前言***最近发现了云函数这个新大陆,太好玩了。之前就有这么一个想法,而且之前看过论坛的一个大佬发过一篇类似的帖子,但是我死活找不到,希望有看到过的大佬发个链接,如果原作大大看到能得滴我一下,我好学习学习。
下面是效果图:
***
***0x1准备***
1.python脚本代码(文末我会给出)
2.server酱的key(这个可以用gayhub一键注册)[飞机票](http://sc.ftqq.com/3.version)
3.腾讯云函数(白嫖老马的大好机会)[飞机票](https://cloud.tencent.com/product/scf)
***
***0x2过程***
本人属于又菜又爱学的那种,论坛的人都是人才,说话又好听,帖子又好玩,超喜欢在这里。但是又不能时时盯着论坛,于是接着最近研究的云函数,写了python脚本提醒自己帖子更新啦(萌新初尝试,踩了很多坑,代码也写得很垃圾,各位大佬见谅!)
**1.首先**
这里以俺最喜欢的python为例,在编程语言区选择python,然后在更多里点击发帖时间,复制url,其他板块的操作也是一样,这个代码通用的。
**2.接着**
打开腾讯的云函数,登录好之后,点击新建,
函数名和模版根据我说的来就可以了,然后下一步,
填写描述和把我的代码复制进去(**代码里需要修改的我都会标注**),并且修改执行方法,
接着点击下面的高级选项,把超时时间设置为900秒,点击完成。
**3.最后**
打开左边的触发管理,新建一个触发器,促发周期选择自定义,填入`0 */15 * * * * *`(每15分钟触发一次),最后保存测试一下代码。(今天感觉测试下来有点浪费资源,我又改写了规则`0 */15 8-23 * * * * `(每天早上八点到晚上11点,每个15分钟触发一次)
***
***0x3尾声***
先说说我踩的坑,最开始是用xpath写好了解析代码,然后发现云函数不支持xpath,我不得不改用正则。再说说判定的机制,我一开始是在pycharm里写了个文本来读取信息进行对比,蛋疼的是云函数没有写入的权限。最后实在没办法我就写了一个延迟函数,结果云函数超过三秒报错(一开始不知道高级设置里还可以设置超时时间)。总结下来,还是有点浪费资源的,而且有很小的概率会没提醒到。
附上代码:
```
import requests
import re
import time
headers = {
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36"
} #构造请求头
skey = ''# 这里填入你的server酱key
url = 'https://www.52pojie.cn/forum.php?mod=forumdisplay&fid=24&filter=author&orderby=dateline&typeid=29'#这是编程区python的帖子,可自行修改
def push():
server_url = "https://sc.ftqq.com/%s.send" % skey
res = getHTMLText(url)
des = re.findall('class="s xst">(.*?)</a>', res)
params = {
"text": '爷,您关注的帖子更新啦!', #server酱提示的标题可自行修改
"desp": des ##server酱提示的内容可自行修改
}
response = requests.get(server_url, params=params)
json_data = response.json()
if json_data['errno'] == 0:
print(" 推送成功。")
else:
print("推送失败")
def getHTMLText(url):#网络异常捕获
try:
r = requests.get(url, headers=headers)
r.raise_for_status()# 如果状态不是200,引发HTTPError异常
r.encoding = r.apparent_encoding
return r.text
except:
return "网站访问异常"
def main(*args):
res = getHTMLText(url)
id = re.findall('tbody id="(.*?)"', res) #正则匹配id
time.sleep(890)#等待时间,可自行修改
id2 = re.findall('tbody id="(.*?)"', res) #正则匹配id
if id == id2:
print("暂无帖子更新") #日志打印
else:
push()#触发server酱推送
print('爷,您关注的帖子更新啦!')#日志打印
# with open('info.text', mode='r') as f:# 写入数据r
# test = f.read()
# if id == test:
# print("暂无帖子更新")
# else:
# with open('info.text', mode='a') as f:
# f.write(id)
# # push()
# print('爷,您关注的帖子更新啦!')
if __name__ == "__main__":
main()
getHTMLText(url)
``` 看到“爷”就进来了 正己 发表于 2020-9-11 20:48
我创建好了,不过第一次使用action,yml写得有问题一直报错,大佬能否帮我看一下
https://github.com/ZJ ...
修正:
修正1:
从
run: python3 qiandao.py|
修改为
run: python qiandao.py
修正2:
在run步骤前增加步骤:
- name: Install Dependencies
run: |
pip install -r request.text
修正3:
修改request.text内容
从
request
修改为
requests
修正4:
从
skey = ''# 你的server酱skey
修改为:
skey = os.environ['SCKEY']
github repo代码仓库 Settings - Secrets 学习下 康康等会会不会给我推送,毕竟没人更新帖子,只能我用自己的帖子测试了 感谢大佬 很好 学习了 感谢大佬 "云函数没有写入的权限", 可以用github的actions,相当有一台可以定时运行的服务器,但没有登录、访问并获取其上文件的权限,但可以运行时定入文件,并读取文件内容通过server酱发送内容 已收藏,以后可能会用到。 涛之雨 发表于 2020-9-11 12:43
看到“爷”就进来了
涛爷,做好了 jason903 发表于 2020-9-11 12:27
"云函数没有写入的权限", 可以用github的actions,相当有一台可以定时运行的服务器,但没有登录、访问并获 ...
也就是说github也是没有写入权限的吧,如果有,那这个函数运行就方便了 以后的代码编写和调用将会越来越方便。真好。