Files
Bryan 32a35f29d4 feat(route): support medium (#12475)
* feat(route): support medium

* docs(route): support medium

* feat(medium): add radar.js

* Update docs/blog.md

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update docs/blog.md

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update docs/blog.md

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update docs/blog.md

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update docs/en/blog.md

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update lib/v2/medium/tag.js

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update lib/v2/medium/router.js

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update lib/v2/medium/maintainer.js

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update docs/en/blog.md

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update docs/en/blog.md

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update docs/en/blog.md

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update lib/v2/medium/following.js

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update lib/v2/medium/for-you.js

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update lib/v2/medium/list.js

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* chore(medium): update graphql

---------

Co-authored-by: Tony <TonyRL@users.noreply.github.com>
2023-05-09 01:57:15 -11:00

33 lines
1.1 KiB
JavaScript

const config = require('@/config').value;
const parseArticle = require('./parse-article.js');
const { getUserCatalogMainContentQuery } = require('./graphql.js');
module.exports = async (ctx) => {
const user = ctx.params.user;
const catalogId = ctx.params.catalogId;
const cookie = config.medium.cookies[user];
const catalog = await getUserCatalogMainContentQuery(user, catalogId, cookie);
ctx.state.json = catalog;
if (catalog && catalog.__typename === 'Forbidden') {
throw Error(`无权访问 id 为 ${catalogId} 的 List(可能是未设置 Cookie 或 Cookie 已过期)`);
}
if (!catalog || !catalog.itemsConnection) {
throw Error(`id 为 ${catalogId} 的 List 不存在`);
}
const name = catalog.name;
const urls = catalog.itemsConnection.items.map((item) => item.entity.mediumUrl);
const parsedArticles = await Promise.all(urls.map((url) => parseArticle(ctx, url)));
ctx.state.data = {
title: `List: ${name}`,
link: `https://medium.com/@${user}/list/${catalogId}`,
item: parsedArticles,
};
};