正己 发表于 2020-9-11 11:51

爷,您关注的帖子更新啦!(支持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 12:43

看到“爷”就进来了

jason903 发表于 2020-9-11 21:31

正己 发表于 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 学习下

正己 发表于 2020-9-11 11:53

康康等会会不会给我推送,毕竟没人更新帖子,只能我用自己的帖子测试了

canker 发表于 2020-9-11 11:57

感谢大佬

yiwai2012 发表于 2020-9-11 12:03

很好 学习了 感谢大佬

jason903 发表于 2020-9-11 12:27

"云函数没有写入的权限", 可以用github的actions,相当有一台可以定时运行的服务器,但没有登录、访问并获取其上文件的权限,但可以运行时定入文件,并读取文件内容通过server酱发送内容

列明 发表于 2020-9-11 12:58

已收藏,以后可能会用到。

正己 发表于 2020-9-11 13:05

涛之雨 发表于 2020-9-11 12:43
看到“爷”就进来了

涛爷,做好了

正己 发表于 2020-9-11 13:09

jason903 发表于 2020-9-11 12:27
"云函数没有写入的权限", 可以用github的actions,相当有一台可以定时运行的服务器,但没有登录、访问并获 ...

也就是说github也是没有写入权限的吧,如果有,那这个函数运行就方便了

Xw丶小威 发表于 2020-9-11 13:58

以后的代码编写和调用将会越来越方便。真好。
页: [1] 2 3
查看完整版本: 爷,您关注的帖子更新啦!(支持server酱)