mirror of
https://github.com/misskey-dev/summaly.git
synced 2025-05-21 21:47:18 +09:00
commit
3abc2b9191
22
README.md
22
README.md
@ -24,12 +24,14 @@ summaly(url[, opts])
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Options
|
### Options
|
||||||
|
|
||||||
| Property | Type | Description | Default |
|
| Property | Type | Description | Default |
|
||||||
| :------------------ | :--------------------- | :----------------------- | :------ |
|
| :------------------ | :--------------------- | :----------------------- | :------ |
|
||||||
| **followRedirects** | *boolean* | Whether follow redirects | `true` |
|
| **followRedirects** | *boolean* | Whether follow redirects | `true` |
|
||||||
| **plugins** | *plugin[]* (see below) | Custom plugins | `null` |
|
| **plugins** | *plugin[]* (see below) | Custom plugins | `null` |
|
||||||
|
|
||||||
#### Plugin
|
#### Plugin
|
||||||
|
|
||||||
``` typescript
|
``` typescript
|
||||||
interface IPlugin {
|
interface IPlugin {
|
||||||
test: (url: URL.Url) => boolean;
|
test: (url: URL.Url) => boolean;
|
||||||
@ -38,19 +40,31 @@ interface IPlugin {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Returns
|
### Returns
|
||||||
|
|
||||||
A Promise of an Object that contains properties below:
|
A Promise of an Object that contains properties below:
|
||||||
|
|
||||||
|
#### Root
|
||||||
|
|
||||||
| Property | Type | Description |
|
| Property | Type | Description |
|
||||||
| :-------------- | :------- | :--------------------------------------- |
|
| :-------------- | :------- | :--------------------------------------- |
|
||||||
| **description** | *string* | The description of the web page |
|
| **description** | *string* | The description of the web page |
|
||||||
| **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 |
|
| **player** | *Player* | 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 |
|
||||||
|
|
||||||
|
#### 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
|
### Example
|
||||||
|
|
||||||
``` javascript
|
``` javascript
|
||||||
import summaly from 'summaly';
|
import summaly from 'summaly';
|
||||||
|
|
||||||
@ -63,7 +77,11 @@ 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「反論が あるやつもいるかもしれない」 モバP「だが俺の主張も聞いてほしい! お漏らしさせるならありすが一番だ!」 日菜子「むふふ……いきなりそんなことを大声で',
|
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',
|
thumbnail: 'http://livedoor.blogimg.jp/tmg24news/imgs/8/d/8df6e1a0-s.jpg',
|
||||||
player: null
|
player: {
|
||||||
|
url: null,
|
||||||
|
width: null,
|
||||||
|
height: null
|
||||||
|
}
|
||||||
sitename: 'エレファント速報:SSまとめブログ',
|
sitename: 'エレファント速報:SSまとめブログ',
|
||||||
url: 'http://elephant.2chblog.jp/archives/52025138.html'
|
url: 'http://elephant.2chblog.jp/archives/52025138.html'
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { name, version } from '../package.json';
|
||||||
import * as URL from 'url';
|
import * as URL from 'url';
|
||||||
import * as request from 'request';
|
import * as request from 'request';
|
||||||
import nullOrEmpty from './utils/null-or-empty';
|
import nullOrEmpty from './utils/null-or-empty';
|
||||||
@ -8,6 +9,9 @@ import { AllHtmlEntities } from 'html-entities';
|
|||||||
const entities = new AllHtmlEntities();
|
const entities = new AllHtmlEntities();
|
||||||
|
|
||||||
import * as client from 'cheerio-httpcli';
|
import * as client from 'cheerio-httpcli';
|
||||||
|
client.set('headers', {
|
||||||
|
'User-Agent': `${name}/${version}`
|
||||||
|
});
|
||||||
client.set('referer', false);
|
client.set('referer', false);
|
||||||
client.set('timeout', 10000);
|
client.set('timeout', 10000);
|
||||||
client.set('maxDataSize', 1024 * 1024);
|
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;
|
image = image ? URL.resolve(url.href, image) : null;
|
||||||
|
|
||||||
const player =
|
const playerUrl =
|
||||||
$('meta[property="twitter:player"]').attr('content') ||
|
$('meta[property="twitter:player"]').attr('content') ||
|
||||||
$('meta[name="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 =
|
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') ||
|
||||||
@ -123,7 +135,11 @@ 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,
|
player: {
|
||||||
|
url: playerUrl || null,
|
||||||
|
width: playerWidth || null,
|
||||||
|
height: playerHeight || null
|
||||||
|
},
|
||||||
sitename: siteName || null
|
sitename: siteName || null
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
4
src/package.json.d.ts
vendored
Normal file
4
src/package.json.d.ts
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
declare module '*/package.json' {
|
||||||
|
export const name: string;
|
||||||
|
export const version: string;
|
||||||
|
}
|
@ -1,7 +1,11 @@
|
|||||||
|
import { name, version } from '../../package.json';
|
||||||
import * as URL from 'url';
|
import * as URL from 'url';
|
||||||
import * as client from 'cheerio-httpcli';
|
import * as client from 'cheerio-httpcli';
|
||||||
import summary from '../summary';
|
import summary from '../summary';
|
||||||
|
|
||||||
|
client.set('headers', {
|
||||||
|
'User-Agent': `${name}/${version}`
|
||||||
|
});
|
||||||
client.set('referer', false);
|
client.set('referer', false);
|
||||||
client.set('timeout', 10000);
|
client.set('timeout', 10000);
|
||||||
|
|
||||||
@ -34,12 +38,28 @@ export async function summarize(url: URL.Url): Promise<summary> {
|
|||||||
|
|
||||||
const thumbnail: string = $('#landingImage').attr('src');
|
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 {
|
return {
|
||||||
title: title || null,
|
title: title || null,
|
||||||
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,
|
player: {
|
||||||
|
url: playerUrl || null,
|
||||||
|
width: playerWidth || null,
|
||||||
|
height: playerHeight || null
|
||||||
|
},
|
||||||
sitename: 'Amazon'
|
sitename: 'Amazon'
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,11 @@ export async function summarize(url: URL.Url): Promise<summary> {
|
|||||||
icon: 'https://wikipedia.org/static/favicon/wikipedia.ico',
|
icon: 'https://wikipedia.org/static/favicon/wikipedia.ico',
|
||||||
description: clip(info.extract, 300),
|
description: clip(info.extract, 300),
|
||||||
thumbnail: `https://wikipedia.org/static/images/project-logos/${lang}wiki.png`,
|
thumbnail: `https://wikipedia.org/static/images/project-logos/${lang}wiki.png`,
|
||||||
player: null,
|
player: {
|
||||||
|
url: null,
|
||||||
|
width: null,
|
||||||
|
height: null
|
||||||
|
},
|
||||||
sitename: 'Wikipedia'
|
sitename: 'Wikipedia'
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -20,9 +20,9 @@ type Summary = {
|
|||||||
thumbnail: string;
|
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
|
* The title of that web page
|
||||||
@ -31,3 +31,20 @@ type Summary = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export default 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;
|
||||||
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user