Feat: detect platforms (#52)
Detectors for matching extractors for publishing platforms. Currently supporting Medium and Blogger.pull/53/head
parent
64c0fad2fd
commit
2fb47640f2
@ -0,0 +1,15 @@
|
||||
import {
|
||||
MediumExtractor,
|
||||
BloggerExtractor,
|
||||
} from './custom/';
|
||||
|
||||
const Detectors = {
|
||||
'meta[name="al:ios:app_name"][value="Medium"]': MediumExtractor,
|
||||
'meta[name="generator"][value="blogger"]': BloggerExtractor,
|
||||
};
|
||||
|
||||
export default function detectByHtml($) {
|
||||
const selector = Reflect.ownKeys(Detectors).find(s => $(s).length > 0);
|
||||
|
||||
return Detectors[selector];
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
import assert from 'assert';
|
||||
import cheerio from 'cheerio';
|
||||
|
||||
import detectByHtml from './detect-by-html';
|
||||
|
||||
describe('detectByHtml', () => {
|
||||
it('detects a medium post from the html', () => {
|
||||
const html =
|
||||
'<head><meta name="al:ios:app_name" value="Medium" /></head>';
|
||||
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
assert.equal(detectByHtml($).domain, 'medium.com');
|
||||
});
|
||||
|
||||
it('returns nothing if no match is found', () => {
|
||||
const html =
|
||||
'<div></div>';
|
||||
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
assert.equal(detectByHtml($), null);
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue