Allen Hua 的网络博客 - JavaScript
type: channel
link: https://hellodk.cn/tag/JavaScript/
items: 使用JavaScript抓取易车销量排行榜数据到一个页面上展示
items: 使用JavaScript脚本快速获取B站观看历史记录页面的视频标题和URL
items: 使用油猴脚本干掉B站web首页的浏览器插件警告信息
items: 让 rime 输入法用上颜文字
items: 我的听歌软件 Spotify 和网易云的故事 | 导出网易云的歌单再导入到 Spotify
items: 获取 Seafile 分享的文件直链
items: 不通过插件给 Typecho 博客添加图片灯箱功能（fancybox js 实现）
items: 记一次 OpenWrt luci 显示正在“收集数据”，使用公网 IP nginx 反向代理遇到的 Uncaught TypeError: Cannot read properties of null (reading 'wan') 问题
items: 写了一个油猴脚本，还我干净清爽的百度百科页面
items: 完善我的微博热搜实时推送频道

使用JavaScript抓取易车销量排行榜数据到一个页面上展示
type: item
date: 2024-07-10T14:00:00+08:00
description: 易车销量排行榜页面是 https://car.yiche.com/newcar/salesrank/ ，由于易车 web 端没有提供一页展示多少条数据的功能，所以浏览这个排行榜时就得一页一页的翻，想查某一车型的销量数据很不方便。 但是易车手机app是可以一页展示的，而且也能搜索车型，不过碍于手机屏幕过小，我还是希望在 web 上查看，可以利用 Control + F 功能，更快速的寻找想要的数据。 首页 https://car.yiche.com/newcar/salesrank/ 非首页 https://car.yiche.com/newcar/salesrank/?page=xxx 当前时间是 2024-07-10 13:47:01，默认展示的是上一个月的数据，也就是2024年6月份的销量排行榜。 如果想抓取2024年5月的数据，请求地址是 首页 https://car.yiche.com/newcar/salesrank/?date=2024-05-01 非首页 https://car.yiche.com/newcar/salesrank/?date=2024-05-01&page=xxx 其中 xxx 代表页码。 我抓取了 2024年6月的国内汽车销量数据，生成了一个静态页面。欢迎查阅：2024年6月国内汽车销量排行榜-按车型分 下面是源码 (async () => { const totalPages = 62; // 一共62页 const fetchDataForPage = async (pageNum) => { let pageUrl = `https://car.yiche.com/newcar/salesrank/?page=${pageNum}`; const response = await fetch(pageUrl); const text = await response.text(); const parser = new DOMParser(); const doc = parser.parseFromString(text, 'text/html'); // 返回整个 div.rk-list-box 元素 return doc.querySelector('div.rk-list-box'); }; // 定义睡眠函数 const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)); // 获取第一页的数据，并初始化页面 let mainListBox = document.querySelector('div.rk-list-box'); if (!mainListBox) { console.error('初始化时无法找到 div.rk-list-box 元素'); return; } for (let i = 2; i <= totalPages; i++) { console.log(`正在抓取第 ${i} 页的数据...`); const pageListBox = await fetchDataForPage(i); if (pageListBox) { // 查找并更新所有懒加载图片 const lazyImages = pageListBox.querySelectorAll('.rk-img.lazyload'); lazyImages.forEach(img => { if (img.dataset.original) { img.src = img.dataset['original']; } }); // 将新页的数据追加到现有的列表中 mainListBox.append(...pageListBox.children); } else { console.error(`第 ${i} 页的数据抓取失败`); } // 每抓取一页后等待15秒 await sleep(15000); // 15秒 } console.log('所有数据抓取完毕！'); })(); 页面数据抓取完成之后，利用 chrome extension SingleFile 保存成一个 html 文件。 源码地址 https://github.com/gildas-lormeau/SingleFile Chrome Web Store 地址 https://chromewebstore.google.com/detail/singlefile/mpiodijhokgodhhofbcjdecpffjipkle Web Extension for saving a faithful copy of a complete w…

