扇贝python离线_Python项目:扇贝网小组查卡助手
扇贝网是一个非常棒的英语学习网站,大家还可以加入一些小组,一起交流学习、共同进步。但是,小组管理起来非常辛苦,尤其是在0点前踢出不打卡的成员,因此考虑利用程序来实现小组查卡自动化。
登录
操作
扇贝网登录
URL
http://www.shanbay.com/accounts/login/
方式
POST
数据
csrfmiddlewaretoken
CSRF令牌
username
用户名
password
密码
CSRF令牌存在于Cookie中,我们需要先以GET方式访问该URL,就能取到CSRF令牌了。
#-*- coding: utf-8 -*-
importrequestsclassShanbay():def __init__(self, username, password):
self.request=requests.Session()
self.username=username
self.password=passworddeflogin(self):
url= 'http://www.shanbay.com/accounts/login/'r=self.request.get(url)
csrftoken= r.cookies['csrftoken']
data={'csrfmiddlewaretoken': csrftoken,'username': self.username,'password': self.password,
}return self.request.post(url, data=data).ok
成员管理
如果我们获取小组管理后台所有组员的信息,比较费时间。考虑实际需求,不妨仅获取当天未打卡的组员的信息,这样能大大提高查卡效率。
踢人需要data-id,这个在小组管理后台页面就能获取到。但是,如果我们想发站内短信,就需要username,而username在小组管理后台页面里是没有的,这个需要查看个人打卡日记。
从个人打卡日记不仅能看到username,还能看到该贝友入组后最近已连续有多少天未打卡(这往往也是组规限定的内容)等等。
操作
踢人
URL
http://www.shanbay.com/api/v1/team/member/
方式
PUT
数据
action
动作('dispel')
ids
data-id
#-*- coding: utf-8 -*-
from bs4 importBeautifulSoupfrom Journal importJournalimportreclassDomain():def __init__(self, shanbay):
self.shanbay=shanbay
self.request=shanbay.requestdefget_not_checked_members(self):'''data_id : 踢人时需要data_id
role : 身份标识
nickname : 昵称
user_id : 发短信时需要user_id
username : 用户名
points : 贡献值
days : 组龄
rate : 打卡率
checked_yesterday: 昨天是否打卡
checked : 今天是否打卡
off_dyas : 入组后最近连续未打卡天数'''members=[]for page in range(1, 48):
html= self.request.get('http://www.shanbay.com/team/manage/?t=checkin_today&page=%d' %page).text
soup= BeautifulSoup(html, 'html5lib')for member in soup.find_all('tr', class_='member'):
checked= member.find_all(class_='checked')[1].find('span').text.strip() == '已打卡'
ifchecked:breakdays= int(member.find(class_='days').text)
user_id= re.findall('\d+', member.find(class_='user').find('a')['href'])[0]
user= Journal(shanbay=self.shanbay, user_id=user_id)
checked_yesterday= member.find_all(class_='checked')[0].find('span').text.strip() == '已打卡'
ifchecked_yesterday:
off_days= 1
else:
off_days=user.get_off_days(days)
data={'data_id':member['data-id'],'role':member['role'],'nickname':member.find(class_='user').find('a').text,'user_id':user_id,'username':user.get_username(),'points':int(member.find(class_='points').text),'days':days,'rate':float(member.find(class_='rate').find('span').text[:-2]),'checked_yesterday':checked_yesterday,'checked':checked,'off_dyas':off_days
}
members.append(data)else:continue
break
returnmembersdefdismiss(self, data_ids):
url= 'http://www.shanbay.com/api/v1/team/member/'data={'action': 'dispel',
}
data['ids'] = ','.join(map(str, data_ids))
r= self.request.put(url, data=data)return r.json()['msg'] == "SUCCESS"
(这里用到了Python跳出两层循环的技巧*^_^*)
打卡日记
通过打卡日记,我们可以获得一些基本信息,例如:用户名、最近连续未打卡天数等。
#-*- coding: utf-8 -*-
from bs4 importBeautifulSoupimportreimportdatetimeimporttimeclassJournal():def __init__(self, shanbay, user_id):
self.shanbay=shanbay
self.request=shanbay.request
self.user_id=user_id
self.soup= self.__get_journal_soup()def __get_journal_soup(self):
html= self.request.get('http://www.shanbay.com/checkin/user/%s/' %self.user_id).textreturnBeautifulSoup(html)defget_username(self):return re.findall(u'(\w+)\s*的日记', self.soup.find_all(class_='page-header')[0].find('h2').text)[0]def get_off_days(self, days=0):
pass
站内短信
操作
发送站内短信
URL
http://www.shanbay.com/api/v1/message/
方式
POST
数据
recipient
收件人(username)
subject
标题
body
内容
csrfmiddlewaretoken
CSRF令牌
#-*- coding: utf-8 -*-
classMessage():def __init__(self, shanbay):
self.shanbay=shanbay
self.request=shanbay.requestdefsend_msg(self,recipient, subject, body):
url= 'http://www.shanbay.com/api/v1/message/'data={'recipient': recipient,'subject': subject,'body': body,'csrfmiddlewaretoken': self.request.cookies['csrftoken']
}return self.request.post(url, data=data).ok
小组管理
操作
设定加组条件
URL
http://www.shanbay.com/team/setqualification/{team_id}
方式
POST
数据
value
天数
kind
类型
condition
条件
team
小组id
csrfmiddlewaretoken
CSRF令牌
若需要在小组发帖或回帖,需要forum_id而不是小组id,而forum_id可以通过小组主页找到。
操作
发帖
URL
http://www.shanbay.com/api/v1/forum/{forum_id}/thread/
方式
post
数据
title
标题
body
内容
csrfmiddlewaretoken
CSRF令牌
操作
回帖
URL
http://www.shanbay.com/api/v1/forum/thread/{post_id}/post/
方式
POST
数据
body
内容
csrfmiddlewaretoken
CSRF令牌
#-*- coding: utf-8 -*-
from bs4 importBeautifulSoupclassTeam():def __init__(self, shanbay, team_id):
self.shanbay=shanbay
self.request=shanbay.request
self.team_id=team_id
self.forum_id= self.__get_forum_id()def set_join_limit(self, days, kind=2, condition='>='):
url= 'http://www.shanbay.com/team/setqualification/%s' %self.team_id
data={'value': days,'kind': kind,'condition': condition,'team': self.team_id,'csrfmiddlewaretoken': self.request.cookies['csrftoken']
}
r= self.request.post(url, data=data)return 'http://www.shanbay.com/referral/invite/?kind=team' ==r.urldef __get_forum_id(self):
html= self.request.get('http://www.shanbay.com/team/detail/%s/' %str(self.teamId)).text
soup=BeautifulSoup(html)return soup.find(id='forum_id')['value']defnew_post(self, title, content):
url= 'http://www.shanbay.com/api/v1/forum/%s/thread/' %self.forum_id
data={'title': title,'body': content,'csrfmiddlewaretoken': self.request.cookies['csrftoken']
}return self.request.post(url, data=data).json()defreply_post(self, post_id, content):
url= 'http://www.shanbay.com/api/v1/forum/thread/%s/post/' %post_id
data={'body': content,'csrfmiddlewaretoken': self.request.cookies.get('csrftoken')
}return self.request.post(url, data=data).json()
扇贝python离线_Python项目:扇贝网小组查卡助手相关推荐
- 扇贝python离线_扇贝自动打卡Python脚本(Python3)
扇贝登录,不需要处理验证码,这一点使得该脚本简单许多 import requests import random import json 模拟浏览器,扇贝新闻PC端和移动端的阅读模式不同 header ...
- python扇贝单词书_Python脚本 扇贝单词书爬取
这是一个·用于爬取扇贝单词书的脚本 将在.py文件目录得到一个名为out.txt的输出文件 主要使用了selenium库(webdriver) 使用方式: 更改 13行中指向webdriver驱动器 ...
- 扇贝python编程课_扇贝编程APP下载|扇贝编程python V1.1.35 安卓版下载 - 下载银行...
扇贝编程APP是一款可以让你从零入门到精通编程的学习软件.这款软件上,为用户们提供了海量的学习课程.它给用户们制定了多种不同的学习方案,你可以根据自己的基础情况来选择最适合自己的学习方案.如果你遇到不 ...
- 扇贝python编程课_扇贝编程app下载-扇贝编程手机版python「附如何设置自由职业」 - 超好玩...
扇贝编程app是一款学程序的初学者们都爱用的编程学习软件,软件汇集从入门到应用一应俱全.扇贝编程手机版python「附如何设置自由职业」常见的编程语言及技术教程,学习查询两不误!更有专业的编程导师手把 ...
- python结构_Python 项目的结构
之前和朋友聊天,说到 Python 项目的结构问题,Python 确实是一门比较灵活的语言,你可以单独执行某个文件,把这些文件扔到一起看起来像个工程,但是外人来看其实就是一个个独立的小文件,小模块,对 ...
- 美国网红python微博_Python有趣|微博网红大比拼 !
前言 在之前的分享中,我们已经学会了简书和知乎小姐姐的爬虫.今天罗罗攀把魔爪伸向了微博网红们,我们找找谁是最美网红.今天的流程如下: 网页分析 这里的微博网红链接:https://weibo.com/ ...
- python离线_python离线神器
之前去听风阿发的一篇博客教我们如何使用annie下载器下载视频(具体的可以参考去听风阿的帖子,链接http://www.kzin.vip/annie/) 在使用之后,便利的下载方式让我心动不已,使用中 ...
- 手机python下载_python利器官网下载-手机python利器下载4.0.1安卓版-西西软件下载...
Python利器app官网下载让你了解最全面的源代码和Python语言,这是一种很难学习的语言,但前景很大返佣面积也很广.Python利器上面有很多相关教程与在线交流学习内容. 介绍 源代码和解释器C ...
- python部署_python项目部署
https://xiulian.blog.csdn.net/article/details/88080765 https://cloud.tencent.com/developer/news/3973 ...
最新文章
- 算法基础知识科普:8大搜索算法之AVL树(上)
- window下Java的环境变量的配置
- 高科技的计算机作文600字,神奇的电脑_600字
- 【转】SQL Server 2005 数据类型和.Net数据类型的对应关系
- potplayer 多个进程_创建守护进程的步骤
- 宇视硬盘录像机onvif_视频监控系统中强大的录像机,兼容不同品牌,看看有哪些监控厂家...
- 很多未解之谜终于有答案了——2018年JVM生态系统报告出炉
- linux安装中文输入法sc,Linux下安装Discuz_7.2_FULL_SC_GBK
- 【Http】HTTPclient保持长连接需要消费返回信息 不然很卡
- 2018前端面试题总结
- 安装 EoLinker_4.0 开源版
- 最适合菜鸟的汉诺塔讲解
- Mac OS X 快捷键(完整篇)
- mysql mmm 读写分离_MySQL/MariaDB基于MMM实现读写分离及高可用
- APM时代的质量保障之路:腾讯互娱品质管理部性能负责人访谈
- 【JZOJ 省选模拟】6638.Seat
- 微信支付查询订单V2 接口
- [openstack swift]0 swift介绍
- GSM MODEM的基本用法-收发短信篇
- 管理学原理 【1049】
热门文章
- flink sql 连接kafka avro序列化异常 Failed to deserialize Avro record ArrayIndexOutOfBoundsException
- 旭元数艺:数创未来,智攀高峰
- Unity3dMVC框架编程核心思想
- instagram分享_Facebook,Twitter,Instagram,Google等使用的字体和颜色
- 求给定非负整数的阶乘
- getDir.sh获取目标文件并将文件放到指定的目录下
- Spring是什么?IOC和DI详细介绍。
- 年轻人买出来的智能清洁“三巨头”:科沃斯“稳健”,石头“敏锐”、追觅“灵动”
- 华为防火墙(USG)的管理方式配置
- 关于“为什么选择我们公司?”应聘者如何回答?