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 先生は独自の時刻フォーマットを使っていて悩みました・・・
#!/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