feat: add Academy of Management journals (#5807)
Co-authored-by: Henry Wang <hi@henry.wang>
This commit is contained in:
parent
ad6135b0d2
commit
fed0404c3b
|
|
@ -4,6 +4,37 @@ pageClass: routes
|
|||
|
||||
# Scientific Journal
|
||||
|
||||
## arXiv
|
||||
|
||||
### Search Keyword
|
||||
|
||||
<RouteEn author="nczitzk" example="/arxiv/search_query=all:electron&start=0&max_results=10" path="/arxiv/:query" :paramsDesc="['query statement']" anticrawler="1">
|
||||
|
||||
See [arXiv API User Manual](https://arxiv.org/help/api/user-manual) to find out all query statements.
|
||||
|
||||
Fill in parameter `query` with content after `http://export.arxiv.org/api/query?`.
|
||||
|
||||
</RouteEn>
|
||||
|
||||
## Academy of Management
|
||||
|
||||
### Journal
|
||||
|
||||
<RouteEn author="nczitzk" example="/aom/journal/amr" path="/aom/journal/:id" :paramsDesc="['journal id, see below']">
|
||||
|
||||
| Id | Title |
|
||||
| --------- | ------------------------------------------ |
|
||||
| annals | Academy of Management Annals |
|
||||
| amd | Academy of Management Discoveries |
|
||||
| amgblproc | Academy of Management Global Proceedings |
|
||||
| amj | Academy of Management Journal |
|
||||
| amle | Academy of Management Learning & Education |
|
||||
| amp | Academy of Management Perspectives |
|
||||
| amproc | Academy of Management Proceedings |
|
||||
| amr | Academy of Management Review |
|
||||
|
||||
</RouteEn>
|
||||
|
||||
## Cell Journal
|
||||
|
||||
<RouteEn author="yech1990" example="/cell/cell/current" path="/cell/cell/:category" supportScihub="1" />
|
||||
|
|
|
|||
|
|
@ -16,6 +16,25 @@ pageClass: routes
|
|||
|
||||
</Route>
|
||||
|
||||
## Academy of Management
|
||||
|
||||
### Journal
|
||||
|
||||
<Route author="nczitzk" example="/aom/journal/amr" path="/aom/journal/:id" :paramsDesc="['期刊 id,见下表']" supportScihub="1">
|
||||
|
||||
| Id | 名称 |
|
||||
| --------- | ------------------------------------------ |
|
||||
| annals | Academy of Management Annals |
|
||||
| amd | Academy of Management Discoveries |
|
||||
| amgblproc | Academy of Management Global Proceedings |
|
||||
| amj | Academy of Management Journal |
|
||||
| amle | Academy of Management Learning & Education |
|
||||
| amp | Academy of Management Perspectives |
|
||||
| amproc | Academy of Management Proceedings |
|
||||
| amr | Academy of Management Review |
|
||||
|
||||
</Route>
|
||||
|
||||
## Cell
|
||||
|
||||
### 主刊
|
||||
|
|
@ -123,7 +142,7 @@ pageClass: routes
|
|||
|
||||
### 最新文章(可筛选领域)
|
||||
|
||||
<Route author="emdoe yech1990" example="/pnas/Applied Mathematics" path="/pnas/:topic" :paramsDesc="['领域名称','可从 pnas.org 获得']" />
|
||||
<Route author="emdoe yech1990" example="/pnas/Applied Mathematics" path="/pnas/:topic" :paramsDesc="['领域名称','可从 pnas.org 获得']" supportScihub="1"/>
|
||||
|
||||
- 通过 `/pnas/` + “领域名称” 来获取对应 “领域” 的最新文章(Latest Research)。
|
||||
若参数置空(`/pnas`)或为 latest(`/pnas/latest`),则默认获取全部文章。
|
||||
|
|
|
|||
|
|
@ -3260,6 +3260,9 @@ router.get('/appsales/:caty?/:time?', require('./routes/appsales/index'));
|
|||
// CGTN
|
||||
router.get('/cgtn/top', require('./routes/cgtn/top'));
|
||||
|
||||
// Academy of Management
|
||||
router.get('/aom/journal/:id', require('./routes/aom/journal'));
|
||||
|
||||
// 巴哈姆特電玩資訊站
|
||||
router.get('/gamer/hot/:bsn', require('./routes/gamer/hot'));
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,108 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
const rootUrl = 'https://journals.aom.org';
|
||||
|
||||
const config = {
|
||||
annals: {
|
||||
title: 'Academy of Management Annals',
|
||||
link: `${rootUrl}/journal/annals`,
|
||||
},
|
||||
amd: {
|
||||
title: 'Academy of Management Discoveries',
|
||||
link: `${rootUrl}/journal/amd`,
|
||||
},
|
||||
amgblproc: {
|
||||
title: 'Academy of Management Global Proceedings',
|
||||
link: `${rootUrl}/toc/amgblproc/current`,
|
||||
},
|
||||
amj: {
|
||||
title: 'Academy of Management Journal',
|
||||
link: `${rootUrl}/journal/amj`,
|
||||
},
|
||||
amle: {
|
||||
title: 'Academy of Management Learning & Education',
|
||||
link: `${rootUrl}/journal/amle`,
|
||||
},
|
||||
amp: {
|
||||
title: 'Academy of Management Perspectives',
|
||||
link: `${rootUrl}/journal/amp`,
|
||||
},
|
||||
amproc: {
|
||||
title: 'Academy of Management Proceedings',
|
||||
link: `${rootUrl}/toc/amproc/current`,
|
||||
},
|
||||
amr: {
|
||||
title: 'Academy of Management Review',
|
||||
link: `${rootUrl}/toc/amr/0`,
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const cfg = config[ctx.params.id];
|
||||
if (!cfg) {
|
||||
throw Error('Bad id. See <a href="https://docs.rsshub.app/journal.html#academy-of-management-journal">docs</a>');
|
||||
}
|
||||
|
||||
const currentUrl = cfg.link;
|
||||
|
||||
const firstResponse = await got({
|
||||
method: 'get',
|
||||
url: rootUrl,
|
||||
});
|
||||
|
||||
const headers = {
|
||||
cookie: `JSESSIONID=${firstResponse.headers['set-cookie'].join(' ').match(/JSESSIONID=(\S+);/)[1]}`,
|
||||
};
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: currentUrl,
|
||||
headers,
|
||||
});
|
||||
const $ = cheerio.load(response.data);
|
||||
|
||||
$('div[data-widget-def="topContentActionWidget"]').eq(2).remove();
|
||||
$('div[data-widget-def="topContentActionWidget"]').eq(1).remove();
|
||||
|
||||
const list = $('h5')
|
||||
.not('.border-top')
|
||||
.map((_, item) => {
|
||||
item = $(item);
|
||||
const a = item.parent().get(0).tagName === 'a' ? item.parent() : item.find('a');
|
||||
return {
|
||||
title: a.attr('title'),
|
||||
link: `${rootUrl}${a.attr('href')}`,
|
||||
};
|
||||
})
|
||||
.get();
|
||||
|
||||
const items = await Promise.all(
|
||||
list.map(
|
||||
async (item) =>
|
||||
await ctx.cache.tryGet(item.link, async () => {
|
||||
const detailResponse = await got({
|
||||
method: 'get',
|
||||
url: item.link,
|
||||
headers,
|
||||
});
|
||||
const content = cheerio.load(detailResponse.data);
|
||||
|
||||
content('.author-info').remove();
|
||||
|
||||
item.author = content('.loa-accordion').text();
|
||||
item.doi = content('meta[name="dc.Identifier"]').attr('content');
|
||||
item.description = content('.abstractInFull').html();
|
||||
item.pubDate = new Date(content('meta[name="dc.Date"]').attr('content')).toUTCString();
|
||||
|
||||
return item;
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
ctx.state.data = {
|
||||
title: cfg.title,
|
||||
link: currentUrl,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
Loading…
Reference in New Issue