javascript - 如何有效地存储大量 URL
问题描述
我正在开发一个 google chrome 扩展程序,它在特定 URL 旁边添加了一个简单的图标,
- 它会向哪些 URL 添加图标?
好吧,它基本上是一个 Anti-Rickroll 扩展,可以阻止 rickroll URL
- 有什么问题?
基本上,youtube 中有大量的 rickroll URL,其中一些是这样的“Rickroll,但它是一个不同的链接,所以人们无法记住它”当我制作项目的第一个原型时,我只添加了原始的 Rickroll 和“ Rickroll'D" 链接和我的代码中的音乐版权 URL 如下所示:
var stringsToBlock = ["/watch?v=dQw4w9WgXcQ", "youtu.be/dQw4w9WgXcQ",
"/watch?v=okqEVeNqBhc", "youtu.be/okqEVeNqBhc", "/watch?v=BROWqjuTM0g",
"youtu.be/BROWqjuTM0g", "/watch?v=IAISUDbjXj0", "youtu.be/IAISUDbjXj0",
"/watch?v=4zKshWnI3ok", "youtu.be/4zKshWnI3ok", "/watch?v=oHg5SJYRHA0",
"youtu.be/oHg5SJYRHA0", "/watch?v=6_b7RDuLwcI", "youtu.be/6_b7RDuLwcI",
"/watch?v=DD70oKDlemE", "youtu.be/DD70oKDlemE", "/video/x1v6sh_rick-astley-never-gonna-give-you-up_music",
"/video/x4g0cb_rick-astley-never-gonna-give-you-up_music", "/video/x1jl5p_rick-astley-never-gonna-give-you-up_creation",
"/video/x46d2_rick-asley-never-gonna-give-you-up_music", "/video/x5ykzv_rick-roll_music",
"/video/x58u4t_rick-roll-never-gonna-give-you-up-r_music", "/video/x58una_rick-roll-never-gonna-give-you-up-r_music",
"/video/x22k2fw_rick-rolled_music", "/video/xsdji_rick-astley-never-gonna-give-you-up_music",
"/video/x1i1js_rick-astley-never-gonna-give-you-up_music", "/video/xeztvl_rick-astley-never-gonna-give-you-up_music",
"/video/x6b3kz_rickroll_news", "/video/x5l8e6_rickroll_fun", "/2619976",
是的,这只是我上面提到的 3 个链接,不包括添加图标的 css
a[href*="/watch?v=dQw4w9WgXcQ"]:not(.rickroll):not(.rickwimg):before,
a[href*="youtu.be/dQw4w9WgXcQ"]:not(.rickroll):not(.rickwimg):before,
a[href*="/watch?v=okqEVeNqBhc"]:not(.rickroll):not(.rickwimg):before,
a[href*="youtu.be/okqEVeNqBhc"]:not(.rickroll):not(.rickwimg):before,
a[href*="/watch?v=BROWqjuTM0g"]:not(.rickroll):not(.rickwimg):before,
a[href*="youtu.be/BROWqjuTM0g"]:not(.rickroll):not(.rickwimg):before,
a[href*="/watch?v=IAISUDbjXj0"]:not(.rickroll):not(.rickwimg):before,
a[href*="youtu.be/IAISUDbjXj0"]:not(.rickroll):not(.rickwimg):before,
a[href*="/watch?v=4zKshWnI3ok"]:not(.rickroll):not(.rickwimg):before,
a[href*="youtu.be/4zKshWnI3ok"]:not(.rickroll):not(.rickwimg):before,
a[href*="/watch?v=oHg5SJYRHA0"]:not(.rickroll):not(.rickwimg):before,
a[href*="youtu.be/oHg5SJYRHA0"]:not(.rickroll):not(.rickwimg):before,
a[href*="/watch?v=6_b7RDuLwcI"]:not(.rickroll):not(.rickwimg):before,
a[href*="youtu.be/6_b7RDuLwcI"]:not(.rickroll):not(.rickwimg):before,
a[href*="/watch?v=DD70oKDlemE"]:not(.rickroll):not(.rickwimg):before,
a[href*="youtu.be/DD70oKDlemE"]:not(.rickroll):not(.rickwimg):before,
a[href*="/video/x1v6sh_rick-astley-never-gonna-give-you-up_music"]:not(.rickroll):not(.rickwimg):before,
a[href*="/video/x4g0cb_rick-astley-never-gonna-give-you-up_music"]:not(.rickroll):not(.rickwimg):before,
a[href*="/video/x1jl5p_rick-astley-never-gonna-give-you-up_creation"]:not(.rickroll):not(.rickwimg):before,
a[href*="/video/x46d2_rick-asley-never-gonna-give-you-up_music"]:not(.rickroll):not(.rickwimg):before,
a[href*="/video/x5ykzv_rick-roll_music"]:not(.rickroll):not(.rickwimg):before,
a[href*="/video/x58u4t_rick-roll-never-gonna-give-you-up-r_music"]:not(.rickroll):not(.rickwimg):before,
a[href*="/video/x58una_rick-roll-never-gonna-give-you-up-r_music"]:not(.rickroll):not(.rickwimg):before,
a[href*="/video/x22k2fw_rick-rolled_music"]:not(.rickroll):not(.rickwimg):before,
a[href*="/video/xsdji_rick-astley-never-gonna-give-you-up_music"]:not(.rickroll):not(.rickwimg):before,
a[href*="/video/x1i1js_rick-astley-never-gonna-give-you-up_music"]:not(.rickroll):not(.rickwimg):before,
a[href*="/video/xeztvl_rick-astley-never-gonna-give-you-up_music"]:not(.rickroll):not(.rickwimg):before,
a[href*="/video/x6b3kz_rickroll_news"]:not(.rickroll):not(.rickwimg):before,
a[href*="/video/x5l8e6_rickroll_fun"]:not(.rickroll):not(.rickwimg):before,
a[href*="/2619976"]:not(.rickroll):not(.rickwimg):before,
显然代码还有更多内容。所以基本上我在 youtube 上搜索 rickroll 并复制了 10 个 URL,扩展大小总和为 1.5MB,与其他有用的扩展相比,这确实很大,所以如果我要添加任何 rickroll 链接,它可能会变成 100MB 到 200MB,那么有什么有用的方法来自动添加 URL
我脑子里几乎没有什么想法,但我不确定它们是否有效
- 如果标题或描述包含“Rickroll”,则获取后台脚本以扫描 URL
- 使用 YouTube 的 API 获取每个可能的 rickroll 链接的巨大列表并将其存储在服务器中作为第一个项目不方便的服务器]
- 重新制作整个代码,以提高查找 URL 的效率
另外,我是一个完整的初学者,所以不要专业地跟我说话,尽量简化答案
解决方案
我强烈建议为此使用正则表达式匹配。既然你有/watch?v=dQw4w9WgXcQ
,youtu.be/dQw4w9WgXcQ
你可以剪辑 id 的一部分并检查它们是否存在于你的列表中。这样,您只需存储 ID!
var something = "/watch?v=dQw4w9WgXcQ"
var test = something.match(/\/watch?v=(.*)/);
console.log(test[1]);
这会给你dQw4w9WgXcQ
您还可以使用正则表达式来查看它是否包含特定字符,例如“rick-roll”
(new RegExp('rickroll')).test(url)
// or
/rickroll/.test(url)
您还可以将 id / patterns 存储在本地存储 API 中以快速访问它们!
推荐阅读
- javascript - P5图库动画
- javascript - 如何在 ReactJs 中不使用 useState 设置局部变量
- vba - Visual basic - 运行时错误 - '2047023170(800706be)'
- pymupdf - 如何在 PDF 之间传输注释(例如使用 pymupdf)
- python - 为什么我不断收到我的代码的 EOF 错误?
- html - 我的反应表单如何直接发送到我的电子邮件?
- python - python中的汉明数
- r - 使用 scale_y_log10 函数后如何将点作为辅助轴?
- encryption - 如何将 &rsa::RsaPublicKey(BigUint) 转换为 PEM 并在 RUST 中打印?
- java - 为什么Hadoop不能制作目录?