新的一天,从手把手带大家一起来白嫖一波Github的计算资源开始。
白嫖的主要原理是利用Github的Actions功能,该功能于2018年10月推出。关于它的详细介绍,可以参见:
https://docs.github.com/en/actions
废话不多说,让我们愉快地开始白嫖吧~
Python版本:3.6.4
Github账号一枚
python第三方库
requests模块;
DecryptLogin模块;
以及一些python自带的模块。
先来简单介绍一下Github的Actions吧,以免各位小伙伴一头雾水。按照官方自己的定义,就是:
Focus on what matters: code.
With GitHub Actions you can automate your workflow from idea to production.
说白了,Actions就是一系列的操作,开发者可以通过定义Actions来让你的日常开发流程中的很多事情可以自动化起来。而对于白嫖党来说,我们只需要知道,有了这个功能,我们就可以愉快地白嫖Github的计算资源来干一些我们想干的事情啦。比如说:
上面只是我灵机一动想到的几个还算有趣的点子,大家也可以充分发挥自己的脑回路,来花式地白嫖Github的计算资源。
首先,新建一个repo:
然后把我们的自动签到脚本提交到这个repo上去(需要在之前那个版本的基础上做一点小的修改,即改变读取用户名密码的方式):
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目录结构是这样子的:
注意:
action.yml文件在.github/workflows目录下。
细心的小伙伴可能会问了,签到需要登录呀,网易云的账号密码应该放在哪呢?直接放在代码里也太不安全了。别担心,我们可以把我们的账户名和密码存在我们新建的repo的Secrets中,然后从Actions配置文件的secrets域中读出并设置为对应的环境变量就行了,上面的配置文件中已经实现了这部分内容:
env:
NETEASE_USERNAME: ${{ secrets.NETEASE_USERNAME }}
NETEASE_PASSWORD: ${{ secrets.NETEASE_PASSWORD }}
账号密码的存储位置如下图所示:
设置好之后的效果如下:
Ok,大功告成啦,现在只要对这个repo进行push操作后,或者每天的国际标准时间5点,这个签到脚本都会自动执行一次,就像这样:
白嫖成功,感兴趣的小伙伴可以自己动手试试哈,不仅仅局限于签到哦~
参考 http://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html