UNPKG

rsshub

Version:
80 lines (71 loc) 2.66 kB
import { Route } from '@/types'; import type { Context } from 'hono'; import { District, House } from './types'; import ofetch from '@/utils/ofetch'; import { parseDate } from '@/utils/parse-date'; import { baseUrl, getCitys, getDistricts } from './utils'; import InvalidParameterError from '@/errors/types/invalid-parameter'; import { art } from '@/utils/render'; import path from 'node:path'; const render = (data) => art(path.join(__dirname, 'templates/house.art'), data); export const route: Route = { path: '/rent/:city/:district?', example: '/wellcee/rent/北京', parameters: { city: '城市', district: '地区', }, name: '租房信息', maintainers: ['TonyRL'], handler, url: 'www.wellcee.com', description: '支持的城市可以通过 [/wellcee/support-city](https://rsshub.app/wellcee/support-city) 获取', }; async function handler(ctx: Context) { const { city, district = '' } = ctx.req.param(); const citys = await getCitys(); const cityInfo = citys.find((item) => item.chCityName === city); if (!cityInfo) { throw new InvalidParameterError('Invalid city'); } let districtInfo: District | undefined; if (district) { const districts = await getDistricts(cityInfo.id); const d = districts.find((item) => item.name === district); if (!d) { throw new InvalidParameterError('Invalid district'); } districtInfo = d; } const response = await ofetch(`${baseUrl}/api/house/filter`, { method: 'POST', body: { districtIds: districtInfo?.id ? [districtInfo.id] : [], subways: [], rentTypeIds: [], timeTypeIds: [], price: [], tagTypeIds: [], cityId: cityInfo.id, lang: 1, pn: 1, }, }); const items = (response.data.list as House[]).map((item) => ({ title: item.address, link: `${baseUrl}/rent-apartment/${item.id}`, description: render({ item }), pubDate: parseDate(item.loginTime, 'X'), author: item.userInfo.name, category: [...item.tags, ...item.typeTags], })); return { title: `${city}${districtInfo?.name ?? ''}租房信息 - Wellcee`, description: `${cityInfo.statics.online_text} ${cityInfo.statics.total_text}`, image: cityInfo.icon, icon: cityInfo.icon, logo: cityInfo.icon, link: `${baseUrl}/rent-apartment/${cityInfo.cityName}/list?cityId=${cityInfo.id}&lang=zh${district ? `#districtIds=${districtInfo?.id}` : ''}`, item: items, }; }