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,
+ };
+};