mirror of
https://github.com/misskey-dev/summaly.git
synced 2025-05-10 16:17:23 +09:00
Merge branch 'master' into greenkeeper/request-2.86.0
This commit is contained in:
commit
01acef59be
@ -1,3 +1,11 @@
|
|||||||
|
2.0.6 / 2018-05-18
|
||||||
|
------------------
|
||||||
|
* Fix bug
|
||||||
|
|
||||||
|
2.0.5 / 2018-05-18
|
||||||
|
------------------
|
||||||
|
* Fix bug
|
||||||
|
|
||||||
2.0.4 / 2018-04-18
|
2.0.4 / 2018-04-18
|
||||||
------------------
|
------------------
|
||||||
* Dependencies update
|
* Dependencies update
|
||||||
|
@ -46,6 +46,7 @@ A Promise of an Object that contains properties below:
|
|||||||
| **icon** | *string* | The url of the icon of the web page |
|
| **icon** | *string* | The url of the icon of the web page |
|
||||||
| **sitename** | *string* | The name of the web site |
|
| **sitename** | *string* | The name of the web site |
|
||||||
| **thumbnail** | *string* | The url of the thumbnail of the web page |
|
| **thumbnail** | *string* | The url of the thumbnail of the web page |
|
||||||
|
| **player** | *string* | The url of the player of the web page |
|
||||||
| **title** | *string* | The title of the web page |
|
| **title** | *string* | The title of the web page |
|
||||||
| **url** | *string* | The url of the web page |
|
| **url** | *string* | The url of the web page |
|
||||||
|
|
||||||
@ -62,6 +63,7 @@ console.log(summary); // will be ... ↓
|
|||||||
icon: 'http://livedoor.blogimg.jp/tmg24news/imgs/9/5/favicon.ico',
|
icon: 'http://livedoor.blogimg.jp/tmg24news/imgs/9/5/favicon.ico',
|
||||||
description: '1:以下、名無しにかわりましてVIPがお送りします:2013/03/30(土) 14:57:29.09 ID:An34eOmY0モバP「反論が あるやつもいるかもしれない」 モバP「だが俺の主張も聞いてほしい! お漏らしさせるならありすが一番だ!」 日菜子「むふふ……いきなりそんなことを大声で',
|
description: '1:以下、名無しにかわりましてVIPがお送りします:2013/03/30(土) 14:57:29.09 ID:An34eOmY0モバP「反論が あるやつもいるかもしれない」 モバP「だが俺の主張も聞いてほしい! お漏らしさせるならありすが一番だ!」 日菜子「むふふ……いきなりそんなことを大声で',
|
||||||
thumbnail: 'http://livedoor.blogimg.jp/tmg24news/imgs/8/d/8df6e1a0-s.jpg',
|
thumbnail: 'http://livedoor.blogimg.jp/tmg24news/imgs/8/d/8df6e1a0-s.jpg',
|
||||||
|
player: null
|
||||||
sitename: 'エレファント速報:SSまとめブログ',
|
sitename: 'エレファント速報:SSまとめブログ',
|
||||||
url: 'http://elephant.2chblog.jp/archives/52025138.html'
|
url: 'http://elephant.2chblog.jp/archives/52025138.html'
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "summaly",
|
"name": "summaly",
|
||||||
"version": "2.0.4",
|
"version": "2.0.6",
|
||||||
"description": "Get web page's summary",
|
"description": "Get web page's summary",
|
||||||
"author": "syuilo <i@syuilo.com>",
|
"author": "syuilo <i@syuilo.com>",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@ -19,16 +19,18 @@
|
|||||||
"@types/mocha": "5.0.0",
|
"@types/mocha": "5.0.0",
|
||||||
"@types/request": "2.47.0",
|
"@types/request": "2.47.0",
|
||||||
"@types/node": "9.6.5",
|
"@types/node": "9.6.5",
|
||||||
|
"@types/request-promise-native": "1.0.14",
|
||||||
"express": "4.16.3",
|
"express": "4.16.3",
|
||||||
"typescript": "2.8.1",
|
"typescript": "2.8.1",
|
||||||
"mocha": "5.1.0"
|
"mocha": "5.1.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cheerio-httpcli": "0.7.2",
|
"cheerio-httpcli": "0.7.3",
|
||||||
"debug": "3.1.0",
|
"debug": "3.1.0",
|
||||||
"escape-regexp": "0.0.1",
|
"escape-regexp": "0.0.1",
|
||||||
"html-entities": "1.2.1",
|
"html-entities": "1.2.1",
|
||||||
"request": "2.86.0",
|
"request": "2.86.0",
|
||||||
|
"request-promise-native": "1.0.5",
|
||||||
"require-all": "2.2.0",
|
"require-all": "2.2.0",
|
||||||
"trace-redirect": "1.0.6"
|
"trace-redirect": "1.0.6"
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,9 @@ export default async (url: URL.Url): Promise<Summary> => {
|
|||||||
|
|
||||||
image = image ? URL.resolve(url.href, image) : null;
|
image = image ? URL.resolve(url.href, image) : null;
|
||||||
|
|
||||||
|
const player =
|
||||||
|
$('meta[property="twitter:player"]').attr('content');
|
||||||
|
|
||||||
let description =
|
let description =
|
||||||
$('meta[property="og:description"]').attr('content') ||
|
$('meta[property="og:description"]').attr('content') ||
|
||||||
$('meta[property="twitter:description"]').attr('content') ||
|
$('meta[property="twitter:description"]').attr('content') ||
|
||||||
@ -118,6 +121,7 @@ export default async (url: URL.Url): Promise<Summary> => {
|
|||||||
icon: icon || null,
|
icon: icon || null,
|
||||||
description: description || null,
|
description: description || null,
|
||||||
thumbnail: image || null,
|
thumbnail: image || null,
|
||||||
|
player: player || null,
|
||||||
sitename: siteName || null
|
sitename: siteName || null
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -44,17 +44,13 @@ const defaultOptions = {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Summarize an web page
|
* Summarize an web page
|
||||||
* @param {string} url URL of web page you want to summarize
|
|
||||||
* @param {Options?} options The options
|
|
||||||
* @return {Promise<Result>} Promised summary
|
|
||||||
*/
|
*/
|
||||||
export default async (url: string, options?: Options): Promise<Result> => {
|
export default async (url: string, options?: Options): Promise<Result> => {
|
||||||
const opts = Object.assign(defaultOptions, options);
|
const opts = Object.assign(defaultOptions, options);
|
||||||
|
|
||||||
const plugins = builtinPlugins.concat(opts.plugins || []);
|
const plugins = builtinPlugins.concat(opts.plugins || []);
|
||||||
|
|
||||||
// Follow redirects
|
const actualUrl = opts.followRedirects ? await tracer(url).catch(() => url) : url;
|
||||||
const actualUrl = opts.followRedirects ? await tracer(url) : url;
|
|
||||||
|
|
||||||
const _url = URL.parse(actualUrl, true);
|
const _url = URL.parse(actualUrl, true);
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ export function test(url: URL.Url): boolean {
|
|||||||
url.hostname === 'www.amazon.cn' ||
|
url.hostname === 'www.amazon.cn' ||
|
||||||
url.hostname === 'www.amazon.in' ||
|
url.hostname === 'www.amazon.in' ||
|
||||||
url.hostname === 'www.amazon.au';
|
url.hostname === 'www.amazon.au';
|
||||||
};
|
}
|
||||||
|
|
||||||
export async function summarize(url: URL.Url): Promise<summary> {
|
export async function summarize(url: URL.Url): Promise<summary> {
|
||||||
const res = await client.fetch(url.href);
|
const res = await client.fetch(url.href);
|
||||||
@ -39,6 +39,7 @@ export async function summarize(url: URL.Url): Promise<summary> {
|
|||||||
icon: 'https://www.amazon.com/favicon.ico',
|
icon: 'https://www.amazon.com/favicon.ico',
|
||||||
description: description || null,
|
description: description || null,
|
||||||
thumbnail: thumbnail || null,
|
thumbnail: thumbnail || null,
|
||||||
|
player: null,
|
||||||
sitename: 'Amazon'
|
sitename: 'Amazon'
|
||||||
};
|
};
|
||||||
};
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import * as URL from 'url';
|
import * as URL from 'url';
|
||||||
import * as request from 'request';
|
import * as request from 'request-promise-native';
|
||||||
import * as debug from 'debug';
|
import * as debug from 'debug';
|
||||||
import summary from '../summary';
|
import summary from '../summary';
|
||||||
import clip from './../utils/clip';
|
import clip from './../utils/clip';
|
||||||
@ -8,10 +8,9 @@ const log = debug('summaly:plugins:wikipedia');
|
|||||||
|
|
||||||
export function test(url: URL.Url): boolean {
|
export function test(url: URL.Url): boolean {
|
||||||
return /\.wikipedia\.org$/.test(url.hostname);
|
return /\.wikipedia\.org$/.test(url.hostname);
|
||||||
};
|
}
|
||||||
|
|
||||||
export function summarize(url: URL.Url): Promise<summary> {
|
export async function summarize(url: URL.Url): Promise<summary> {
|
||||||
return new Promise((res, rej) => {
|
|
||||||
const lang = url.host.split('.')[0];
|
const lang = url.host.split('.')[0];
|
||||||
const title = url.pathname.split('/')[2];
|
const title = url.pathname.split('/')[2];
|
||||||
const endpoint = `https://${lang}.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext=&titles=${encodeURIComponent(title)}`;
|
const endpoint = `https://${lang}.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext=&titles=${encodeURIComponent(title)}`;
|
||||||
@ -20,17 +19,22 @@ export function summarize(url: URL.Url): Promise<summary> {
|
|||||||
log(`title is ${title}`);
|
log(`title is ${title}`);
|
||||||
log(`endpoint is ${endpoint}`);
|
log(`endpoint is ${endpoint}`);
|
||||||
|
|
||||||
request(endpoint, (err, _, body) => {
|
let body = await request(endpoint);
|
||||||
log(body);
|
|
||||||
body = JSON.parse(body);
|
body = JSON.parse(body);
|
||||||
|
log(body);
|
||||||
|
|
||||||
|
if (!('query' in body) || !('pages' in body.query)) {
|
||||||
|
throw 'fetch failed';
|
||||||
|
}
|
||||||
|
|
||||||
const info = body.query.pages[Object.keys(body.query.pages)[0]];
|
const info = body.query.pages[Object.keys(body.query.pages)[0]];
|
||||||
res({
|
|
||||||
|
return {
|
||||||
title: info.title,
|
title: info.title,
|
||||||
icon: 'https://wikipedia.org/static/favicon/wikipedia.ico',
|
icon: 'https://wikipedia.org/static/favicon/wikipedia.ico',
|
||||||
description: clip(info.extract, 300),
|
description: clip(info.extract, 300),
|
||||||
thumbnail: `https://wikipedia.org/static/images/project-logos/${lang}wiki.png`,
|
thumbnail: `https://wikipedia.org/static/images/project-logos/${lang}wiki.png`,
|
||||||
|
player: null,
|
||||||
sitename: 'Wikipedia'
|
sitename: 'Wikipedia'
|
||||||
});
|
};
|
||||||
});
|
}
|
||||||
});
|
|
||||||
};
|
|
||||||
|
@ -19,6 +19,11 @@ type Summary = {
|
|||||||
*/
|
*/
|
||||||
thumbnail: string;
|
thumbnail: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The url of the player of that web page
|
||||||
|
*/
|
||||||
|
player: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The title of that web page
|
* The title of that web page
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user