Skip to content

Commit

Permalink
feat: add google sites (DIYgod#4119)
Browse files Browse the repository at this point in the history
  • Loading branch information
hoilc authored Feb 29, 2020
1 parent 374ac85 commit a5e5522
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 0 deletions.
8 changes: 8 additions & 0 deletions assets/radar-rules.js
Original file line number Diff line number Diff line change
Expand Up @@ -1124,6 +1124,14 @@
script: "({id: document.querySelector('html').innerHTML.match(/photos.app.goo.gl\\/(.*?)\"/)[1]})",
},
],
sites: [
{
title: 'Sites',
docs: 'https://docs.rsshub.app/blog.html#google-sites',
source: ['/site/:id/*', '/site/:id'],
target: '/google/sites/:id',
},
],
},
'javlibrary.com': {
_name: 'javlibrary',
Expand Down
6 changes: 6 additions & 0 deletions docs/blog.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@ pageClass: routes

<Route author="kt286" example="/archdaily" path="/archdaily"/>

## Google Sites

### 文章更新

<Route author="hoilc" example="/google/sites/outlierseconomics" path="/google/sites/:id" :paramsDesc="['Site ID, 可在 URL 中找到']" radar="1" />

## Hexo

### Next 主题博客
Expand Down
6 changes: 6 additions & 0 deletions docs/en/blog.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@ pageClass: routes

<RouteEn author="kt286" example="/archdaily" path="/archdaily"/>

## Google Sites

### Articles

<RouteEn author="hoilc" example="/google/sites/outlierseconomics" path="/google/sites/:id" :paramsDesc="['Site ID, can be found in URL']" />

## Hexo Blog

### Blog using Next theme
Expand Down
1 change: 1 addition & 0 deletions lib/router.js
Original file line number Diff line number Diff line change
Expand Up @@ -476,6 +476,7 @@ router.get('/google/citations/:id', require('./routes/google/citations'));
router.get('/google/scholar/:query', require('./routes/google/scholar'));
router.get('/google/doodles/:language?', require('./routes/google/doodles'));
router.get('/google/album/:id', require('./routes/google/album'));
router.get('/google/sites/:id', require('./routes/google/sites'));

// Awesome Pigtals
router.get('/pigtails', require('./routes/pigtails'));
Expand Down
75 changes: 75 additions & 0 deletions lib/routes/google/sites.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');

const base = 'https://sites.google.com/';

module.exports = async (ctx) => {
const id = ctx.params.id;

const init_url = `https://sites.google.com/site/${id}/system/app/pages/sitemap/list?offset=0`;
const init_response = await got.get(init_url);

const test_pages_count = init_response.data.match(/'sites-pagination-next-link-top', (\d+),/);
if (!test_pages_count) {
throw 'Site Not Found';
}
const pages_count = parseInt(test_pages_count[1]);

const url = pages_count > 20 ? `https://sites.google.com/site/${id}/system/app/pages/sitemap/list?offset=${pages_count - 20}` : init_url;
const response = url === init_url ? init_response : await got.get(url);

const $ = cheerio.load(response.data);

const site_name = $('a#sites-chrome-userheader-title').text();
const list = $('.sites-table > tbody > tr').get();

const parseContent = async (htmlString) => {
const $ = cheerio.load(htmlString);

const content = $('#sites-canvas-main-content');

return {
description: content.html(),
};
};

const out = await Promise.all(
list.map(async (item, index) => {
const $ = cheerio.load(item);

const title = $('a');
const path = title.attr('href');
const link = base + path;
const time = new Date();
time.setMinutes(time.getMinutes() - pages_count + index);

const cache = await ctx.cache.get(link);
if (cache) {
return Promise.resolve(JSON.parse(cache));
}

const rssitem = {
title: title.text().trim(),
link: link,
pubDate: time,
author: site_name,
};

try {
const response = await got.get(link);
const result = await parseContent(response.data);
rssitem.description = result.description;
} catch (err) {
return Promise.resolve('');
}
ctx.cache.set(link, JSON.stringify(rssitem));
return Promise.resolve(rssitem);
})
);

ctx.state.data = {
title: `${site_name} - Google Sites`,
link: url,
item: out.filter((item) => item !== ''),
};
};

0 comments on commit a5e5522

Please sign in to comment.