更新
再见
前言
去年暑假的时候我入手了一台压泡面神器。在找电子书资源的时候,我发现了Readfree这个非常不错的电子书分享网站。Readfree网站上的电子书资源非常丰富,而且总体质量也比较高。不过,这个网站的资源并非完全免费开放下载,只有持有积分的注册会员才有下载资格(1本书花费1个积分)。目前获得积分的方法有三种:
- 签到,可获取1~3个积分
- 充值(好像是10元1000个积分)
- 上传新资源,根据被下载数获得积分奖励(10:1)
对于不想掏钱的用户来说,就只能盯准方法1和3了。然而如果想要通过3获得积分,意味着要上传一本网站上没有的书籍或者是已有的书籍的新的版本,并且质量要够好才能吸引其他用户下载,而且奖励比例还是10:1。相对而言,坚持每天签到获取积分的速度会更快而且更有保障。对于这种机械重复的任务,把它丢给计算机执行无疑是最明智的选择。
获取cookie
让人头疼的是,Readfree在登录的时候不仅要用户名和密码,还要输入验证码,如图所示:
对于验证码自动识别这种事情,我还是懒得去折腾了(其实是不会),所以我还是直接用cookie登录好了。
获取cookie的方法:先在chrome里登录了Readfree,然后通过Chrome的开发者工具查看cookie(Chrome查看cookie的方法可以参考这里)
可以看到Readfree的cookie有5个字段,如下图所示:
其中,需要复制到脚本上使用的是sessionid
、csrftoken
和Hm_lvt_375aa6d601368176e50751c1c6bf0e82
这3个字段。Hm_lpvt_375aa6d601368176e50751c1c6bf0e82
这个字段在脚本运行时指定为当前时间即可。
签到脚本
1. 构造cookie字典
在Chrome获取cookie后, 构造cookie字典。
timestamp = '%d'%(int(time.time())) #获取当前时间
cookie = {
'Hm_lvt_375aa6d601368176e50751c1c6bf0e82': '[此处需要填写]',
'Hm_lpvt_375aa6d601368176e50751c1c6bf0e82': timestamp,
'sessionid': '[此处需要填写]',
'csrftoken': '[此处需要填写]'
}
2. 登录
cookie字典准备好之后,使用requests
进行登录。
check_url = 'http://readfree.me/accounts/checkin'
res = requests.get(check_url,cookies=cookie)
结果验证
经过我的实际测试,Readfree的cookie实际只有大概一个月一个星期的有效期。如果每次签到都验证结果,就能及时发现cookie过期了。验证的方法是在https://readfree.me/accounts/profile/[Readfree用户名]/checkin/
这里获取签到记录表,然后查看最新一条签到记录的日期是否与当天一致。
验证代码如下:
# 这一行与上面一段代码衔接
if res.status_code == 200:
# 找到最新一条签到记录
confirm_url = 'https://readfree.me/accounts/profile/[此处需要修改为你的readfree用户名]/checkin/'
re = requests.get(confirm_url, cookies=cookie)
soup = BeautifulSoup(re.text, features="html.parser")
latest_rec = soup.find('tr', class_='info')
if latest_rec is None:
print('签到失败,可能是cookie过期了')
else:
latest_time = latest_rec.td.text
# 检查它的日期是不是今天
date = time.strftime("%Y-%m-%d", time.localtime())
if latest_time.startswith(date):
print('签到成功')
else:
# 不知道是不是有这种情况
print('签到失败')
else:
print('无法访问readfree.me')
定时执行
以Linux为例,使用crontab定时运行脚本,每天00:00
的时候自动签到.(不熟悉crontab的话可以参考这里)
根据自动签到脚本readfree.py
放置的目录给crontab添加以下格式的定时计划:
@daily python PATH_TO_YOUR_readfree.py >/dev/null 2>&1
假如readfree.py
文件是放在目录/home/abc
下的,那么以上命令应该改为:
@daily python /home/abc/readfree.py >/dev/null 2>&1
>/dev/null 2>&1
语句含义: 不会输出任何信息到控制台,也不会有任何信息输出到文件中。
签到结果推送到iOS设备
Bark是一款iOS软件,它允许你将自定义通知推送到你的iOS设备。(Bark使用方法)
所以只要把脚本中print
负责输出的内容丢给Bark,即可在iOS设备上看到签到的情况。
例如:
requests.post('https://api.day.app/[你的key]/签到成功')
附上:完整代码