博客园向粉丝群发邮件功能测试
王陸 人气:2一、前言
还有不到十天就是农历新年了,看到一年来有许多的小伙伴关注我,尤其是下半年粉丝数增长了不少,博主还是很有成就感的,所以想为每一位粉丝发上一份邮件表示感谢。
园子的用户账号都是绑定邮箱的,但没有显式的给出每个用户的邮箱,那么想要为每个粉丝发送邮件,只能一个个的发喽,这当然不符合我们程序员的作风,我就想着能不能用程序批处理发送邮件。
二、获取message接口
我们首先来看一下博客园官方的OpenAPI https://api.cnblogs.com/help看看有没有发送邮件相关的接口说明,额......虽然其他的接口都给出了详细的说明,但并没有找到我想要的发送邮件接口,那只能通过浏览器亲自动手查找喽。
博主是火狐党,这里就直接使用Firefox来查看吧。在发送短消息界面下,也就是上面的页面下按F12进入开发者模式选择网络—XHR,就能找到当前向博客园服务器发送的请求。
关于XHR(XMLHttpRequest)这里给出w3cschool对其的说明https://www.w3cschool.cn/ajax/ajax-xmlhttprequest-send.html
这里我就先向自己的一个小号发送一条信息,看一下会产生一个什么样的请求。
哦,原来是一个POST请求,请求地址是https://msg.cnblogs.com/api/message,那这样就好办的,我们再来有哪些参数。
三个参数正好对应收件人(name)、标题(title)和内容(content)。接口找到了我们的工作基本上就算是完成一半了。
三、爬取粉丝用户名
第一个参数便是收件人的用户名,这当然需要爬虫来爬取,我们先来分析一下粉丝页面。
以博主自己的粉丝页为例,第一页的URL为
https://home.cnblogs.com/u/wkfvawl/followers/
第二页
https://home.cnblogs.com/u/wkfvawl/followers/?page=2
第三页
https://home.cnblogs.com/u/wkfvawl/followers/?page=3
看到了吧,这个URL就是单纯的page递增,那么直接遍历一下就可以了。
针对具体的一页,查看HTML源码
<li id="1fa4c2be-9d08-493d-e713-08d79458b333"> <a href="/u/1923713" title="钟老师"> <div class="avatar_pic"> <img src="//pic.cnblogs.com/face/sample_face.gif" /> </div> <div class="avatar_name"> 钟老师 </div> </a> <a class="edit hide" href="javascript:void(0)" onclick="delFollower('1fa4c2be-9d08-493d-e713-08d79458b333','钟老师')">删除粉丝</a> </li> <li id="0dc4b50d-5238-429c-04a0-08d704f23d44"> <a href="/u/MilkoSilver" title="星野妙"> <div class="avatar_pic"> <img src="//pic.cnblogs.com/face/1739984/20190711193403.png" /> </div> <div class="avatar_name"> 星野妙 </div> </a> <a class="edit hide" href="javascript:void(0)" onclick="delFollower('0dc4b50d-5238-429c-04a0-08d704f23d44','星野妙')">删除粉丝</a> </li> <li id="bab9893e-b854-4ae3-4086-08d765b211a6"> <a href="/u/1870144" title="姚bing"> <div class="avatar_pic"> <img src="//pic.cnblogs.com/face/1870144/20200114195537.png" /> </div> <div class="avatar_name"> 姚bing </div> </a> <a class="edit hide" href="javascript:void(0)" onclick="delFollower('bab9893e-b854-4ae3-4086-08d765b211a6','姚bing')">删除粉丝</a> </li> <li id="07d8642b-86b3-45fc-e4f5-08d79458b333"> <a href="/u/1922704" title="释怀believe"> <div class="avatar_pic"> <img src="//pic.cnblogs.com/face/sample_face.gif" /> </div> <div class="avatar_name"> 释怀believe </div> </a> <a class="edit hide" href="javascript:void(0)" onclick="delFollower('07d8642b-86b3-45fc-e4f5-08d79458b333','释怀believe')">删除粉丝</a> </li>
粉丝的用户名是在 <div class="avatar_name">下,这里由于这个脚本是Python编写,方便起见直接使用BeautifulSoup库的find_all方法了,相信写过Python爬虫的朋友对这个解析工具应该是很熟悉了。
soup.find_all('div', attrs={'class': 'avatar_name'})
四、获取Cookie
博客园是需要登录的,为了让我们的程序被博客园识别,需要获得当前页面的Cookie。而Cookie其实就藏在请求头中。
五、Python实现
至此所有的准备都已经做好了,接下就是写代码了,主要就是requests库的使用,这是Python的最为简单易用的HTTP库了,我们要做的工作就是先获取用户名接着构造请求参数,最后使用其的post方法发送请求。测试通过后会附上源代码。
加载全部内容