使用JavaScript脚本快速获取B站观看历史记录页面的视频标题和URL
type: item
date: 2024-07-09T17:58:00+08:00
description: 哔哩哔哩观看历史记录的页面地址是 https://www.bilibili.com/account/history 有时候我想分享最近观看的几个视频给朋友，尤其是在我使用关键字搜索之后的列表，会有好几个条目，一个一个打开并复制出一个干净的标题和干净的视频地址太麻烦了。于是我用js写了一段脚本快速获取页面上的视频标题和URL 源码如下 // 使用 querySelectorAll 选择符合路径的 div const targetDiv = document.querySelector('#history_list'); // 检查 targetDiv 是否存在 if (targetDiv) { // 在 targetDiv 内选择所有的 li 标签 const liTags = targetDiv.querySelectorAll('li'); let title_url = ''; // 遍历每一个 li 标签，获取其内容 liTags.forEach(liTag => { const titleA = liTag.querySelector('a.title'); // 获取 class 名称是 title 的那个 a 标签 if (titleA) { let url = titleA.getAttribute('href'); // 获取链接地址 let title = titleA.textContent; if (url) { let originStr = url.trim(); // 原始字符串 url = `https:${originStr.replace(/\?.*$/, '')}`; // 利用正则格式化，前面拼上 https: 顺便把半角问号和后面的字符串都remove掉 title_url += '- ' + title + ' ' + url + '\n'; // 拼接英文减号和空格，再拼上视频标题和空格，最后拼上视频地址 } else { title_url += '- No title attribute\n'; // 如果没有 title 属性，添加提示 } } }); console.log(title_url) } else { console.log('无法找到目标 div'); } 使用方法 打开历史记录页面，搜索某关键词（搜索是可选项，不搜索也可以，但是js脚本只会收集出页面已加载的内容） 按下键盘F12，切换到 Console 标签 粘贴如上代码后回车即可。如果此网站不允许粘贴，临时在Console中键入allow pasting 回车即可。不过B站的web是允许粘贴的 举例，我使用富士搜索出如下视频 执行js代码之后快速获取了这些视频的标题和URL 刚好我顺手记录一下这些视频的地址。下面各二级标题就是我使用标题搜出来的结果（基于我最近观看的视频）。不太清楚，B站历史记录的最大条目好像是 1000？（有知道的朋友欢迎留言评论） 富士 索尼相机套用富士胶片模拟滤镜教程（完美解决索尼直出色彩问题）非预设 https://www.bilibili.com/video/BV1Db4y1y7qs 索尼原图直出，拍出富士胶片感 https://www.bilibili.com/video/BV1Pw411r7Cc 仅￥905！56mm F1.8！锐度爆表，画质惊喜！富士用户原地痛哭，铭匠光学 X卡口自动对焦镜头 https://www.bilibili.com/video/BV14H4y1y7BU 日本富士山出事了，火山口发现3名遇难者 https://www.bilibili.com/video/BV1a6421Z7Kr 【御成phot】注定爆款：富士XT50深度测试 https://www.bilibili.com/video/BV1GS411N7rZ 佳能索尼尼康宾得松下富士徕卡哈苏奥之心理光蔡司，数码CMOS技术哪家强？众通社 https://www.bilibili.com/video/BV14C411x7AN 索尼 索尼相机套用富士胶片模拟滤镜教程（完美解决索尼直出色彩问题）非预设 https://www.bilibili.com/video/BV1Db4y1y7qs 羡慕隔壁的颜色？3分钟教你玩转索尼直出，有手就能学会！ https://www.bilibili.com/video/BV18a4y1Z7tB 索尼原图直出，拍出富士胶片感 https://www.bilibili.com/video/BV1Pw411r7Cc 为什么你的索尼拍照不好看？搞懂直出的秘诀！ https://www.bilibili.com/video/BV1CS421d7B3 索尼直出也能打？A7M4创意…

