模块:IconLink/data

来自维阿百科
跳转至: 导航搜索

模块:IconLink/data数据格式检查:

sites表验证通过。

domains表验证通过。


-- 一些小函数,可以在sites中使用

local match = string.match
local gsub = string.gsub

-- 删除字符串前的一个'@'
local function removeAt(str)
	return gsub(str, '^@', '', 1)
end


--[[
在这里添加站点。

sites格式:
	<网站英文小写> = {
		name = '<网站名称>',
		icon = {file = '<文件名,最好是svg>' [, size = '<大小,默认是x20px>']},
		url = '<url的format,用%s代替id的位置,用于string.format>'

		url = {
			{'<id的pattern,用于string.match>', '<url的format,用%s代替id的位置,用于string.format>'},
			{同上},
			……
			{'<id的pattern>' 或 nil, '<url的format'}, -- 作为最后一个表时,pattern可以是nil
		}

		url = function(id),返回url或false(false表示id格式错误)
	}

在这里添加之后,还需要在domains中添加域名。
]]
local sites = {
	acfun = {
		name = 'AcFun',
		icon = {file = 'Acfun_logo2.png'},
		url = {
			{'^ac[%a%d]+$', 'https://www.acfun.cn/v/%s'},  -- v/ac
			{'^%d+$',       'https://www.acfun.cn/u/%s'},  -- user
		}
	},
    applemusic = {
		name = 'Apple Muisc',
		icon = {file = 'ApplemusicFavicon.png'},
		url = 'https://music.apple.com/%s'
	},
	bilibili = {
		name = 'bilibili',
		-- mainpage = 'https://www.bilibili.com/',
		icon = {file = 'Bilibili_Icon.svg', size = '17px'},
		url = {
			{'^[Bb][Vv][%a%d]+$', 'https://www.bilibili.com/video/%s'},  -- BV
			{'^av%d+$',           'https://www.bilibili.com/video/%s'},  -- av
			{'^[cC][vV]%d+$',     'https://www.bilibili.com/read/%s'},   -- cv
			{'^%d+$',             'https://space.bilibili.com/%s'},  -- 空间
		}
	},
	instagram = {
		name = 'Instagram',
		icon = {file = 'Instagram_Icon.png'},
		url = 'https://www.instagram.com/%s'
	},
    music163 = {
		name = '网易云音乐',
		icon = {file = '网易云音乐-logo.png'},
		url = 'https://music.163.com/%s'
	},
	niconico = {
		name = 'niconico',
		-- mainpage = 'https://www.nicovideo.jp/',
		icon = {file = 'Niconico_Logo_(2020).svg'},
		url = {
			{'^s[mo]%d+$', 'https://www.nicovideo.jp/watch/%s'}, -- sm, so
			{'^%d+$',      'https://www.nicovideo.jp/user/%s'}   -- user
		}
	},
	piapro = {
		name = 'piapro',
		icon = {file = 'Piapro_icon.svg'},
		url = 'https://piapro.jp/%s'  -- 根据insource搜索,多数使用情况是个人主页而非歌曲页
	},
    qqmusic = {
		name = 'QQ音乐',
		icon = {file = 'Logo_QQMusicIcon_2.png'},
		url = 'https://y.qq.com/%s'
	},
	twitch = {
		name = 'twitch',
		icon = {file = 'Twitch_icon.svg'},
		url = 'https://www.twitch.tv/%s'
	},
	x = {
		name = 'X',
		icon = {file = 'X_logo.svg'},
		url = function(id)
			-- username (A-Za-z0-9_)
			if match(id, '^@?[%a%d_]+$') then
				return 'https://x.com/'..removeAt(id)
			end
			-- tweet
			if match(id, '^@?[%a%d_]+%s+%d+$') then
				id = mw.text.split(id, '%s+')
				return 'https://x.com/'..removeAt(id[1])..'/status/'..id[2]
			end
			return false
		end
	},
	weibo = {
		name = '微博',
		icon = {file = 'Weibo-logo.png'},
		url = 'https://weibo.com/%s'
	},
	youtube = {
		name = 'YouTube',
		-- mainpage = 'https://www.youtube.com/',
		icon = {file = 'YouTube_Icon_Red.svg'},
		url = {
			{'^@',             'https://www.youtube.com/%s'},          -- handle
			{'^UC...........', 'https://www.youtube.com/channel/%s'},  -- channel
			{nil,              'https://www.youtube.com/watch?v=%s'},  -- video
			-- 参考资料:https://webapps.stackexchange.com/questions/54443/format-for-id-of-youtube-video/101153#101153
		}
	},
}

-- 在此处添加别名。为避免别名重复,请按照别名的字母顺序摆列
sites.ac = sites.acfun
sites.bl = sites.bilibili
sites.bili = sites.bilibili
-- sites.fb = sites.facebook
sites.ig = sites.instagram
sites.nc = sites.niconico
sites.nico = sites.niconico
sites.ttv = sites.twitch
sites.tw = sites.x
sites.twitter = sites.x
sites.wb = sites.weibo
sites.yt = sites.youtube
sites.ytb = sites.youtube


--[[ domains
格式
	顶级域名 = {
		二级域名 = {
			…… = {
				N级域名 = sites中的key
			}
		},
	},
]]
local domains = {
	cn = {
		acfun = 'acfun',
		weibo = 'weibo',
	},
	com = {
        apple = {
        	music = 'applemusic',
    	},
		bilibili = 'bilibili',
		instagram = 'instagram',
        qq = {
        	y = 'qqmusic',
        },
		twitter = 'x',
		weibo = 'weibo',
		x = 'x',
		youtube = 'youtube',
		['163'] = {
			music = 'music163',
		},
	},
	jp = {
		nicovideo = 'niconico',
		piapro = 'piapro',
	},
	tv = {
		twitch = 'twitch',
	},
}

-- id patterns,按站点字母顺序
local idPatterns = {
	['^ac%d+$'] = sites.acfun,  -- 无大写
	['^[aCc][Vv]%d+$'] = sites.bilibili,  -- av无大写
	['^[Bb][Vv][%a%d]+$'] = sites.bilibili,
	['^sm%d+$'] = sites.niconico,  -- 无大写
}


return {
	sites = sites,
	domains = domains,
	idPatterns = idPatterns
}