基于Rainmeter的B站每日top100桌面推送!!!

简介

最近在使用Rainmeter,将quotes(桌面箴言)改进了一下,他就有了如下功能!

  • 获取B站每日top100视频信息
  • 将信息随机展示在桌面quote上(随机展示一条信息,标题限制在20字,自动/手动切换)
  • 双击quote可在浏览器中打开该视频
    长相如下:
    然后,这是我的桌面(有些东西不太好,就隐藏了)

实现方案

先看下quotes目录下的东西:

  • getmessage.py 这个是一个简单的python爬虫,爬取bilibili的top100信息(所以电脑上要有python3环境,还要有requests和re模块),代码如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    import requests
    import re


    url = 'https://www.bilibili.com/ranking' # B站top100网址
    s = requests.Session()
    r = s.get(url).content.decode('utf-8') # get请求网址用变量r接收
    text = re.findall(r'<div class="info"><a href="//www.bilibili.com/video/.*</a><!---->', r) # 正则表达式获取到r中所有视频的所有信息用变量text接收

    with open('ListOfQuotes.txt', 'w+') as f: # 清空文件
    f.write('')
    f.close()

    for i in range(len(text)): # 遍历text
    print(i+1, text[i])
    videourl = re.findall(r'//www.bilibili.com/video/.*/"', text[i])[0][:-1] # 正则表达式获取到视频的url,用变量videourl接收
    videourl = 'https:' + videourl # 拼接url,使用https协议
    print(videourl)

    message = re.findall(r'e">.*</a>', text[i])[0][3:-4] # 正则表达式获取到视频的title,用变量message接收
    if len(message) > 20: # 控制下title的长度,这里控制在20个字符,如果超过,用......代替
    message = message[:20] + '......'
    print(message)

    with open('ListOfQuotes.txt', 'a', encoding='gb18030') as f:
    # 写入文件,一定要注意编码,因为有些up主会用到特殊符号,gbk编码会出问题!utf-8编码会令quotes读取成乱码!!
    # gb18030编码是gbk子集,会将特殊符号显示为??而且quotes显示正常!!
    f.write('<quote>[' + str(i+1) + ']' + message + '\n')
    f.write('<author>' + videourl + '\n')
    f.close()

将run.vbs添加到开启启动里即可实现开机自动获取

然后quotes调用的lua脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function Initialize()

CURRENTPATH = SKIN:GetVariable('CURRENTPATH')
Quotes = {}
Authors = {}
i = 0

for line in io.lines(CURRENTPATH..'ListOfQuotes.txt') do
if string.sub(line, 1, 7) == '<quote>' then
i = i + 1
Quotes[i] = string.sub(line, 8)
elseif string.sub(line, 1, 8) == '<author>' then
Authors[i] = string.sub(line, 9)
else
Quotes[i] = Quotes[i]..'#CRLF#'..line
end
end

end -->Initialize

function Update()

rand = math.random(1, #Quotes)
SKIN:Bang('!SetOption', 'MeterQuote', 'Text', Quotes[rand])
SKIN:Bang('!SetOption', 'MeterAuthor', 'Text', Authors[rand])
local f = assert(io.open(CURRENTPATH..'openurl.bat','w+'))
f:write('start ', Authors[rand])
f:close()
return 'Quote number: '..rand

end -->Update

运行流程

  • run.vbs调用init.bat,init.bat执行编译getmessage.py脚本;
  • 双击桌面quotes拉起main.vbs,main.vbs调用openurl.bat
  • 刷新quotes时会执行quotes的lua脚本,随机从ListOfQuotes.txt文件中读取一条信息,并将视频地址写入到openurl.bat中
AbelChe wechat
扫码加微信
Donate here!!!
0%