diff --git a/README.md b/README.md index 6428d4b..f9f476a 100644 --- a/README.md +++ b/README.md @@ -24,12 +24,14 @@ summaly(url[, opts]) ``` ### Options + | Property | Type | Description | Default | | :------------------ | :--------------------- | :----------------------- | :------ | | **followRedirects** | *boolean* | Whether follow redirects | `true` | | **plugins** | *plugin[]* (see below) | Custom plugins | `null` | #### Plugin + ``` typescript interface IPlugin { test: (url: URL.Url) => boolean; @@ -38,19 +40,31 @@ interface IPlugin { ``` ### Returns + A Promise of an Object that contains properties below: +#### Root + | Property | Type | Description | | :-------------- | :------- | :--------------------------------------- | | **description** | *string* | The description of the web page | | **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 | +| **player** | *Player* | The player of the web page | | **title** | *string* | The title of the web page | | **url** | *string* | The url of the web page | +#### Player + +| Property | Type | Description | +| :-------------- | :------- | :--------------------------------------- | +| **url** | *string* | The url of the player | +| **width** | *number* | The width of the player | +| **height** | *number* | The height of the player | + ### Example + ``` javascript import summaly from 'summaly'; @@ -63,7 +77,11 @@ 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 + player: { + url: null, + width: null, + height: null + } sitename: 'エレファント速報:SSまとめブログ', url: 'http://elephant.2chblog.jp/archives/52025138.html' } diff --git a/src/general.ts b/src/general.ts index caa1de3..ec2c2ad 100644 --- a/src/general.ts +++ b/src/general.ts @@ -1,3 +1,4 @@ +import { name, version } from '../package.json'; import * as URL from 'url'; import * as request from 'request'; import nullOrEmpty from './utils/null-or-empty'; @@ -8,6 +9,9 @@ import { AllHtmlEntities } from 'html-entities'; const entities = new AllHtmlEntities(); import * as client from 'cheerio-httpcli'; +client.set('headers', { + 'User-Agent': `${name}/${version}` +}); client.set('referer', false); client.set('timeout', 10000); client.set('maxDataSize', 1024 * 1024); @@ -50,10 +54,18 @@ export default async (url: URL.Url): Promise => { image = image ? URL.resolve(url.href, image) : null; - const player = + const playerUrl = $('meta[property="twitter:player"]').attr('content') || $('meta[name="twitter:player"]').attr('content'); + const playerWidth = parseInt( + $('meta[property="twitter:player:width"]').attr('content') || + $('meta[name="twitter:player:width"]').attr('content')); + + const playerHeight = parseInt( + $('meta[property="twitter:player:height"]').attr('content') || + $('meta[name="twitter:player:height"]').attr('content')); + let description = $('meta[property="og:description"]').attr('content') || $('meta[property="twitter:description"]').attr('content') || @@ -123,7 +135,11 @@ export default async (url: URL.Url): Promise => { icon: icon || null, description: description || null, thumbnail: image || null, - player: player || null, + player: { + url: playerUrl || null, + width: playerWidth || null, + height: playerHeight || null + }, sitename: siteName || null }; }; diff --git a/src/package.json.d.ts b/src/package.json.d.ts new file mode 100644 index 0000000..7a3ac8e --- /dev/null +++ b/src/package.json.d.ts @@ -0,0 +1,4 @@ +declare module '*/package.json' { + export const name: string; + export const version: string; +} diff --git a/src/plugins/amazon.ts b/src/plugins/amazon.ts index 39d8db8..cdaf894 100644 --- a/src/plugins/amazon.ts +++ b/src/plugins/amazon.ts @@ -1,7 +1,11 @@ +import { name, version } from '../../package.json'; import * as URL from 'url'; import * as client from 'cheerio-httpcli'; import summary from '../summary'; +client.set('headers', { + 'User-Agent': `${name}/${version}` +}); client.set('referer', false); client.set('timeout', 10000); @@ -34,12 +38,28 @@ export async function summarize(url: URL.Url): Promise { const thumbnail: string = $('#landingImage').attr('src'); + const playerUrl = + $('meta[property="twitter:player"]').attr('content') || + $('meta[name="twitter:player"]').attr('content'); + + const playerWidth = parseInt( + $('meta[property="twitter:player:width"]').attr('content') || + $('meta[name="twitter:player:width"]').attr('content')); + + const playerHeight = parseInt( + $('meta[property="twitter:player:height"]').attr('content') || + $('meta[name="twitter:player:height"]').attr('content')); + return { title: title || null, icon: 'https://www.amazon.com/favicon.ico', description: description || null, thumbnail: thumbnail || null, - player: null, + player: { + url: playerUrl || null, + width: playerWidth || null, + height: playerHeight || null + }, sitename: 'Amazon' }; } diff --git a/src/plugins/wikipedia.ts b/src/plugins/wikipedia.ts index 7ccd56e..c24a5e4 100644 --- a/src/plugins/wikipedia.ts +++ b/src/plugins/wikipedia.ts @@ -34,7 +34,11 @@ export async function summarize(url: URL.Url): Promise { 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, + player: { + url: null, + width: null, + height: null + }, sitename: 'Wikipedia' }; } diff --git a/src/summary.ts b/src/summary.ts index 2a2cb87..0eec20e 100644 --- a/src/summary.ts +++ b/src/summary.ts @@ -20,9 +20,9 @@ type Summary = { thumbnail: string; /** - * The url of the player of that web page + * The player of that web page */ - player: string; + player: Player; /** * The title of that web page @@ -31,3 +31,20 @@ type Summary = { }; export default Summary; + +export type Player = { + /** + * The url of the player + */ + url: string; + + /** + * The width of the player + */ + width: number; + + /** + * The height of the player + */ + height: number; +};