使用油猴脚本干掉B站web首页的浏览器插件警告信息
type: item
date: 2023-08-27T13:13:00+08:00
description: 相信很多人还在和我一样使用纯 web 来看B站，因为除了手机、平板这些客户端，在电脑上看B站现在也有官方的客户端，win 和 mac都有官方客户端可用，需要的朋友可以从 https://app.bilibili.com/ 下载。而且像是 Microsoft Store 也有其他的一些第三方客户端可用。 但我在电脑上依然选择使用纯粹的 web 浏览，因为客户端对个人隐私的侵入是最容易也是最泛滥成灾的。纯web还能使用各种浏览器插件。 但是一旦浏览器启用了广告屏蔽插件，打开B站首页就会有如下提示，每次见到都甚是烦躁。 提示的内容是 检测到您的页面展示可能受到浏览器插件影响，建议您将当前页面加入插件白名单，以保障您的浏览体验~ 哈哈，它这个提醒，反而影响了我的浏览体验 于是我们借助油猴插件，写一段js代码将这个恼人的提示给干掉吧。 由于逻辑较简单，就不发布到油猴的脚本中心仓库了，o(￣ヘ￣o＃) 下面是代码，需要可自取，在油猴 dashboard 页面自己新建一个脚本，然后复制代码过去打开脚本即可。 // ==UserScript== // @name removeAdbTipsBili // @namespace https://hellodk.com // @version 0.1 // @description remove adblock-tips in bilibili.com index page // @author hellodk // @match https://*.bilibili.com/ // @icon https://www.google.com/s2/favicons?sz=64&domain=bilibili.com // @grant none // ==/UserScript== (function() { 'use strict'; var domain = document.domain; if(domain === 'bilibili.com') { var adblockTips = document.querySelector('.adblock-tips'); if (adblockTips) { adblockTips.style.display = 'none'; console.log('adblock-tips removed success.') } } })(); 打开一个匿名窗口检测是否有生效，F12 查看 Console 控制台页面打印了日志，并且查看了首页并没有出现这个警告 tips，于是收工。

让 rime 输入法用上颜文字
type: item
date: 2023-07-21T20:35:00+08:00
description: 过程详解 如何让 rime 输入法（小狼毫、鼠须管、中州韵）输入颜文字？和 custom_phrase.txt 的实现机制类似，我们定义一个词典 xxx.dict.yaml 文件，然后定义 name version sort 等属性，词典中的内容分为三栏 上屏文本 码 权重 rime 在三大基础桌面系统平台上的默认用户目录如下 【Windows】 %APPDATA%\Rime 【macOS】 ~/Library/Rime 【Linux】 ~/.config/ibus/rime （0.9.1 以下版本是 ~/.ibus/rime ） 拿 windows 举例，在 %APPDATA%\Rime 路径下创建文件 kaomoji.dict.yaml 保存以下内容 # Rime dictionary - kaomoji # encoding: utf-8 # ref: https://tool.lmeee.com/yanwenzi # description: https://zh.wikipedia.org/zh-sg/%E9%A2%9C%E6%96%87%E5%AD%97 --- name: kaomoji version: "2023-07-20" sort: origin ... (。・∀・)ノ kmj 1 (￣ε(#￣) kmj 1 <( ￣＾￣)> kmj 1 特别关注： 文件需要使用 utf-8 编码保存 上屏文本 码 权重 之间需要使用 tab，而不能使用空格 保存此文件之后，检查你当前使用的输入方案，比如我用的是小鹤双拼，找到文件 double_pinyin_flypy.schema.yaml 查看 translator/dictionary 项使用的是哪个词典文件，比如我的 于是全局搜索 name: rime_ice （推荐使用 vscode 打开用户数据目录）找到 rime_ice.dict.yaml 文件，接着找到 import_tables 项，增加 kaomoji 作为颜文字词库。 然后重新部署 rime 就可以通过输入 kmj 选取颜文字，之所以使用 kmj 作为 key，是因为颜文字的英文单词就叫 kaomoji，所以个人认为 kmj 作为键非常合适，在 26 键键盘上也非常好输入。 如果部署后使用 kmj 无法触发颜文字候选框，请检查是否有 custom 的文件，然后使用了 patch 语法，文件名一般是 double_pinyin_flypy.custom.yaml，然后检查 patch/translator/dictionary 使用的是什么值，GitHub 上的有些 rime 仓库用的是 luna_pinyin.extended，这时候就需要更改 luna_pinyin.extended.dict.yaml 文件，在词典中增加 kaomoji 项再重新部署即可。 我整理好的 kaomoji.dict.yaml emoji 来源主要是这个网站提供的，包含了 400 多个颜文字条目 打开 F12 写一段 js 就能拿到所有颜文字文本 var pTags = document.querySelectorAll('#ywzList li p'); for (var i = 0; i < pTags.length; i++) { console.log(pTags[i].textContent); } 现提供我整理好的 yaml 文件供大家下载，敬请使用。 下载链接 https://emby.940304.xyz:23399/f/685586dd6bb240f9aadc/ (链接将于 2024-01-17 20:28:42 过期，如果到时候过期了请再联系我) 参考 https://zh.wikipedia.org/zh-sg/%E9%A2%9C%E6%96%87%E5%AD%97 https://gist.github.com/zolunx10/3848421 https://tool.lmeee.com/yanwenzi

