亲宝软件园·资讯

展开

博客园向粉丝群发邮件功能测试

王陸 人气: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方法发送请求。测试通过后会附上源代码。

加载全部内容

相关教程
猜你喜欢
用户评论