Node.js
GoogleChrome

最近の Google 検索に使った単語ランキングを出す

More than 1 year has passed since last update.

唐突にマイ検索ワードクラウドを作りたくなったので書いてみました。

動かしてみて「確かに今日はこれについてたくさん調べたな」と思い返せるのが目標です。

とりあえず node のローカルスクリプトで実装しました。Webアプリにするには Chrome Extension くらいの権限が必要だと思います。

ブラウザ履歴をとるモジュールに使ったのはこちら。

https://www.npmjs.com/package/node-browser-history

import BrowserHistory from 'node-browser-history'

import { URL } from 'url'
import querystring from 'querystring'
import _ from 'lodash'

function getSearchWord(url) {
const params = querystring.parse(url.search.substr(1))
return params.q.split(' ')
}

function isGoogleSearchUrl(url) {
return url.hostname.match(/www\.google\./)
}

function toRanking(histories) {
const words = histories
.map(e => new URL(e.url))
.filter(isGoogleSearchUrl)
.map(getSearchWord)
const counts = _.map(_.countBy(_.flatten(words)), (v, k) => ({
word: k,
count: v,
}))
return _.orderBy(counts, e => -e.count)
}

;(async () => {
const history = await BrowserHistory.getChromeHistory(1000)
const res = toRanking(history[0])
console.log(res)
})()

出力結果

[ { word: '原材料', count: 36 },

{ word: '食品', count: 24 },
{ word: '世界', count: 20 },
{ word: '既存', count: 14 },
{ word: '種類', count: 11 },
{ word: '分類', count: 9 },
{ word: '種類数', count: 8 },
{ word: 'firebase', count: 7 },
{ word: 'sns', count: 7 },
{ word: 'node', count: 7 },
...

「確かに原材料について調べたな」と思い出せました。

node-browser-history にはcount 引数しか無いので、ページングなどの拡張をするには他のものが必要そうです。