Merge pull request #125 from acid-chicken/patch-1

Playerをオブジェクト化する
This commit is contained in:
syuilo 2018-08-17 23:01:52 +09:00 committed by GitHub
commit 3abc2b9191
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 87 additions and 8 deletions

View File

@ -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「だが俺の主張も聞いてほしい! お漏らしさせるならありすが一番だ!」 日菜子「むふふ……いきなりそんなことを大声で',
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'
}

View File

@ -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<Summary> => {
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<Summary> => {
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
};
};

4
src/package.json.d.ts vendored Normal file
View File

@ -0,0 +1,4 @@
declare module '*/package.json' {
export const name: string;
export const version: string;
}

View File

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

View File

@ -34,7 +34,11 @@ export async function summarize(url: URL.Url): Promise<summary> {
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'
};
}

View File

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