原文链接
带大家一起来白嫖一波Github的免费计算资源呀~mp.weixin.qq.com![fc3f4e3b702e241baae7a18a5cbe16ba.png](https://i-blog.csdnimg.cn/blog_migrate/1fe1166075272773498d7fbeb22d41ce.png)
导语
新的一周,从手把手带大家一起来白嫖一波Github的计算资源开始。
![5368995c2be583e5006523f151e60e00.png](https://i-blog.csdnimg.cn/blog_migrate/92d9cc8413df99cc489b8cd280d401e2.png)
白嫖的主要原理是利用Github的Actions功能,该功能于2018年10月推出。关于它的详细介绍,可以参见:
https://docs.github.com/en/actions
废话不多说,让我们愉快地开始白嫖吧~
相关文件
没有固定的相关文件,这里给出一些公众号之前发过的可以利用的有趣案例吧:
Python监控小姐姐/小哥哥微博,了解一下?
整个小例子呗,实现一下网易云音乐自动签到
开发工具
Python版本:3.6.4
相关模块:
requests模块;
DecryptLogin模块;
以及一些python自带的模块。
环境搭建
去注册个Github账号就行:https://github.com/
白嫖教程
先来简单介绍一下Github的Actions吧,以免各位小伙伴一头雾水。按照官方自己的定义,就是:
Focus on what matters: code. With GitHub Actions you can automate your workflow from idea to production.
说白了,Actions就是一系列的操作,开发者可以通过定义Actions来让你的日常开发流程中的很多事情可以自动化起来。而对于白嫖党来说,我们只需要知道,有了这个功能,我们就可以愉快地白嫖Github的计算资源来干一些我们想干的事情啦。比如说:
- 各大网站、论坛的每日自动签到;
- 每天给自己的邮箱发天气预报/笑话等;
- 下载需要fq才能看到的视频;
- 监控某个人是否发了微博,如果发了就邮件/短信通知自己等等。
上面只是我灵机一动想到的几个还算有趣的点子,大家也可以充分发挥自己的脑回路,来花式地白嫖Github的计算资源。
![5368995c2be583e5006523f151e60e00.png](https://i-blog.csdnimg.cn/blog_migrate/92d9cc8413df99cc489b8cd280d401e2.png)
ok,说了这么多废话,也该开启我们的白嫖之旅了,这里我们以公众号之前的网易云自动签到脚本为例好了:
整个小例子呗,实现一下网易云音乐自动签到
首先,新建一个repo:
![ffac05aee7d9b33ccd5882177f4b102c.png](https://i-blog.csdnimg.cn/blog_migrate/ccbd854e8da1ace9d457e230d28b2e95.jpeg)
然后把我们的自动签到脚本提交到这个repo上去(需要在之前那个版本的基础上做一点小的修改,即改变读取用户名密码的方式):
'''
Function:
网易云音乐自动签到
Author:
Charles
微信公众号:
Charles的皮卡丘
'''
import os
import re
from DecryptLogin import login
from DecryptLogin.platforms.music163 import Cracker
'''网易云音乐自动签到'''
class NeteaseSignin():
def __init__(self, username, password, **kwargs):
self.username = username
self.session = NeteaseSignin.login(username, password)
self.csrf = re.findall('__csrf=(.*?) for', str(self.session.cookies))[0]
self.cracker = Cracker()
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
'Content-Type': 'application/x-www-form-urlencoded',
'Referer': 'http://music.163.com/discover',
'Accept': '*/*'
}
'''外部调用'''
def run(self):
# 签到接口
signin_url = 'https://music.163.com/weapi/point/dailyTask?csrf_token=' + self.csrf
# 模拟签到(typeid为0代表APP上签到, 为1代表在网页上签到)
typeids = [0, 1]
for typeid in typeids:
client_name = 'Web端' if typeid == 1 else 'APP端'
# --构造请求获得响应
data = {
'type': typeid
}
data = self.cracker.get(data)
res = self.session.post(signin_url, headers=self.headers, data=data)
res_json = res.json()
# --判断签到是否成功
if res_json['code'] == 200:
print('[INFO]: 账号%s在%s签到成功...' % (self.username, client_name))
else:
print('[INFO]: 账号%s在%s签到失败, 原因: %s...' % (self.username, client_name, res_json.get('msg')))
'''模拟登录'''
@staticmethod
def login(username, password):
lg = login.Login()
_, session = lg.music163(username, password)
return session
'''run'''
if __name__ == '__main__':
username = os.environ["NETEASE_USERNAME"]
password = os.environ["NETEASE_PASSWORD"]
sign_in = NeteaseSignin(username=username, password=password)
sign_in.run()
接着,来定义一下Github的Actions,让它每天执行一次就可以了。具体而言,就是新建一个action.yml文件,内容如下:
name: 'Netease sign in'
on:
push:
branches:
- master
schedule:
- cron: '0 5 * * *'
jobs:
netease:
runs-on: ubuntu-latest
steps:
- name: 'Checkout codes'
uses: actions/checkout@v2
- name: 'Set python'
uses: actions/setup-python@v1
with:
python-version: '3.x'
- name: 'Install dependencies'
run: python -m pip install --upgrade DecryptLogin
- name: 'signin'
env:
NETEASE_USERNAME: ${{ secrets.NETEASE_USERNAME }}
NETEASE_PASSWORD: ${{ secrets.NETEASE_PASSWORD }}
run: python signin.py
简单解释一下吧,on字段用来定义脚本的触发方式,这里我们定义的是每次push操作后或者每天国际标准时间5点执行:
on:
push:
branches:
- master
schedule:
- cron: '0 5 * * *'
后面的内容,就是定义我们脚本的运行环境,运行所需的依赖包以及运行使用的命令了。比较简单,就不展开讲了。
现在,我们的repo目录结构是这样子的:
![2528c07e711fedd3dcbd73dbf994f337.png](https://i-blog.csdnimg.cn/blog_migrate/472bd5cbf7fae5d02a8b384e9e71f976.png)
注意:
action.yml文件在.github/workflows目录下。
细心的小伙伴可能会问了,签到需要登录呀,网易云的账号密码应该放在哪呢?直接放在代码里也太不安全了。别担心,我们可以把我们的账户名和密码存在我们新建的repo的Secrets中,然后从Actions配置文件的secrets域中读出并设置为对应的环境变量就行了,上面的配置文件中已经实现了这部分内容:
env:
NETEASE_USERNAME: ${{ secrets.NETEASE_USERNAME }}
NETEASE_PASSWORD: ${{ secrets.NETEASE_PASSWORD }}
账号密码的存储位置如下图所示:
![060ea37ca69b7b764282e4356f6fb1b8.png](https://i-blog.csdnimg.cn/blog_migrate/1691dfd4affd60466356b528751c281f.jpeg)
设置好之后的效果如下:
![529c2aa7ac93ef5868463080d5147b80.png](https://i-blog.csdnimg.cn/blog_migrate/3648b62757b9712df10f273764f7ded2.jpeg)
Ok,大功告成啦,现在只要对这个repo进行push操作后,或者每天的国际标准时间5点,这个签到脚本都会自动执行一次,就像这样:
![3477ca5ef19e12c29e4234e12080f2e0.png](https://i-blog.csdnimg.cn/blog_migrate/91aaa38097fe7b70d3779f0f42f6473a.jpeg)
白嫖成功~感兴趣的小伙伴可以自己动手试试哈,不仅仅局限于签到哦~