Edited at

cuiでchrome のブックマークを出力するには


node で chrome のブックマークを読むコマンドを作ってみました

OS:Ubuntu 16.04.5 LTS

他のOSではどこにブックマークが保存されているのかわかりません・・・

コメントで教えて頂けると助かります。

例えばこんなふうにコマンドラインから利用できます

./bookmark.js  | grep qiita

2018/06/14 03:26 | https://qiita.com/QUANON/items/3e271b512db299099893 | Docker コンテナ上で wkhtmltopdf を動かす - Qiita
2018/05/17 09:16 | https://qiita.com/edo_m18/items/0aee765a4e612e7a16af | [連載] WebVR入門 vol.3 - Qiita
2018/04/24 03:05 | https://qiita.com/uto-usui/items/4eb21aec704b888936d0 | 《WordPress》2017年末にWP REST API で取得してVue.jsで描画するまでのまとめ。 - Qiita
2018/03/17 10:45 | https://qiita.com/nao-guitarist/items/eeaede5ddc6757b0c83a | GsuiteのGoogle DriveをDrive File Streamに置き換えてみた - Qiita
2018/03/16 10:19 | https://qiita.com/keiono/items/76c0aaabb4e6e0c10dc5 | プログラマーが効果的な可視化を作成する (中編) - Qiita

なぜか google 先生は独自の時刻フォーマットを使っていて悩みました・・・

参考

https://stackoverflow.com/questions/19074423/how-to-parse-the-date-added-field-in-chrome-bookmarks-file/19076132#19076132

#!/usr/bin/env node

// ブックマークの保存場所
const bookmark = process.env["HOME"] + '/.config/google-chrome/Default/Bookmarks';
var fs = require('fs');

const jsText = fs.readFileSync( bookmark );
let objBM = JSON.parse( jsText );

const digit2 = function(d){
if(d>=10){
return d;
}
return '0' + d;
}

// Google先生の不思議な時間フォーマット
const dateStr = function(micro){
let sec = parseInt(micro / 1000000, 10);
sec += 9*3600; // GMT(UTC)とJSTへの時差

let days = parseInt(sec / 86400, 10);
sec %= 86400;
let hour = parseInt( sec / 3600);
let min = parseInt( (sec - hour * 3600) / 60);

let nd = new Date(1601, 0, 1);
nd.setDate(nd.getDate() + days);
nd.setHours(nd.getHours() + hour);
nd.setMinutes(nd.getMinutes() + min);

return nd.getFullYear() +'/'
+ digit2(nd.getMonth()+1)+'/'
+ digit2(nd.getDate())
+ ' ' + digit2(nd.getHours())
+ ':' + digit2(nd.getMinutes());
};

const recursePrint = function( obj ){
if( obj.type === 'folder'){
obj.children.forEach( recursePrint );
} else {
console.log( dateStr( obj.date_added) + ' | ' + obj.url + ' | ' + obj.name );
}
}

recursePrint( objBM.roots.bookmark_bar );

他の要素を出力したい場合は以下のようにして要素名を調べて

console.logで出力している行を変更すればOK

jq '.roots[]' ~/.config/google-chrome/Default/Bookmarks


追記

chrome のブックマークの仕様はここにあるようです

https://developer.chrome.com/extensions/bookmarks


余談

"the epoch" は 1970年1月1日だけだと思ったら色々あるんですね

・・・というか自分が UNIX/linux の epoch しか知らないだけでした・・・

1601/1/1 は Windowsのepoch

https://en.wikipedia.org/wiki/Epoch_(reference_date)