feat(route): sony software downloads (#12046)

* feat(route): sony software downloads

* Update lib/v2/sony/downloads.js

* chore: use map instead of forEach, delete description

---------
This commit is contained in:
Evan
2023-03-07 21:31:25 +08:00
committed by GitHub
parent 569c630ca6
commit c8f06fe493
7 changed files with 99 additions and 0 deletions
+15
View File
@@ -489,6 +489,21 @@ See [#nintendo](/game.html#nintendo)
<RouteEn author="Jeason0228" example="/sketch/updates" path="/sketch/updates" />
## Sony
### Software Downloads
<RouteEn author="NavePnow" example="/sony/downloads/product/nw-wm1am2" path="/sony/downloads/:productType/:productId" :paramsDesc="['product type', 'product id']">
::: tip
Open `https://www.sony.com/electronics/support` and search for the corresponding product, such as `Sony A7M4`, the website corresponding to which is `https://www.sony.com/electronics/support/e-mount-body-ilce-7-series/ilce-7m4/downloads`, where `productType` is `e-mount-body-ilce-7-series` and `productId` is `ilce-7m4`.
:::
</RouteEn>
## Thunderbird
### Changelog
+14
View File
@@ -572,6 +572,20 @@ Logseq 开发团队已经放弃了 [旧网站](https://logseq.com/blog)。
<Route author="Jeason0228" example="/sketch/updates" path="/sketch/updates" />
## Sony
### Software Downloads
<Route author="NavePnow" example="/sony/downloads/product/nw-wm1am2" path="/sony/downloads/:productType/:productId" :paramsDesc="['产品类别', '产品Id']">
::: tip 提示
打开 `https://www.sony.com/electronics/support` 并搜索对应的产品,比如 `Sony A7M4` 对应的网站是 `https://www.sony.com/electronics/support/e-mount-body-ilce-7-series/ilce-7m4/downloads`,`productType` 为 `e-mount-body-ilce-7-series`, `productId` 为 `ilce-7m4`
:::
</Route>
## Thunderbird
### 更新日志
+47
View File
@@ -0,0 +1,47 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
const host = 'https://www.sony.com';
module.exports = async (ctx) => {
const { productType, productId } = ctx.params;
const url = `${host}/electronics/support/${productType}/${productId}/downloads`;
const response = await got({
method: 'get',
url,
});
const data = response.data;
const $ = cheerio.load(data);
const contents = $('script:contains("window.__PRELOADED_STATE__.downloads")').text();
const regex = /window\.__PRELOADED_STATE__\.downloads\s*=\s*({.*?});\s*window\.__PRELOADED_STATE__/s;
const match = contents.match(regex);
let results = {};
if (match) {
results = JSON.parse(match[1]).searchResults.results;
}
const list = results.map((item) => {
const data = {};
data.title = item.title;
data.pubDate = item.publicationDate;
const url = item.url;
if (url.startsWith('http')) {
data.url = url;
} else if (url.startsWith('//')) {
data.url = 'https:' + url;
} else {
data.url = host + url;
}
return data;
});
ctx.state.data = {
title: `Sony - ${productId.toUpperCase()}`,
link: url,
description: `Sony - ${productId.toUpperCase()}`,
item: list.map((item) => ({
title: item.title,
link: item.url,
pubDate: item.pubDate,
})),
};
};
+3
View File
@@ -0,0 +1,3 @@
module.exports = {
'/downloads/:productType/:productId': ['NavePnow'],
};
+13
View File
@@ -0,0 +1,13 @@
module.exports = {
'sony.com': {
_name: 'Sony',
'.': [
{
title: 'Software Downloads',
docs: 'https://docs.rsshub.app/program-update.html#sony',
source: ['/electronics/support/:productType/:productId/downloads'],
target: '/sony/downloads/:productType/:productId',
},
],
},
};
+3
View File
@@ -0,0 +1,3 @@
module.exports = function (router) {
router.get('/downloads/:productType/:productId', require('./downloads'));
};
@@ -0,0 +1,4 @@
<div>
<br><br>
Release Date: {{ item.pubDate }}
</div>