From b077000c4a285d2643aec0aee4f770e91f94c188 Mon Sep 17 00:00:00 2001 From: kik0220 <4346449+kik0220@users.noreply.github.com> Date: Fri, 3 May 2019 19:10:55 +0900 Subject: [PATCH] feat: add getnews.jp custom parser (#402) --- fixtures/getnews.jp/1555846693544.html | 437 ++++++++++++++++++ src/extractors/custom/getnews.jp/index.js | 29 ++ .../custom/getnews.jp/index.test.js | 109 +++++ src/extractors/custom/index.js | 1 + 4 files changed, 576 insertions(+) create mode 100644 fixtures/getnews.jp/1555846693544.html create mode 100644 src/extractors/custom/getnews.jp/index.js create mode 100644 src/extractors/custom/getnews.jp/index.test.js diff --git a/fixtures/getnews.jp/1555846693544.html b/fixtures/getnews.jp/1555846693544.html new file mode 100644 index 000000000..b7451ca42 --- /dev/null +++ b/fixtures/getnews.jp/1555846693544.html @@ -0,0 +1,437 @@ + + + + +気軽に新聞をスクラップできる「ペン」、CUTPEN | ガジェット通信 GetNews + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+

+ +ガジェット通信 GetNews + +

+見たことのないものを見に行こう + +
+ + +
+ +
+
+
+ +
+
+ +サイトジャック特集pc + +
+
+ +
+
+
+ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+

体験を伝える―『ガジェット通信』の考え方

+
+面白いものを探しにいこう +本物を体験し体感しよう +会いたい人に会いに行こう +見たことのないものを見に行こう +そしてそれをやわらかくみんなに伝えよう +[→ガジェ通についてもっと詳しく] +[→ガジェット通信フロアについて] +
+
+
+
+ +
+
+

気軽に新聞をスクラップできる「ペン」、CUTPEN

+ + +
+
    +
  • + +
  • +- +
  • + +
  • + +
  • + +
  • + +
  • + +
+
+
+1904212 +

ネット社会の現代でも、多くの人に読まれている新聞。そんな新聞を読んでいる時に気になった記事を気軽にデータとして残したい人もいるだろう。そんな中、スマートフォンを活用することによって、簡単に新聞記事をスクラップ化することが可能となった。

+

CUTPENは「新聞を切り抜く」ということにフォーカスした、新聞スクラップ用ペンとスマートフォンアプリ。

+

CUTPENの一番の特徴は、専用ペンとスマートフォンと連携することで、気になる新聞記事を簡単に切り抜くことができることだ。線が引きやすい専用ペンで囲った箇所を、アプリを使い撮影すると、囲った部分を認識してデータ化。気になった新聞記事を簡単にスクラップできる上に、スクラップした記事は画像に変化しているため、スマホからPCへのデータ移動なども簡単。また、文字を綺麗に見やすくする画像補正や、気になる単語や箇所をチェックできるマーカー機能等を搭載しており、スクラップした記事を快適に読むことが可能だ。

+

それだけでなく、CUTPENはAIとアルゴリズムを活用することで、新聞記事のデータ化も簡単にできるようになった。

+1904213 +

スクラップした記事は文字を認識して重要キーワードを抽出するだけでなく、インターネットから関連情報を表示することができる。これにより、気になった記事を深く把握することが容易になるというわけだ。

+

CUTPENは専用ボールペンにスマートフォンアプリの全機能が使用できるシリアルIDを付属。対応OSはiOS8以降を搭載したiPhone5S以降のスマートフォン。価格は1年間分のシリアルコード付きで850円(税抜き)

+
+ +
+ +
+
+
+ + + + +
+NeoL/ネオエルの記事一覧をみる + +
    +
  • 誤字を発見した方はこちらからご連絡ください。 +
  • ガジェット通信編集部への情報提供はこちらから +
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。 +
+
+
    +
  • + +
  • +- +
  • + +
  • + +
  • + +
  • + +
  • + +
+
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + diff --git a/src/extractors/custom/getnews.jp/index.js b/src/extractors/custom/getnews.jp/index.js new file mode 100644 index 000000000..71039eb47 --- /dev/null +++ b/src/extractors/custom/getnews.jp/index.js @@ -0,0 +1,29 @@ +export const GetnewsJpExtractor = { + domain: 'getnews.jp', + + title: { + selectors: ['article h1'], + }, + + author: { + selectors: ['span.prof'], + }, + + date_published: { + selectors: [['ul.cattag-top time', 'datetime']], + }, + + dek: null, + + lead_image_url: { + selectors: [['meta[name="og:image"]', 'value']], + }, + + content: { + selectors: ['div.post-bodycopy'], + + transforms: {}, + + clean: [], + }, +}; diff --git a/src/extractors/custom/getnews.jp/index.test.js b/src/extractors/custom/getnews.jp/index.test.js new file mode 100644 index 000000000..30b73732c --- /dev/null +++ b/src/extractors/custom/getnews.jp/index.test.js @@ -0,0 +1,109 @@ +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('GetnewsJpExtractor', () => { + describe('initial test case', () => { + let result; + let url; + beforeAll(() => { + url = 'https://getnews.jp/archives/2146078'; + const html = fs.readFileSync('./fixtures/getnews.jp/1555846693544.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/getnews.jp/index.js. + const { title } = await result; + + // Update these values with the expected values from + // the article. + assert.equal(title, `気軽に新聞をスクラップできる「ペン」、CUTPEN`); + }); + + it('returns the author', async () => { + // To pass this test, fill out the author selector + // in ./src/extractors/custom/getnews.jp/index.js. + const { author } = await result; + + // Update these values with the expected values from + // the article. + assert.equal(author, 'NeoL/ネオエル'); + }); + + it('returns the date_published', async () => { + // To pass this test, fill out the date_published selector + // in ./src/extractors/custom/getnews.jp/index.js. + const { date_published } = await result; + + // Update these values with the expected values from + // the article. + assert.equal(date_published, `2019-04-21T02:51:39.000Z`); + }); + + it('returns the dek', async () => { + // To pass this test, fill out the dek selector + // in ./src/extractors/custom/getnews.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/getnews.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://www.neol.jp/wp-content/uploads/2019/04/1904212-620x411.png` + ); + }); + + it('returns the content', async () => { + // To pass this test, fill out the content selector + // in ./src/extractors/custom/getnews.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(), + 1 + ); + + // Update these values with the expected values from + // the article. + assert.equal( + first13, + 'ネット社会の現代でも、多くの人に読まれている新聞。そんな新聞を読んでいる時に気になった記事を気軽にデータとして残したい人もいるだろう。そんな中、スマートフォンを活用することによって、簡単に新聞記事をスクラップ化することが可能となった。' + ); + }); + }); +}); diff --git a/src/extractors/custom/index.js b/src/extractors/custom/index.js index 66cc76ba0..2fca25073 100644 --- a/src/extractors/custom/index.js +++ b/src/extractors/custom/index.js @@ -116,3 +116,4 @@ export * from './www.yomiuri.co.jp'; export * from './japan.cnet.com'; export * from './deadline.com'; export * from './www.gizmodo.jp'; +export * from './getnews.jp';