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);