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
|
||||
|
||||
| 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'
|
||||
}
|
||||
|
@ -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
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 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'
|
||||
};
|
||||
}
|
||||
|
@ -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'
|
||||
};
|
||||
}
|
||||
|
@ -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;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user