扇贝网是一个非常棒的英语学习网站,大家还可以加入一些小组,一起交流学习、共同进步。但是,小组管理起来非常辛苦,尤其是在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项目:扇贝网小组查卡助手相关推荐

  1. 扇贝python离线_扇贝自动打卡Python脚本(Python3)

    扇贝登录,不需要处理验证码,这一点使得该脚本简单许多 import requests import random import json 模拟浏览器,扇贝新闻PC端和移动端的阅读模式不同 header ...

  2. python扇贝单词书_Python脚本 扇贝单词书爬取

    这是一个·用于爬取扇贝单词书的脚本 将在.py文件目录得到一个名为out.txt的输出文件 主要使用了selenium库(webdriver) 使用方式: 更改 13行中指向webdriver驱动器 ...

  3. 扇贝python编程课_扇贝编程APP下载|扇贝编程python V1.1.35 安卓版下载 - 下载银行...

    扇贝编程APP是一款可以让你从零入门到精通编程的学习软件.这款软件上,为用户们提供了海量的学习课程.它给用户们制定了多种不同的学习方案,你可以根据自己的基础情况来选择最适合自己的学习方案.如果你遇到不 ...

  4. 扇贝python编程课_扇贝编程app下载-扇贝编程手机版python「附如何设置自由职业」 - 超好玩...

    扇贝编程app是一款学程序的初学者们都爱用的编程学习软件,软件汇集从入门到应用一应俱全.扇贝编程手机版python「附如何设置自由职业」常见的编程语言及技术教程,学习查询两不误!更有专业的编程导师手把 ...

  5. python结构_Python 项目的结构

    之前和朋友聊天,说到 Python 项目的结构问题,Python 确实是一门比较灵活的语言,你可以单独执行某个文件,把这些文件扔到一起看起来像个工程,但是外人来看其实就是一个个独立的小文件,小模块,对 ...

  6. 美国网红python微博_Python有趣|微博网红大比拼 !

    前言 在之前的分享中,我们已经学会了简书和知乎小姐姐的爬虫.今天罗罗攀把魔爪伸向了微博网红们,我们找找谁是最美网红.今天的流程如下: 网页分析 这里的微博网红链接:https://weibo.com/ ...

  7. python离线_python离线神器

    之前去听风阿发的一篇博客教我们如何使用annie下载器下载视频(具体的可以参考去听风阿的帖子,链接http://www.kzin.vip/annie/) 在使用之后,便利的下载方式让我心动不已,使用中 ...

  8. 手机python下载_python利器官网下载-手机python利器下载4.0.1安卓版-西西软件下载...

    Python利器app官网下载让你了解最全面的源代码和Python语言,这是一种很难学习的语言,但前景很大返佣面积也很广.Python利器上面有很多相关教程与在线交流学习内容. 介绍 源代码和解释器C ...

  9. python部署_python项目部署

    https://xiulian.blog.csdn.net/article/details/88080765 https://cloud.tencent.com/developer/news/3973 ...

最新文章

  1. 算法基础知识科普:8大搜索算法之AVL树(上)
  2. window下Java的环境变量的配置
  3. 高科技的计算机作文600字,神奇的电脑_600字
  4. 【转】SQL Server 2005 数据类型和.Net数据类型的对应关系
  5. potplayer 多个进程_创建守护进程的步骤
  6. 宇视硬盘录像机onvif_视频监控系统中强大的录像机,兼容不同品牌,看看有哪些监控厂家...
  7. 很多未解之谜终于有答案了——2018年JVM生态系统报告出炉
  8. linux安装中文输入法sc,Linux下安装Discuz_7.2_FULL_SC_GBK
  9. 【Http】HTTPclient保持长连接需要消费返回信息 不然很卡
  10. 2018前端面试题总结
  11. 安装 EoLinker_4.0 开源版
  12. 最适合菜鸟的汉诺塔讲解
  13. Mac OS X 快捷键(完整篇)
  14. mysql mmm 读写分离_MySQL/MariaDB基于MMM实现读写分离及高可用
  15. APM时代的质量保障之路:腾讯互娱品质管理部性能负责人访谈
  16. 【JZOJ 省选模拟】6638.Seat
  17. 微信支付查询订单V2 接口
  18. [openstack swift]0 swift介绍
  19. GSM MODEM的基本用法-收发短信篇
  20. 管理学原理 【1049】

热门文章

  1. flink sql 连接kafka avro序列化异常 Failed to deserialize Avro record ArrayIndexOutOfBoundsException
  2. 旭元数艺:数创未来,智攀高峰
  3. Unity3dMVC框架编程核心思想
  4. instagram分享_Facebook,Twitter,Instagram,Google等使用的字体和颜色
  5. 求给定非负整数的阶乘
  6. getDir.sh获取目标文件并将文件放到指定的目录下
  7. Spring是什么?IOC和DI详细介绍。
  8. 年轻人买出来的智能清洁“三巨头”:科沃斯“稳健”,石头“敏锐”、追觅“灵动”
  9. 华为防火墙(USG)的管理方式配置
  10. 关于“为什么选择我们公司?”应聘者如何回答?