Merge branch 'master' into greenkeeper/request-2.86.0

This commit is contained in:
syuilo 2018-08-09 23:19:53 +09:00 committed by GitHub
commit 01acef59be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 55 additions and 33 deletions

View File

@ -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

View File

@ -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「だが俺の主張も聞いてほしい! お漏らしさせるならありすが一番だ!」 日菜子「むふふ……いきなりそんなことを大声で', description: '1以下、名無しにかわりましてVIPがお送りします2013/03/30(土) 14:57:29.09 ID:An34eOmY0モバ「反論が あるやつもいるかもしれない」 モバ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'
} }

View File

@ -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"
} }

View File

@ -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
}; };
}; };

View File

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

View File

@ -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'
}; };
}; }

View File

@ -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,29 +8,33 @@ 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)}`;
log(`lang is ${lang}`); log(`lang is ${lang}`);
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);
const info = body.query.pages[Object.keys(body.query.pages)[0]];
res({ if (!('query' in body) || !('pages' in body.query)) {
title: info.title, throw 'fetch failed';
icon: 'https://wikipedia.org/static/favicon/wikipedia.ico', }
description: clip(info.extract, 300),
thumbnail: `https://wikipedia.org/static/images/project-logos/${lang}wiki.png`, const info = body.query.pages[Object.keys(body.query.pages)[0]];
sitename: 'Wikipedia'
}); return {
}); title: info.title,
}); icon: 'https://wikipedia.org/static/favicon/wikipedia.ico',
}; description: clip(info.extract, 300),
thumbnail: `https://wikipedia.org/static/images/project-logos/${lang}wiki.png`,
player: null,
sitename: 'Wikipedia'
};
}

View File

@ -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
*/ */