mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-05 12:21:31 +08:00
feat: add japanpost & fix: update joinus content (#2901)
This commit is contained in:
@@ -664,6 +664,12 @@ Supported sub-sites:
|
||||
|
||||
<RouteEn author="HenryQW" example="/allpoetry/newest" path="/allpoetry/:order?" :paramsDesc="['order by type, `best` or `newest`, default to `best`']"/>
|
||||
|
||||
### Japanpost
|
||||
|
||||
#### Track & Trace Service
|
||||
|
||||
<RouteEn author="tuzi3040" example="/japanpost/EJ123456789JP" path="/japanpost/:reqCode" :paramsDesc="['Package Number']"/>
|
||||
|
||||
## aptonic
|
||||
|
||||
### New Dropzone Actions
|
||||
|
||||
@@ -416,7 +416,7 @@ ctx.state.data = {
|
||||
|
||||
### 步骤 3: 添加脚本文档
|
||||
|
||||
1. 更新 [文档 (/docs/README.md) ](https://github.com/DIYgod/RSSHub/blob/master/docs/README.md), 可以执行 `npm run docs:dev` 查看文档效果
|
||||
1. 更新 [文档 (/docs/) ](https://github.com/DIYgod/RSSHub/blob/master/docs/) 目录内对应的文档, 可以执行 `npm run docs:dev` 查看文档效果
|
||||
|
||||
- 文档采用 vue 组件形式,格式如下:
|
||||
- `author`: 路由作者,多位作者使用单个空格分隔
|
||||
|
||||
@@ -849,6 +849,12 @@ type 为 all 时,category 参数不支持 cost 和 free
|
||||
|
||||
<Route author="Andiedie" example="/d2/daily" path="/d2/daily"/>
|
||||
|
||||
## 日本郵便
|
||||
|
||||
### 郵便追跡サービス
|
||||
|
||||
<Route author="tuzi3040" example="/japanpost/EJ123456789JP" path="/japanpost/:reqCode" :paramsDesc="['运单号']"/>
|
||||
|
||||
## 扇贝
|
||||
|
||||
### 打卡
|
||||
|
||||
@@ -1581,6 +1581,9 @@ router.get('/leboncoin/ad/:query', require('./routes/leboncoin/ad.js'));
|
||||
// DHL
|
||||
router.get('/dhl/:id', require('./routes/dhl/shipment-tracking'));
|
||||
|
||||
// Japanpost
|
||||
router.get('/japanpost/:reqCode', require('./routes/japanpost/index'));
|
||||
|
||||
// 中华人民共和国商务部
|
||||
router.get('/mofcom/article/:suffix', require('./routes/mofcom/article'));
|
||||
|
||||
|
||||
60
lib/routes/japanpost/index.js
Normal file
60
lib/routes/japanpost/index.js
Normal file
@@ -0,0 +1,60 @@
|
||||
const got = require('@/utils/got');
|
||||
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 util = new utils();
|
||||
util.expandEven();
|
||||
util.expandReverse();
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const reqCode = ctx.params.reqCode;
|
||||
const link = baseUrl + reqCode;
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: link,
|
||||
});
|
||||
|
||||
const $ = cheerio.load(response.data);
|
||||
const list = $('.tableType01')
|
||||
.eq(1)
|
||||
.find('tr')
|
||||
.slice(2);
|
||||
|
||||
const listEven = list.even();
|
||||
|
||||
const packageType = $('.tableType01')
|
||||
.eq(0)
|
||||
.find('tr')
|
||||
.eq(1)
|
||||
.find('td')
|
||||
.eq(1)
|
||||
.text();
|
||||
|
||||
ctx.state.data = {
|
||||
title: `${baseTitle} ${packageType} ${reqCode}`,
|
||||
link: link,
|
||||
description: 'Reserved for further development.',
|
||||
item: listEven
|
||||
.reverse()
|
||||
.map((index, item) => {
|
||||
item = $(item);
|
||||
const itemTd = item.find('td');
|
||||
const itemTitle = itemTd.eq(1).text() + ' ' + itemTd.eq(4).text() + ' ' + itemTd.eq(3).text();
|
||||
const itemDescription = itemTd.eq(2).text();
|
||||
const itemPubDateText = itemTd.eq(0).text();
|
||||
const itemGuid = util.generateGuid(itemDescription + itemPubDateText);
|
||||
return {
|
||||
title: itemTitle,
|
||||
description: itemDescription,
|
||||
pubDate: new Date(itemPubDateText),
|
||||
link: link,
|
||||
guid: itemGuid.slice(0, 32),
|
||||
};
|
||||
})
|
||||
.get(),
|
||||
};
|
||||
};
|
||||
48
lib/routes/japanpost/utils.js
Normal file
48
lib/routes/japanpost/utils.js
Normal file
@@ -0,0 +1,48 @@
|
||||
const cheerio = require('cheerio');
|
||||
const crypto = require('crypto');
|
||||
|
||||
function utils() {
|
||||
this.expandOdd = function() {
|
||||
cheerio.prototype.odd = function() {
|
||||
const odds = [];
|
||||
this.each(function(index, item) {
|
||||
if (index % 2 === 1) {
|
||||
odds.push(item);
|
||||
}
|
||||
});
|
||||
return cheerio(odds);
|
||||
};
|
||||
};
|
||||
|
||||
this.expandEven = function() {
|
||||
cheerio.prototype.even = function() {
|
||||
const evens = [];
|
||||
this.each(function(index, item) {
|
||||
if (index % 2 === 0) {
|
||||
evens.push(item);
|
||||
}
|
||||
});
|
||||
return cheerio(evens);
|
||||
};
|
||||
};
|
||||
|
||||
this.expandReverse = function() {
|
||||
cheerio.prototype.reverse = function() {
|
||||
const reverses = [];
|
||||
this.each(function(index, item) {
|
||||
reverses.push(item);
|
||||
});
|
||||
reverses.reverse();
|
||||
return cheerio(reverses);
|
||||
};
|
||||
};
|
||||
|
||||
this.generateGuid = function(t) {
|
||||
const hash = crypto.createHash('sha512');
|
||||
hash.update(t);
|
||||
const r = hash.digest('hex').toUpperCase();
|
||||
return r;
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = utils;
|
||||
Reference in New Issue
Block a user