首页 > 解决方案 > 如何有效地存储大量 URL

问题描述

我正在开发一个 google chrome 扩展程序,它在特定 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

我脑子里几乎没有什么想法,但我不确定它们是否有效

  1. 如果标题或描述包含“Rickroll”,则获取后台脚本以扫描 URL
  2. 使用 YouTube 的 API 获取每个可能的 rickroll 链接的巨大列表并将其存储在服务器中作为第一个项目不方便的服务器]
  3. 重新制作整个代码,以提高查找 URL 的效率

另外,我是一个完整的初学者,所以不要专业地跟我说话,尽量简化答案

标签: javascriptgoogle-chrome-extensionyoutube-api

解决方案


我强烈建议为此使用正则表达式匹配。既然你有/watch?v=dQw4w9WgXcQyoutu.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 中以快速访问它们!


推荐阅读