Skip to content

Commit

Permalink
feat(route): 円谷ステーション (#17650)
Browse files Browse the repository at this point in the history
* feat(route): m-78

* add updated

* fix error tips

* Update lib/routes/m-78/news.ts

---------
  • Loading branch information
KarasuShin authored Nov 20, 2024
1 parent 7e17a50 commit 2070264
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 0 deletions.
7 changes: 7 additions & 0 deletions lib/routes/m-78/namespace.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import type { Namespace } from '@/types';

export const namespace: Namespace = {
name: '円谷ステーション',
url: 'm-78.jp',
lang: 'ja',
};
115 changes: 115 additions & 0 deletions lib/routes/m-78/news.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
import { type Data, type Route, ViewType } from '@/types';
import ofetch from '@/utils/ofetch';
import type { Context } from 'hono';
import type { Post } from './types';
import { parseDate } from '@/utils/parse-date';
import { load } from 'cheerio';
import InvalidParameterError from '@/errors/types/invalid-parameter';

export const route: Route = {
name: 'ニュース',
categories: ['anime'],
path: '/news/:category?',
example: '/m-78/news',
radar: [
{
source: ['m-78.jp/news'],
target: '/news',
},
{
source: ['m-78.jp/news/category/:category'],
target: '/news/:category',
},
],
parameters: {
category: {
description: 'news category',
default: 'news',
options: [
{
value: 'news',
label: 'ニュース',
},
{
value: 'streaming',
label: '動画配信',
},
{
value: 'event',
label: 'イベント',
},
{
value: 'onair',
label: '放送',
},
{
value: 'broadcast',
label: '放送/配信',
},
{
value: 'goods',
label: 'グッズ',
},
{
value: 'ultraman-cardgame',
label: 'ウルトラマン カードゲーム',
},
{
value: 'shop',
label: 'ショップ',
},
{
value: 'blu-ray_dvd',
label: 'Blu-ray・DVD',
},
{
value: 'digital',
label: 'デジタル',
},
],
},
},
handler,
maintainers: ['KarasuShin'],
features: {
supportRadar: true,
},
view: ViewType.Articles,
};

async function handler(ctx: Context): Promise<Data> {
const rootUrl = 'https://m-78.jp';
const cateAPIUrl = `${rootUrl}/wp-json/wp/v2/categories`;
const postsAPIUrl = `${rootUrl}/wp-json/wp/v2/posts`;
const category = ctx.req.param('category') ?? 'news';
const limit = ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit')!, 10) : 20;

const categories = await ofetch(`${cateAPIUrl}?slug=${category}`);
if (categories.length === 0) {
throw new InvalidParameterError('Category not found');
}

const { id: categoryId, link: categoryLink, name: categoryName } = categories[0];

const posts = await ofetch<Post[]>(`${postsAPIUrl}?categories=${categoryId}&per_page=${limit}`);
return {
title: `${categoryName} | ニュース`,
link: categoryLink,
item: posts.map((post) => {
const $ = load(post.content.rendered, null, false);
$('#ez-toc-container').remove();
$('img').each((_, img) => {
if (/wp-content\/uploads/.test(img.attribs.src)) {
img.attribs.src = img.attribs.src.replace(/(-\d+x\d+)/, '');
}
});
return {
title: post.title.rendered,
link: post.link,
description: $.html(),
pubDate: parseDate(post.date_gmt),
updated: parseDate(post.modified_gmt),
};
}),
};
}
13 changes: 13 additions & 0 deletions lib/routes/m-78/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
export interface Post {
id: number;
content: {
rendered: string;
};
date_gmt: string;
modified_gmt: string;
link: string;
categories: number[];
title: {
rendered: string;
};
}

0 comments on commit 2070264

Please sign in to comment.