我写了个诗词朗诵网站

简介: 诗词数据主要来自这个 chinese-poetry 库,其中包含了几十万首唐诗宋词,然而里面主要是静态数据,要直接用在站点要么得搞个服务端、要么得直接把数据都扒下来,然后无意间在该库的网站中找到了关于今日诗词 API 的鸣谢。然后果断使用了今日诗词 的 API。

网络异常,图片无法展示
|

诗词数据

诗词数据主要来自这个 chinese-poetry 库,其中包含了几十万首唐诗宋词,然而里面主要是静态数据,要直接用在站点要么得搞个服务端、要么得直接把数据都扒下来,然后无意间在该库的网站中找到了关于今日诗词 API 的鸣谢。然后果断使用了今日诗词API

直接通过 npm install 安装

npm -i jinrishici --save
复制代码

然后引入即可:

import { load, Res } from 'jinrishici';
load(result => {
    poetry.value = result;
});
复制代码

至于官网的示例代码:

const jinrishici = require('jinrishici');
jinrishici.load(result => {
    console.log(result);
});
复制代码

由于使用 vite3 改成了 import,由于今日诗词 API 没有提供 ts 描述,所以自己补充了下描述文件。

declare module 'jinrishici' {
    interface Res {
        status: 'success' | 'error';
        data: {
            id: string;
            content: string;
            popularity: number;
            origin: {
                title: string;
                dynasty: string;
                author: string;
                content: string[];
            };
            matchTags: string[];
            recommendedReason: string;
        };
        token: string;
        ipAddress: string;
        warning: null;
    }
    interface LoadHandler {
        (poetry: Res): void;
    }
    interface Load {
        (handler: LoadHandler): void;
    }
    export const load: Load;
    export { Res };
}
复制代码

朗读

朗读直接使用 Web Speech API,将诗词通过 speechSynthesis 进行播放,也遇到一些问题:

无法主动播放音频

就是无法通过脚本主动调用播放的 API,比如进入页面后直接播放当前诗歌,会直接报错 not-allowed,了解了下大概还是被滥用,导致和弹窗一样被浏览器限制了,必须由用户行为触发才能正常播放。

所以无奈的将进入页面自动播放取消了,改成了点击按钮才能播放。

部分浏览器无法播放

调用 speechSynthesis.speak() 时,Safari 无效果,并且在 Safari 下,getVoices 列表是空的,在 stackoverflow 找到了对应的提问但是却没回答。

由于事件原因没多研究,只能随手加了个报错处理解决了一下。

动画

为了避免页面太单调,使用了 Web Animations API 快速随手写了个渐入动画。之前一篇文有介绍该系列 API孤陋寡闻了,才知道已经可以用 JS 来控制 CSS 动画了

由于 Web Animations API 可以方便的插入动画,并在动画完成后做处理,写起来非常简单:

const doAnimate = async (target: keyof typeof selector, index: number = 0) => {
    const dom = document.querySelectorAll(selector[target]);
    const animate = dom[index]?.animate(keyframes, animateOptions);
    await animate.finished;
    (dom[index] as HTMLElement).style.opacity = '1';
};
复制代码

开发

开发使用 vite+ts+vue3 进行,直接 pnpm create vite 快速创建项目,vite 虽说现在 bug 还是不少,不过做一些小玩具项目体验还是不错。

部署

最后部署则是直接使用 GitHub pages 进行,通过 GitHub actions 在推送后自动构建并部署到 GitHub pages 中。然后自定义域名挂在 cloudflare 上,可以通过 cloudflare 加速访问。

开源

源码托管在 GitHub 中,有兴趣的同学可以点进去查看:poetry-reader

缺憾

Chrome 中使用的好像是 google 的语音助手(Google 普通话(中国大陆)),朗诵效果着实不理想。

后续

本项目完全是一时兴起,后续可能做的更新:

  • 根据诗歌内容,加载对应的背景图
  • 试试接入其它 speech 引擎
  • 使用语音识别,增加用户朗诵对比功能
  • 优化动画效果


相关文章
|
数据采集 Web App开发 XML
网页文本解析利器“美丽汤”
网页被抓取下来,通常就是str 字符串类型的对象,要从里面寻找信息,最直接的想法就是直接通过字符串的 find 方法和切片操作:
|
人工智能 搜索推荐 iOS开发
ChatGPT还在2G冲浪?新模型「youChat」:我已能够解说2022世界杯(2)
ChatGPT还在2G冲浪?新模型「youChat」:我已能够解说2022世界杯
126 0
ChatGPT还在2G冲浪?新模型「youChat」:我已能够解说2022世界杯(2)
|
人工智能 搜索推荐 区块链
ChatGPT还在2G冲浪?新模型「youChat」:我已能够解说2022世界杯(1)
ChatGPT还在2G冲浪?新模型「youChat」:我已能够解说2022世界杯
116 0
|
开发工具 图形学 Android开发
零基础Unity做一个中秋诗词鉴赏网页,祝您中秋快乐!
本文教你零基础Unity制作诗词鉴赏网页,祝您中秋节快乐
204 0
零基础Unity做一个中秋诗词鉴赏网页,祝您中秋快乐!
|
大数据 应用服务中间件 Linux
Python网络爬虫(正则, 内涵段子,猫眼电影, 链家爬取)
python、python爬虫、网络爬虫、爬虫框架、selenium、requests、urllib、数据分析、大数据、爬虫爬取静态网页、爬虫基础
2627 0
8月推荐网站
想流畅观看youbute等国外网站的话。 有个比较好的做法是买个国外的vps,然后安装ssr。关于安装流程,非常简单有一键安装脚本。 可以去这买,搬瓦工。
906 0
7月推荐网站
牛客网 收集各IT大厂的笔试面试题,没事做做上面的题全面提升IT编程能力 网盘精灵 百度网盘、百度云资源搜索引擎,还显示提取码
840 0
|
机器学习/深度学习 人工智能 算法
算法音乐往事:二次元女神“初音未来”诞生记
音乐的诞生甚至早于语言,人类对于音乐的探索却从未停止。从最初的“音乐骰子”到如今火遍二次元的宅男女神“初音未来”,算法与音乐之间的故事,才刚刚开始。
2247 0
电影《我不是药神》观后感
 第一次写关于电影的观后感,献给徐峥的《我不是药神》的电影,相信我这是一部即使我剧透了一部分的电影内容你依然会去电影院看的现实题材电影。这或许是徐峥截至目前为止演的最有冲击力的一部电影  电影的故事主线是阿三的国度印度生产一种印度版的白血病专用药格列宁,价格只有正规市场价格的10%左右,一个现实社会中的小人物阴差阳错的走上了代人“走私药品”的道路,为很多因为高价买不起只能等死的白血病人带来希望的故事。
1678 0