我的听歌软件 Spotify 和网易云的故事 | 导出网易云的歌单再导入到 Spotify
type: item
date: 2023-04-03T20:37:00+08:00
description: 14年那会，我第一次使用网易云，当时的网易云真是同类软件中用户体验最好的，当时也没有多大的曲库问题。那时我在很多歌曲的评论区还挺活跃的，还有几首（十几首？）歌的评论在热评上?。 网易云一直用到了19年，我毕业工作了，19年下半年果断切换到了 Spotify 上，从此国内音乐平台是路人。主要是年纪大了没有各种社交需求了，就听听歌而已，没必要整得花里胡哨，而且Spotify （我美区）的曲库全，多个设备之间的同步、接力功能很好用。 当时是从淘宝上上车的，Spotify Premium 家庭版，我是家庭成员，并非家庭主人。很有趣的是，当时只交了一年的费用，直到现在还没有下车…… ?️ 真的离谱啊，被我白嫖到了。 最近几个月在比亚迪的车机上听我 Spotify 上标红心的 500 首歌听腻了，有时候也会听一听 podcast 和电台，电台的话主要收听小时候爱听的音乐之声 MusicRadio。 前些天打开了网易云，听到了一首大学时很喜欢的歌曲，金魚花火 - (金鱼花火) - 大塚愛，很久没听觉得好好听！ document.getElementById("huahuo").style.height=document.getElementById("huahuo").scrollWidth*0.9+"px"; 官方的网易云客户端限制很多，于是我找到了一个漂亮的第三方网易云播放程序， https://github.com/qier222/YesPlayMusic 界面非常简洁，程序也很好用。 但是他没有提供 android 和 ios 移动客户端。我在车机上使用 alook 和 x浏览器测试都无法使用 web 版程序。后面作罢。然后打算把网易云我标记红心的那个歌单导出来，然后导入到 Spotify，于是就有了本文。 导出网易云歌单以及突破1000首歌的限制 搜索到了两个项目 source1 source2 执行了 source1 发现可行，但是网易云 web 页面限制了歌单最大显示的歌曲数量是 1000，而我标记的一共有 1623 首，于是又寻找解决方案。不一会搜到一个油猴脚本，可以突破1000的限制，于是安装测试果然解决了问题。 网易云音乐显示完整歌单 解除歌单歌曲展示数量限制 & 播放列表 1000 首上限 https://greasyfork.org/zh-CN/scripts/406054-%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90%E6%98%BE%E7%A4%BA%E5%AE%8C%E6%95%B4%E6%AD%8C%E5%8D%95 安装好之后再次执行 source1 中的 js 脚本，但是这次不凑效了，无法打印出 歌曲 - 歌手 信息，于是我就研究了一下，修改了 js 代码，最终成功运行。 source1 中的脚本 (function () { let iframeDocument = document.getElementById("g_iframe").contentDocument; let tempElement = iframeDocument.createElement("div"); function getSinger(trNode) { tempElement.innerHTML = trNode.innerHTML; return tempElement.getElementsByTagName("span")[0].title; } function getSongName(trNode) { tempElement.innerHTML = trNode.innerHTML; return tempElement.getElementsByTagName("b")[0].title; } let allSongsTRNode = iframeDocument.querySelectorAll('table.m-table > tbody > tr') var songsStr = ""; allSongsTRNode.forEach(songTR => { songsStr += (getSongName(songTR.childNodes[1]) + " - " + getSinger(songTR.childNodes[3])); songsStr += "\n"; }); console.log(songsStr); })(); 我修改后的脚本，部分逻辑重写了，好使（而且逻辑更简单了） (function () { function getSinger(trNode) { return trNode.getElementsByClassName("t…

