实现随机文章功能的插件:
博客链接:https://cndrew.cn/2019/10/19/plugin/
Github链接: https://github.com/Drew233/hexo-generator-random
欢迎大家使用

在wordpress里面随机文章的实现好像是专门有一个php函数可以获得所有的文章链接然后随机一下。但是html里面似乎是没有类似的,所以我产生了一个神奇的想法。

把我的所有文章链接放进去,然后随机跳转。难点就是所有文章链接怎么搞,如果你的文章少还好说,直接cv就行。但是就像我一样,150+的文章,甚至比我的还多,就会很难受,所以看下去吧,

先总体说一下步骤

  1. 使用python爬取博客所有链接,然后筛选出来文章的链接
  2. 使用html实现随机链接的跳转。

首先我们需要爬取所有链接,直接用python实现就很方便

import requests
from bs4 import BeautifulSoup
def getHTMLText(url):
'''
此函数用于获取网页的html文档
'''
try:
#获取服务器的响应内容,并设置最大请求时间为6秒
res = requests.get(url, timeout = 6)
#判断返回状态码是否为200
res.raise_for_status()
#设置该html文档可能的编码
res.encoding = res.apparent_encoding
#返回网页HTML代码
return res.text
except:
return '产生异常'
def main():
'''
主函数
'''
b=[]
r=[]
#目标网页,这个可以换成一个你喜欢的网站
for i in range (1,16):# 因为直接爬取域名下的不知道为什么会只能爬第一页的,所以这里专门处理一下页数,按照你的页数更改这个16的值
if i==1:
url = 'https://cndrew.cn'
else:
url = 'https://cndrew.cn/page/'+str(i)
# print(url)
demo = getHTMLText(url)
#解析HTML代码
soup = BeautifulSoup(demo, 'html.parser')
#模糊搜索HTML代码的所有包含href属性的<a>标签
a_labels = soup.find_all('a', attrs={'href': True})
#获取所有<a>标签中的href对应的值,即超链接
for a in a_labels:
# print(a.get('href'))
b.append(a.get('href'))
print('Over')
# for i in b:
# print(i)
print('over')
for x in b:
if x not in a:
a.append(x)
for i in a:
print(i)
# f=open('../out.txt','w')
# for i in a:
# f.write(str(i))
# f.write('\n')
# f.close()
main()

把上面代码中所有的cndrew.cn修改成你的域名,并修改你的page数
然后运行一遍,因为这里输出到文件一直出现中文编码(我这有些中文的链接)的错误,所以写进文件一直出错,如果你的没有的话,可以直接把最下面那几行的注释取消。如果你不知道该取消那些注释或者跟我一样有中文链接,那就跟我一样,直接把运行框里的所有链接复制粘贴出来。

然后你会发现,这里面除了文章的链接还有各种各样的,比如说标签啊,分类啊,甚至是友链啊什么的。手动删就完事了。其实这一步也可以用python甚至是c语言实现,但是太麻烦了,还是手动。你把你想随机链接到的页面留下就行。

所有链接处理好之后,为了在随机的那个html里面的格式,我们可以使用python进行格式的修改

f = open('../out.txt')
flag = 0
res=[]
for line in f.readlines():
line = line.strip('\n')#取消readline的换行
s="urls["+str(flag)+"]= \"https://cndrew.cn"
s+=line+"\";"
flag=flag+1
res.append(s)
f=open('../out2.txt','w')#写进文件
for i in res:
f.write(str(i))
f.write('\n')
f.close()

这一步其实就是把所有的链接补全,并且直接套用html中需要用到的格式。注意用你的域名替换掉cndrew.cn。

等你上面执行完之后,你的out2.txt里面就是你所需要的所有的连接了,并且是已经套好了html中所需要用到的格式。下一步

<body onload="javascript:dogo();">
<script>
function dogo(){
var urls = new Array();
urls[0] = "1.HTML";//
urls[1] = "2.HTML";//
urls[2] = "3.HTML";//
urls[3] = "4.HTML";//
urls[4] = "5.HTML";//把这里的内容替换掉
n = Math.floor(Math.random()*5);
location.href= urls[n];
}
</script>

把你的out2.txt文件中的所有urls[i]=""复制,替换到上面的我带有注释的地方

然后剩下的就是在hexo菜单或者随便你想要的地方添加一个页面。
例如你想在hexo的菜单添加一个页面
首先在../blog/source/中新建一个random文件夹,文件夹的名字是可以自定义的。
然后再这个文件夹中新建一个'index.html'文件,把上面那一步的html代码复制粘贴过来,在最前面加上layout:false.

---
layout: false
---
<body onload="javascript:dogo();">
<script>
function dogo(){
var urls = new Array();
urls[0] = "1.HTML";//
urls[1] = "2.HTML";//
urls[2] = "3.HTML";//
urls[3] = "4.HTML";//
urls[4] = "5.HTML";//把这里的内容替换掉
n = Math.floor(Math.random()*5);
location.href= urls[n];
}
</script>

然后每次你新建一个文章,在你的random目录下的index.html中就新加一个链接就行了。

至此,这个功能就添加完成了,其实这只是个无脑暴力的做法,还是期待大佬们做出来直接封装好的插件之类的东东。

点我尝试随机文章

Nickname
Email
Website
0 comments