Skip to content

Commit

Permalink
feat(route): add route UK Parliament Lords Library research by topic (#…
Browse files Browse the repository at this point in the history
…16933)

* feat(route): add route UK Parliament Lords Library Research by Topic

* chore(route): rename parameter from tag to topic.

* fix: close browser after puppeteer usage

---------
  • Loading branch information
AntiKnot authored Oct 12, 2024
1 parent 830be61 commit b1a030c
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 0 deletions.
55 changes: 55 additions & 0 deletions lib/routes/parliament.uk/lordslibrary.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import { load } from 'cheerio';
import { Route } from '@/types';
import puppeteer from '@/utils/puppeteer';
import timezone from '@/utils/timezone';

export const route: Route = {
path: '/lordslibrary/type/:topic?',
categories: ['government'],
example: '/parliament.uk/lordslibrary/type/research-briefing',
parameters: { topic: 'research by topic, string, example: [research-briefing|buisness|economy]' },
features: {
requireConfig: false,
requirePuppeteer: true,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
},
name: 'House of Lords Library',
maintainers: ['AntiKnot'],
handler,
};

async function handler(ctx) {
const { topic } = ctx.req.param();
const baseUrl = 'https://lordslibrary.parliament.uk/type';
const url = `${baseUrl}/${topic}/`;
const browser = await puppeteer();
const page = await browser.newPage();
await page.setRequestInterception(true);
page.on('request', (request) => {
request.resourceType() === 'document' ? request.continue() : request.abort();
});
await page.goto(url, {
waitUntil: 'domcontentloaded',
});

const html = await page.evaluate(() => document.documentElement.innerHTML);
await page.close();
const $ = load(html);
const items = $('article.card--horizontal')
.map((_, article) => ({
title: $(article).find('.card__text a').text().trim(),
link: $(article).find('.card__text a').attr('href'),
description: $(article).find('p').last().text().trim(),
pubDate: timezone($(article).find('.card__date time').attr('datetime')),
}))
.toArray();
browser.close();
return {
title: `parliament - lordslibrary - ${topic}`,
link: baseUrl,
item: items,
};
}
6 changes: 6 additions & 0 deletions lib/routes/parliament.uk/namespace.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import type { Namespace } from '@/types';

export const namespace: Namespace = {
name: 'UK Parliament',
url: 'parliament.uk',
};

0 comments on commit b1a030c

Please sign in to comment.