获取 Seafile 分享的文件直链
type: item
date: 2023-02-22T09:52:39+08:00
description: 获取 seafile 分享的文件直链 创建一个带有效期的分享文件的链接，比如 http://192.168.1.29:8088/f/266c337aab4c40598023/ 点击即下载的直链是 http://192.168.1.29:8088/f/266c337aab4c40598023/?dl=1 但这些都还需要 js 运行后下载器才能获取到文件的直链。之前更新 Mattermost 后端需要下载最新版的 mm 压缩包程序，由于官网太慢，我就下载到了本地然后通过公网的 seafile 分享了个链接，试图修改 Dockerfile 让 curl 直接下载文件，最终找到了文件直链。 $ curl -vv http://192.168.1.29:8088/f/266c337aab4c40598023/?dl=1 * Trying 192.168.1.29... * TCP_NODELAY set * Connected to 192.168.1.29 (192.168.1.29) port 8088 (#0) > GET /f/266c337aab4c40598023/?dl=1 HTTP/1.1 > Host: 192.168.1.29:8088 > User-Agent: curl/7.52.1 > Accept: */* > < HTTP/1.1 302 Found < Server: nginx/1.18.0 (Ubuntu) < Date: Wed, 22 Feb 2023 01:46:28 GMT < Content-Type: text/html; charset=utf-8 < Content-Length: 0 < Connection: keep-alive < Location: http://192.168.1.29:8088/seafhttp/files/ab1a6620-1623-41e2-8838-3920199694e3/Snipaste_2022-06-09_11-02-04.png < Vary: Cookie, Accept-Language < Content-Language: en < Set-Cookie: sfcsrftoken=FoZm3c677QZ3S99XuZe17Wl8wivMUBafSYH02DMBxFTsZcq7V4o5IMCxHzteWfr0; expires=Wed, 21 Feb 2024 01:46:28 GMT; Max-Age=31449600; Path=/; SameSite=Lax < * Curl_http_done: called premature == 0 * Connection #0 to host 192.168.1.29 left intact 可以看到 curl 之后 HTTP/1.1 302 Found，目标路径 location 是 http://192.168.1.29:8088/seafhttp/files/ab1a6620-1623-41e2-8838-3920199694e3/Snipaste_2022-06-09_11-02-04.png，这个就是文件直链。但在有效期过了之后文件直链便不可访问了。

不通过插件给 Typecho 博客添加图片灯箱功能（fancybox js 实现）
type: item
date: 2022-11-19T14:01:00+08:00
description: 我有这个需求之后便搜了一下，看到已经有插件实现了 Swipebox 图片灯箱插件 其开源在 https://github.com/wuxiaocong/Swipebox/ 但是看了一下评论和 issues，担心会有一些奇奇怪怪的 bug，或者和其他已有插件冲突，便放弃了这个插件。 然后有了新的思路，FancyBox。我们可以直接使用 FancyBox 来完成我们的需求，FancyBox 是一款优秀的弹出框 Jquery 插件 允许我们用鼠标和键盘上的四个方向键切换图片 可以根据当前窗口大小自动调整弹出框的大小，当我们改变浏览器窗口大小时，将会看到弹出框自动缩放 支持缩略图列表、放大、全屏等功能 弹出框支持显示多种类型的内容：图片、html、视频… 支持触控、缩放手势操作图片 具体步骤： 在主题的 header.php 的 标签之间添加如下 css 引用 在 footer.php 合适的位置添加如下脚本引用 找到主题的 page.php 和 post.php 等文件，这些文件都有一个共同特征，一般有文章正文，在正文的 div 中具有 <?php $this->content(); ?> 的 php 代码。这行代码是将正文内容塞入正文的 div 容器中渲染网页。要想实现图片灯箱功能，需要将正文中的 替换成一个被 a 标签包裹的 img 标签。我们使用正则表达式替换。 找到你主题下的各个文件里的 <?php $this->content(); ?> 然后替换为如下代码 <?php $pattern = '/\<img.*?src\=\"(.*?)\".*?alt\=\"(.*?)\".*[^>]*>/i'; $replacement = ' '; $content = preg_replace($pattern, $replacement, $this->content); //需要支持截断的添加下面两行 $array=explode(' ', $content); $content=$array[0]; echo $content; ?> 如果不生效，有可能是 regex 的 pattern 不对，浏览器打开 F12 审查元素，检查你的文章原文中的图片 img 标签，检查具有哪些属性？如果只有 src 和 alt，那么使用上面的 php 代码是可以生效的，如果还有 title 属性，就要改一下正则表达式，请使用如下代码 <?php $pattern = '/\<img.*?src\=\"(.*?)\".*?alt\=\"(.*?)\".*?title\=\"(.*?)\"[^>]*>/i'; $replacement = ' '; $content = preg_replace($pattern, $replacement, $this->content); //需要支持截断的添加下面两行 $array=explode(' ', $content); $content=$array[0]; echo $content; ?> 保存即可生效，打开一篇具有图片的文章就能预览 FancyBox 的图片灯箱效果。 试用一下？ 我这篇文章图片较多，更适合预览灯箱效果。 米家智能插座 3 上手初体验 引用 https://www.idzd.top/archives/762/

记一次 OpenWrt luci 显示正在“收集数据”，使用公网 IP nginx 反向代理遇到的 Uncaught TypeError: Cannot read properties of null (reading 'wan') 问题
type: item
date: 2022-07-18T13:50:00+08:00
description: 搜遍了全网，只有这个链接 ( https://forum.openwrt.org/t/solved-luci-overview-page-has-blank-fields/16967 ) 类似。但我使用 frp 映射后的域名访问主页又能正常展示这些字段。看了下接口返回均是 200，response 也都正常。 我的是下面这样的 通过 F12 Console 可以看到 Uncaught TypeError: Cannot read properties of null (reading 'wan') 这样的报错，实际上 index 文件 /usr/lib/lua/luci/view/admin_status/index.htm info 会取 /cgi-bin/luci/ 接口返回的对象中各个成员，wan 只是他第一个获取的。debug 发现 info 是 null。所以问题肯定不能通过 var xxx = info && info.wan 这样去解决，后面还有一大堆 key 呢，实际上我也这么做过，问题并不能得到解决。 我通过 frp 基于公网 IP 服务器映射出来的域名可以正常加载这些信息，接口都有返回，但是我家里宽带现在具备了公网 IP，我就直接通过一个域名加非常规端口然后基于 https （在 OpenWrt 上跑了一个 nginx）访问就始终存在 info 是 null 的问题。 经过一番尝试，通过如下的方法解决了。 找到文件 /www/luci-static/resources/xhr.js，找到其中的 xhr.onreadystatechange = function () { 解析 xhr 的 responseText 是通过 json = eval('(' + xhr.responseText + ')'); 经过测试发现始终是 null，这一句里的单引号换成双引号也不行。 最终更改 json 解析的方式，这一行改成了 json = JSON.parse(xhr.responseText); 再次尝试，有了惊喜，发现日志打印出了 json object！但是遇到了新的问题 Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "default-src 'self' http: https: data: blob: 'unsafe-inline'". 原本的 xhr.js xhr.onreadystatechange = function () { if (xhr.readyState == 4) { var json = null; if (xhr.getResponseHeader("Content-Type") == "application/json") { try { json = eval('(' + xhr.responseText + ')'); } catch (e) { json = null; } } callback(xhr, json); } } 更改之后的 xhr.js xhr.onreadystatechange = function() { if (xhr.readyState == 4) { var json = null; if (xhr.getResponseHeader("Content-Type") == "application/json") { console.log('I am the original xhr, ', xhr); try { //json = eval('(' + xhr.responseText + ')'); json = JSON.parse(xhr.responseText); } catch(e) { console.debug('parsing json failed: ', e); json = null; } console.log('I am the result json: ', json); } callback(xhr, json); } } console.log 建议删除，console.debug 可以保留。 经过一番学习、搜索，发现了此帖 Getting error Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed s…

写了一个油猴脚本，还我干净清爽的百度百科页面
type: item
date: 2022-04-03T11:46:00+08:00
description: 清明节假期第一天上午，你居然还在家写代码 ?️ 前排防 etc: 虽然但是，偶然还是会看一下百度百科嘛，虽然不咋地，不如 wikipedia Greasy Fork 地址 GitHub 还我干净清爽的百度百科页面。 去除了 声明 页头 tab 秒懂百科 TA 说 等等页面信息，与条目相关性不大，去 nmd，别干扰我认真阅读。 还移除了百度经验的视频等等信息。 Before After

完善我的微博热搜实时推送频道
type: item
date: 2021-10-20T13:05:00+08:00
description: 本文前景提要：开发了一个 Telegram 微博热搜实时推送频道 平时使用微信，分享给好友一个你感兴趣的其他平台的内容，你都是怎么分享的？ 各大应用给的 分享 按钮，然后选择分享到 微信，然后再选择分享对象，点击发送 直接复制链接，粘贴并分享给对方 相信 1 是更多的人的习惯/做法。 我比较喜欢直接复制链接，尤其是在电脑上点开别人给我分享的 B 站视频我都会很烦恼，因为我想在 Chrome 里打开观看，于是就打开视频，在微信内置浏览器复制视频链接（或者直接「open with default browser」），我还有“洁癖”，把 url 后面的 params 全清干净才会回车，然后观看。 不知道是否有人和我一样。。 几天前我在 V2EX 发了一个帖子 一个微博热搜实时推送频道 ，由于 Telegram bot 推送 API 限制字符数 4096 个，而且我希望能直接点击按钮获取对应热搜的直链。于是补充做了下面的前后端项目。 后端: Spring Boot，repo 还是上次那个 前端: ReactJS，前端新手（老菜了）撸了一个简单的 react 项目，大神轻喷…… (CSS 杀我...) GitHub: back-end、front-end 还开放了一个我封装好了的微博热搜 API，请求格式如下，返回 JSONArray https://weibo1.hellodk.com/get?time=2021-10-20-12 time 字段取值格式 yyyy-MM-dd-HH ，比如上面的 2021-10-20-12，小时取值范围 00 到 23 预览 频道每天 6 点到 23 点，每个整点 10 分推送一次实时热搜。比上次多了一个 查看更多 按钮 点击频道每次推送的 查看更多 动图演示 如果把热搜当作一种新闻源的话，当在 tg 这个频道中阅读到感兴趣的话题时，进入上面的页面即可复制对应热搜的 title 和 link 然后快速的分享给微信好友。 比如复制 韩国一公斤牛肉1090元 的 title 和 link，得到如下 text 【韩国一公斤牛肉1090元】 https://m.weibo.cn/search?containerid=100103type%3D1%26t%3D10%26q%3D%23%E9%9F%A9%E5%9B%BD%E4%B8%80%E5%85%AC%E6%96%A4%E7%89%9B%E8%82%891090%E5%85%83%23&isnewpage=1&extparam=seat%3D1%26filter_type%3Drealtimehot%26dgr%3D0%26cate%3D0%26pos%3D1%26realpos%3D2%26flag%3D1%26c_type%3D31%26display_time%3D1634702972%26pre_seqid%3D1634702853849023126271&luicode=10000011&lfid=106003type%3D25%26t%3D3%26disable_hot%3D1%26filter_type%3Drealtimehot 最后再次欢迎大家订阅频道，地址是 https://t.me/weibo_hot_search 后续闲了准备给 https://weibo.hellodk.com 做一个首页，以及全局搜索功能，方便对历史热搜归档和检索。