Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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)

wittyfool@github
フリーランスITエンジニア
http://nt55.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした