diff --git a/docs/programming.md b/docs/programming.md index 5565c8a065..5aabaa9654 100644 --- a/docs/programming.md +++ b/docs/programming.md @@ -240,6 +240,18 @@ GitHub 官方也提供了一些 RSS: +## Visual Studio Code Marketplace + +### Visual Studio Code 插件 + + + +| Featured | Trending Weekly | Trending Monthly | Trending Daily | Most Popular | Recently Added | +| -------- | --------------- | ---------------- | -------------- | ------------ | -------------- | +| featured | trending | trending_m | trending_d | popular | new | + + + ## 阿里云 ### 数据库内核月报 diff --git a/lib/router.js b/lib/router.js index 9476e67bdb..74692f3479 100644 --- a/lib/router.js +++ b/lib/router.js @@ -260,7 +260,6 @@ router.get('/github/search/:query/:sort?/:order?', require('./routes/github/sear router.get('/github/branches/:user/:repo', require('./routes/github/branches')); router.get('/github/file/:user/:repo/:branch/:filepath+', require('./routes/github/file')); router.get('/github/starred_repos/:user', require('./routes/github/starred_repos')); - // f-droid router.get('/fdroid/apprelease/:app', require('./routes/fdroid/apprelease')); @@ -1936,4 +1935,7 @@ router.get('/gov/cnca/hydt', require('./routes/gov/cnca/hydt')); router.get('/gov/cnca/zxtz', require('./routes/gov/cnca/zxtz')); +// Visual Studio Code Marketplace +router.get('/vscode/marketplace/:type?', require('./routes/vscode/marketplace')); + module.exports = router; diff --git a/lib/routes/vscode/marketplace.js b/lib/routes/vscode/marketplace.js new file mode 100644 index 0000000000..1efcb3196d --- /dev/null +++ b/lib/routes/vscode/marketplace.js @@ -0,0 +1,39 @@ +const got = require('got'); +const url = require('url'); + +module.exports = async (ctx) => { + const type = ctx.params.type || 'featured'; + const category = { + featured: { id: 0, section: 'Featured' }, + trending: { id: 1, section: 'Trending Weekly' }, + trending_w: { id: 1, section: 'Trending Weekly' }, + trending_d: { id: 2, section: 'Trending Daily' }, + trending_m: { id: 3, section: 'Trending Monthly' }, + popular: { id: 4, section: 'Most Popular' }, + new: { id: 5, section: 'Recently Added' }, + }; + + const rootLink = 'https://marketplace.visualstudio.com/'; + const response = await got('https://marketplace.visualstudio.com/getextensionspercategory?Product=vscode&RemoveFirstSetCategories=true'); + const jsonData = JSON.parse(response.body); + const extensionsList = jsonData.epc[category[type].id].e; + const out = + extensionsList && + extensionsList.map((item) => { + const title = item.t; + const description = item.s; + const link = url.resolve(rootLink, item.l); + const author = item.a; + return { + title, + description, + link, + author, + }; + }); + ctx.state.data = { + title: 'VS Code Extensions: ' + category[type].section, + link: 'https://marketplace.visualstudio.com/', + item: out, + }; +};