diff --git a/CHANGELOG.md b/CHANGELOG.md index 147564e..773d7c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +2.0.6 / 2018-05-18 +------------------ +* Fix bug + 2.0.5 / 2018-05-18 ------------------ * Fix bug diff --git a/package.json b/package.json index b976179..ee6a084 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "summaly", - "version": "2.0.5", + "version": "2.0.6", "description": "Get web page's summary", "author": "syuilo ", "license": "MIT", @@ -19,6 +19,7 @@ "@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" @@ -29,6 +30,7 @@ "escape-regexp": "0.0.1", "html-entities": "1.2.1", "request": "2.85.0", + "request-promise-native": "1.0.5", "require-all": "2.2.0", "trace-redirect": "1.0.6" } diff --git a/src/plugins/amazon.ts b/src/plugins/amazon.ts index 32d232d..249d462 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); @@ -41,4 +41,4 @@ export async function summarize(url: URL.Url): Promise { thumbnail: thumbnail || null, sitename: 'Amazon' }; -}; +} diff --git a/src/plugins/wikipedia.ts b/src/plugins/wikipedia.ts index 9d6ce13..b969f4c 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,32 @@ 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`, + sitename: 'Wikipedia' + }; +}