前情回顾
- 🎉上周一发布了一篇博客,只要点赞、评论就能参与抽奖送书!
- 🎉这次让我们来看看这位博主是怎么抽奖的吧
- 🎉点赞 👍 收藏 ⭐留言 📝 即可参与抽奖送中秋礼盒🙉
- 🎉文末可领取源码~✨
详情可以点击链接 《机器学习入门:基于数学原理的Python实战》
所以今天带大家来康康,博主是怎么抽奖哒~
康康有木有传说中的黑幕
目录
- 前情回顾
- 1. 如何获取评论名单?
- 2. 如何抽奖?
- 3. 开奖啦~
- 4. 抽奖啦~
- 最后
1. 如何获取评论名单?
按下F12
查看列表,很快就能找到这些评论的链接了~
所以我们需要先获取这个列表的评论信息
- 首先使用
&http.Client{}
创建一个客户端的请求 - 然后再通过
NewRequest
进行发送POST
请求
client := &http.Client{}
reqSpider, err := http.NewRequest("POST", "https://blog.csdn.net/phoenix/web/v1/comment/list/120067923?page="+p+"&size=10", nil)
if err != nil {
log.Fatal(err)
}
reqSpider.Header.Set("content-length", "0") // 书写请求头
reqSpider.Header.Set("accept", "*/*")
reqSpider.Header.Set("x-requested-with", "XMLHttpRequest")
respSpider, err := client.Do(reqSpider) // 发送请求
if err != nil {
log.Fatal(err)
}
defer respSpider.Body.Close()
bodyText, err := ioutil.ReadAll(respSpider.Body)
if err != nil {
log.Fatal(err)
}
- 由于
go语言
转json格式
没有那么方便,所以我们必须自己使用进行反序列 - 所以要自己写一个结构体,推荐一个StringToStruct的网址,百度就行了!
type Result struct {
Code int64 `json:"code"`
Data struct {
Count int64 `json:"count"`
FloorCount int64 `json:"floorCount"`
List []struct {
Info struct {
ArticleID int64 `json:"articleId"`
Avatar string `json:"avatar"`
CommentFromTypeResult struct {
Index int64 `json:"index"`
Key string `json:"key"`
Title string `json:"title"`
} `json:"commentFromTypeResult"`
CommentID int64 `json:"commentId"`
CompanyBlog interface{} `json:"companyBlog"`
CompanyBlogIcon interface{} `json:"companyBlogIcon"`
Content string `json:"content"`
DateFormat string `json:"dateFormat"`
Digg int64 `json:"digg"`
DiggArr []interface{} `json:"diggArr"`
Flag interface{} `json:"flag"`
FlagIcon interface{} `json:"flagIcon"`
LevelIcon interface{} `json:"levelIcon"`
NickName string `json:"nickName"`
ParentID int64 `json:"parentId"`
ParentNickName interface{} `json:"parentNickName"`
ParentUserName interface{} `json:"parentUserName"`
PostTime string `json:"postTime"`
UserName string `json:"userName"`
Vip interface{} `json:"vip"`
VipIcon interface{} `json:"vipIcon"`
Years interface{} `json:"years"`
} `json:"info"`
PointCommentID interface{} `json:"pointCommentId"`
Sub []interface{} `json:"sub"`
} `json:"list"`
PageCount int64 `json:"pageCount"`
} `json:"data"`
Message string `json:"message"`
}
把这个复制到网址上就能生成结构体了
- 然后对返回的数据进行序列化就行了。
- 然后把所有评论的人放在一个列表当中。
var result Result
_ = json.Unmarshal(bodyText, &result) //byte to json
num := len(result.Data.List)
commentList := result.Data.List
for i:=0 ;i<num; i++ {
var luckPerson LuckyPerson
luckPerson.UserName = commentList[i].Info.UserName
luckPerson.NickName = commentList[i].Info.NickName
tmp = append(tmp, luckPerson) // 存放每一个评论的人
}
- 但是我们要进行一个去重的操作!
func removeRepByMap(slc []LuckyPerson) []LuckyPerson { //去除重复的元素
var result []LuckyPerson //存放返回的不重复切片
tempMap := map[LuckyPerson]byte{} // 存放不重复主键
for _, e := range slc {
l := len(tempMap)
tempMap[e] = 0 //当e存在于tempMap中时,再次添加是添加不进去的,因为key不允许重复
if len(tempMap) != l { // 加入map后,map长度变化,则元素不重复
result = append(result, e) //当元素不重复时,将元素添加到切片result中
}
}
return result
}
到目前为止,我们就拿到全部的去重评论名单啦!
准备抽奖!
2. 如何抽奖?
采用随机种子进行随机选取
func lottery(totalPerson []LuckyPerson) LuckyPerson { // 抽取中奖选手
rand.Seed(time.Now().UnixNano()) // 使用随机种子
index:=rand.Intn(len(totalPerson)) // 生成0到这个列表的长度的一个数字
return totalPerson[index] // 返回中奖选手
}
3. 开奖啦~
让我们看看是谁获奖了啦~
由于一缩再缩,只能缩小到这种程度才能看见抽奖全程。
直接截图吧~
4. 抽奖啦~
点赞
、评论
即可参与抽奖获得一个可可爱爱的神秘中秋礼物
哈~ ,
本周日晚上 (9月19号19:30进行抽奖哈)还不能告诉你哈~ 秘密!
最后
小生凡一,期待你的关注。
想要源代码
可以到我扫描下方,然后回复CSDN抽奖~