From cbc66c876f1d5c6bf51ba4cb368b59b14b31b965 Mon Sep 17 00:00:00 2001 From: tuzi3040 <28290621+tuzi3040@users.noreply.github.com> Date: Tue, 3 Mar 2020 11:41:37 +0800 Subject: [PATCH] feat: router_japanpost (#4154) --- assets/radar-rules.js | 13 ++++++++++ docs/en/other.md | 8 ++++++- docs/other.md | 8 ++++++- lib/router.js | 2 +- lib/routes/japanpost/index.js | 45 ++++++++++++++++++++++------------- 5 files changed, 56 insertions(+), 20 deletions(-) diff --git a/assets/radar-rules.js b/assets/radar-rules.js index 85f48a8b1..a828fb9d5 100644 --- a/assets/radar-rules.js +++ b/assets/radar-rules.js @@ -1405,4 +1405,17 @@ }, ], }, + 'japanpost.jp': { + _name: '日本郵便', + 'trackings.post': [ + { + title: '郵便・荷物の追跡', + docs: 'https://docs.rsshub.app/other.html#ri-ben-you-bian', + source: '/services/srv/search/direct', + target: (params) => `/japanpost/${params.reqCode}/${params.locale}`, + script: "({reqCode: new URLSearchParams(location.search).get('reqCodeNo1').toUpperCase(), locale: new URLSearchParams(location.search).get('locale').toLowerCase()})", + verification: (params) => (params.reqCode.search(/^(?:\d{12}|[A-Z]{2}\d{9}[A-Z]{2})$/) === 0 && params.locale === 'ja') || params.locale === 'en', + }, + ], + }, }); diff --git a/docs/en/other.md b/docs/en/other.md index 870922d60..ebf8a9cae 100644 --- a/docs/en/other.md +++ b/docs/en/other.md @@ -71,7 +71,13 @@ pageClass: routes ### Track & Trace Service - + + +| Japanese | English | +| -------- | ------- | +| ja | en | + + ## Parcel Tracking diff --git a/docs/other.md b/docs/other.md index bf9f5cd74..5a341c46a 100644 --- a/docs/other.md +++ b/docs/other.md @@ -353,7 +353,13 @@ type 为 all 时,category 参数不支持 cost 和 free ### 郵便追跡サービス - + + +| 日语 | 英语 | +| ---- | ---- | +| ja | en | + + ## 上证债券信息网 diff --git a/lib/router.js b/lib/router.js index 7532d00af..c05b7ccda 100644 --- a/lib/router.js +++ b/lib/router.js @@ -1786,7 +1786,7 @@ router.get('/leboncoin/ad/:query', require('./routes/leboncoin/ad.js')); router.get('/dhl/:id', require('./routes/dhl/shipment-tracking')); // Japanpost -router.get('/japanpost/:reqCode', require('./routes/japanpost/index')); +router.get('/japanpost/:reqCode/:locale?', require('./routes/japanpost/index')); // 中华人民共和国商务部 router.get('/mofcom/article/:suffix', require('./routes/mofcom/article')); diff --git a/lib/routes/japanpost/index.js b/lib/routes/japanpost/index.js index eb4014909..f7d81c4c7 100644 --- a/lib/routes/japanpost/index.js +++ b/lib/routes/japanpost/index.js @@ -3,7 +3,7 @@ const cheerio = require('cheerio'); const utils = require('./utils'); const baseTitle = '日本郵便'; -const baseUrl = 'https://trackings.post.japanpost.jp/services/srv/search/direct?locale=ja&reqCodeNo1='; +const baseUrl = 'https://trackings.post.japanpost.jp/services/srv/search/direct?'; const util = new utils(); util.expandEven(); @@ -11,7 +11,20 @@ util.expandReverse(); module.exports = async (ctx) => { const reqCode = ctx.params.reqCode; - const link = baseUrl + reqCode; + const reqReqCode = 'reqCodeNo1=' + reqCode; + let locale; + switch (ctx.params.locale) { + case 'ja': + locale = 'ja'; + break; + case 'en': + locale = 'en'; + break; + default: + locale = 'ja'; + } + const reqLocale = '&locale=' + locale; + const link = baseUrl + reqReqCode + reqLocale; const response = await got({ method: 'get', @@ -43,21 +56,19 @@ module.exports = async (ctx) => { .map((index, item) => { item = $(item); const itemTd = item.find('td'); - const itemTitle = - itemTd - .eq(1) - .text() - .trim() + - ' ' + - itemTd - .eq(4) - .text() - .trim() + - ' ' + - itemTd - .eq(3) - .text() - .trim(); + const packageStatus = itemTd + .eq(1) + .text() + .trim(); + const packageRegion = itemTd + .eq(4) + .text() + .trim(); + const packageOffice = itemTd + .eq(3) + .text() + .trim(); + const itemTitle = `${packageStatus} ${packageRegion} ${packageOffice}`; const itemDescription = itemTd.eq(2).text(); const itemPubDateText = itemTd.eq(0).text(); const itemGuid = util.generateGuid(itemTitle + itemDescription + itemPubDateText);