LoginSignup
3
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-10-19

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

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3