diff --git a/CHANGELOG.md b/CHANGELOG.md index 712796c..773d7c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 ------------------ * Dependencies update diff --git a/README.md b/README.md index 653a022..6428d4b 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ A Promise of an Object that contains properties below: | **icon** | *string* | The url of the icon of the web page | | **sitename** | *string* | The name of the web site | | **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 | | **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', 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', + player: null sitename: 'エレファント速報:SSまとめブログ', url: 'http://elephant.2chblog.jp/archives/52025138.html' } diff --git a/package.json b/package.json index f5e780d..2a95a49 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "summaly", - "version": "2.0.4", + "version": "2.0.6", "description": "Get web page's summary", "author": "syuilo ", "license": "MIT", @@ -19,16 +19,18 @@ "@types/mocha": "5.0.0", "@types/request": "2.47.0", "@types/node": "9.6.5", + "@types/request-promise-native": "1.0.14", "express": "4.16.3", "typescript": "2.8.1", "mocha": "5.1.0" }, "dependencies": { - "cheerio-httpcli": "0.7.2", + "cheerio-httpcli": "0.7.3", "debug": "3.1.0", "escape-regexp": "0.0.1", "html-entities": "1.2.1", "request": "2.86.0", + "request-promise-native": "1.0.5", "require-all": "2.2.0", "trace-redirect": "1.0.6" } diff --git a/src/general.ts b/src/general.ts index 2148cf7..f3dec8a 100644 --- a/src/general.ts +++ b/src/general.ts @@ -49,6 +49,9 @@ export default async (url: URL.Url): Promise => { image = image ? URL.resolve(url.href, image) : null; + const player = + $('meta[property="twitter:player"]').attr('content'); + let description = $('meta[property="og:description"]').attr('content') || $('meta[property="twitter:description"]').attr('content') || @@ -118,6 +121,7 @@ export default async (url: URL.Url): Promise => { icon: icon || null, description: description || null, thumbnail: image || null, + player: player || null, sitename: siteName || null }; }; diff --git a/src/index.ts b/src/index.ts index f73244b..24d3b2a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -44,17 +44,13 @@ const defaultOptions = { /** * Summarize an web page - * @param {string} url URL of web page you want to summarize - * @param {Options?} options The options - * @return {Promise} Promised summary */ export default async (url: string, options?: Options): Promise => { const opts = Object.assign(defaultOptions, options); const plugins = builtinPlugins.concat(opts.plugins || []); - // Follow redirects - const actualUrl = opts.followRedirects ? await tracer(url) : url; + const actualUrl = opts.followRedirects ? await tracer(url).catch(() => url) : url; const _url = URL.parse(actualUrl, true); diff --git a/src/plugins/amazon.ts b/src/plugins/amazon.ts index 32d232d..39d8db8 100644 --- a/src/plugins/amazon.ts +++ b/src/plugins/amazon.ts @@ -20,7 +20,7 @@ export function test(url: URL.Url): boolean { url.hostname === 'www.amazon.cn' || url.hostname === 'www.amazon.in' || url.hostname === 'www.amazon.au'; -}; +} export async function summarize(url: URL.Url): Promise { const res = await client.fetch(url.href); @@ -39,6 +39,7 @@ export async function summarize(url: URL.Url): Promise { icon: 'https://www.amazon.com/favicon.ico', description: description || null, thumbnail: thumbnail || null, + player: null, sitename: 'Amazon' }; -}; +} diff --git a/src/plugins/wikipedia.ts b/src/plugins/wikipedia.ts index 9d6ce13..fc36d1c 100644 --- a/src/plugins/wikipedia.ts +++ b/src/plugins/wikipedia.ts @@ -1,5 +1,5 @@ import * as URL from 'url'; -import * as request from 'request'; +import * as request from 'request-promise-native'; import * as debug from 'debug'; import summary from '../summary'; import clip from './../utils/clip'; @@ -8,29 +8,33 @@ const log = debug('summaly:plugins:wikipedia'); export function test(url: URL.Url): boolean { return /\.wikipedia\.org$/.test(url.hostname); -}; +} -export function summarize(url: URL.Url): Promise { - return new Promise((res, rej) => { - const lang = url.host.split('.')[0]; - 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)}`; +export async function summarize(url: URL.Url): Promise { + const lang = url.host.split('.')[0]; + 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)}`; - log(`lang is ${lang}`); - log(`title is ${title}`); - log(`endpoint is ${endpoint}`); + log(`lang is ${lang}`); + log(`title is ${title}`); + log(`endpoint is ${endpoint}`); - request(endpoint, (err, _, body) => { - log(body); - body = JSON.parse(body); - const info = body.query.pages[Object.keys(body.query.pages)[0]]; - res({ - 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`, - sitename: 'Wikipedia' - }); - }); - }); -}; + let body = await request(endpoint); + 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]]; + + 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' + }; +} diff --git a/src/summary.ts b/src/summary.ts index b40b616..2a2cb87 100644 --- a/src/summary.ts +++ b/src/summary.ts @@ -19,6 +19,11 @@ type Summary = { */ thumbnail: string; + /** + * The url of the player of that web page + */ + player: string; + /** * The title of that web page */