From 3f1d9030eec08fc2e8dad811e4e11158f4f5c8d5 Mon Sep 17 00:00:00 2001 From: kik0220 <4346449+kik0220@users.noreply.github.com> Date: Fri, 3 May 2019 19:14:53 +0900 Subject: [PATCH] feat: add www.lifehacker.jp custom parser (#403) --- fixtures/www.lifehacker.jp/1555841834276.html | 1 + src/extractors/custom/index.js | 1 + .../custom/www.lifehacker.jp/index.js | 34 ++++++ .../custom/www.lifehacker.jp/index.test.js | 115 ++++++++++++++++++ 4 files changed, 151 insertions(+) create mode 100644 fixtures/www.lifehacker.jp/1555841834276.html create mode 100644 src/extractors/custom/www.lifehacker.jp/index.js create mode 100644 src/extractors/custom/www.lifehacker.jp/index.test.js diff --git a/fixtures/www.lifehacker.jp/1555841834276.html b/fixtures/www.lifehacker.jp/1555841834276.html new file mode 100644 index 000000000..d5372389d --- /dev/null +++ b/fixtures/www.lifehacker.jp/1555841834276.html @@ -0,0 +1 @@ +ファインの新聞ストッカーは引越しにも使える! 新聞も家具も簡単に固定 | ライフハッカー[日本版]

特集
カテゴリー
タグ
メディア

ファインの新聞ストッカーは引越しにも使える! 家具の固定も簡単

  • カテゴリー:
  • TOOL
ファインの新聞ストッカーは引越しにも使える! 家具の固定も簡単
Image: Amazon.co.jp

ついつい溜めてしまい、気がつくとかさばって捨てるのにも苦労する新聞紙

そんな新聞紙を捨てる時には、ファインの「新聞ストッカー」が役に立ちます。新聞紙を簡単に、くるくるっとテープでまけちゃうんです。

Image: Amazon.co.jp

使い方は簡単。テープや包帯を巻くようにぐるぐると巻きつけるだけ。普通だったら紐でまとめますが、下に通して、結んで、切って…と、結構時間がかかります。

でも、このアイテムはラップフィルム。テープのように新聞に吸着してくれるので、きつく締めたり、結ぶ必要がありません。サクサクっとまとめられるので、時短になること間違いなしですね。

Image: Amazon.co.jp

また、棚の扉や、食器などの割れ物をまとめて固定することもできるので、引越しや模様替えの際にも大活躍。棚の扉を固定すれば、中のものを取り出さなくても移動できる上に、運んでいる最中に中のものが落ちてしまう恐れを防ぐことができますよね。

価格もお手頃ですので、ぜひ使ってみてください!

なお、以下の表示価格は執筆現在のもの。変更の可能性もありますので販売ページをご確認ください。

Image: Amazon.co.jp

Source: Amazon.co.jp

島津健吾

swiper-button-prev
swiper-button-next
\ No newline at end of file diff --git a/src/extractors/custom/index.js b/src/extractors/custom/index.js index 2fca25073..0f9cf6e2e 100644 --- a/src/extractors/custom/index.js +++ b/src/extractors/custom/index.js @@ -117,3 +117,4 @@ export * from './japan.cnet.com'; export * from './deadline.com'; export * from './www.gizmodo.jp'; export * from './getnews.jp'; +export * from './www.lifehacker.jp'; diff --git a/src/extractors/custom/www.lifehacker.jp/index.js b/src/extractors/custom/www.lifehacker.jp/index.js new file mode 100644 index 000000000..e74b64340 --- /dev/null +++ b/src/extractors/custom/www.lifehacker.jp/index.js @@ -0,0 +1,34 @@ +export const WwwLifehackerJpExtractor = { + domain: 'www.lifehacker.jp', + + title: { + selectors: ['h1.lh-summary-title'], + }, + + author: { + selectors: ['p.lh-entryDetailInner--credit'], + }, + + date_published: { + selectors: [['div.lh-entryDetail-header time', 'datetime']], + }, + + dek: null, + + lead_image_url: { + selectors: [['meta[name="og:image"]', 'value']], + }, + + content: { + selectors: ['div.lh-entryDetail-body'], + + transforms: { + 'img.lazyload': $node => { + const src = $node.attr('src'); + $node.attr('src', src.replace(/^.*=%27/, '').replace(/%27;$/, '')); + }, + }, + + clean: ['p.lh-entryDetailInner--credit'], + }, +}; diff --git a/src/extractors/custom/www.lifehacker.jp/index.test.js b/src/extractors/custom/www.lifehacker.jp/index.test.js new file mode 100644 index 000000000..0402321f2 --- /dev/null +++ b/src/extractors/custom/www.lifehacker.jp/index.test.js @@ -0,0 +1,115 @@ +import assert from 'assert'; +import URL from 'url'; +import cheerio from 'cheerio'; + +import Mercury from 'mercury'; +import getExtractor from 'extractors/get-extractor'; +import { excerptContent } from 'utils/text'; + +const fs = require('fs'); + +describe('WwwLifehackerJpExtractor', () => { + describe('initial test case', () => { + let result; + let url; + beforeAll(() => { + url = + 'https://www.lifehacker.jp/2019/03/amazon-fine-newspaper-stocker.html'; + const html = fs.readFileSync( + './fixtures/www.lifehacker.jp/1555841834276.html' + ); + result = Mercury.parse(url, { + html, + fallback: false, + }); + }); + + it('is selected properly', () => { + // This test should be passing by default. + // It sanity checks that the correct parser + // is being selected for URLs from this domain + const extractor = getExtractor(url); + assert.equal(extractor.domain, URL.parse(url).hostname); + }); + + it('returns the title', async () => { + // To pass this test, fill out the title selector + // in ./src/extractors/custom/www.lifehacker.jp/index.js. + const { title } = await result; + + // Update these values with the expected values from + // the article. + assert.equal( + title, + `ファインの新聞ストッカーは引越しにも使える! 家具の固定も簡単` + ); + }); + + it('returns the author', async () => { + // To pass this test, fill out the author selector + // in ./src/extractors/custom/www.lifehacker.jp/index.js. + const { author } = await result; + + // Update these values with the expected values from + // the article. + assert.equal(author, '島津健吾'); + }); + + it('returns the date_published', async () => { + // To pass this test, fill out the date_published selector + // in ./src/extractors/custom/www.lifehacker.jp/index.js. + const { date_published } = await result; + + // Update these values with the expected values from + // the article. + assert.equal(date_published, `2019-03-08T04:00:00.000Z`); + }); + + it('returns the dek', async () => { + // To pass this test, fill out the dek selector + // in ./src/extractors/custom/www.lifehacker.jp/index.js. + const { dek } = await result; + + // Update these values with the expected values from + // the article. + assert.equal(dek, null); + }); + + it('returns the lead_image_url', async () => { + // To pass this test, fill out the lead_image_url selector + // in ./src/extractors/custom/www.lifehacker.jp/index.js. + const { lead_image_url } = await result; + + // Update these values with the expected values from + // the article. + assert.equal( + lead_image_url, + `https://assets.media-platform.com/lifehacker/dist/images/2019/02/28/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%882019-02-2810.48.32-w960.jpg` + ); + }); + + it('returns the content', async () => { + // To pass this test, fill out the content selector + // in ./src/extractors/custom/www.lifehacker.jp/index.js. + // You may also want to make use of the clean and transform + // options. + const { content } = await result; + + const $ = cheerio.load(content || ''); + + const first13 = excerptContent( + $('*') + .first() + .text(), + 2 + ); + + // Update these values with the expected values from + // the article. + assert.equal( + first13, + 'Image: Amazon.co.jpついつい溜めてしまい、気がつくとかさばって捨てるのにも苦労する新聞紙。そんな新聞紙を捨てる時には、ファインの「新聞ストッカー」が役に立ちます。新聞紙を簡単に、くるくるっとテープでまけちゃうんです。Image:' + ); + }); + }); +});