Rubyでプロパティリストを使う準備
gem install CFPropertyList
Rubyでプロパティリストを読み込む
require 'cfpropertylist' plist = CFPropertyList::List.new(:file => "Bookmarks.plist") data = CFPropertyList.native_types(plist.value)
Bookmarkの構造が俺には複雑で苦戦
ハッシュが出来、その次は配列で、またその中はハッシュみたいな
リーディングリストにアクセスする
lista = data['Children']
rl=lista[lista.size-1]['Children']
(0..598).each{|i|
puts rl[i]['URIDictionary']['title'] + " " + rl[i]['URLString']
}
ruby的にはこんな感じで格納されてる
=> {
"ReadingList"=>{
"DateAdded"=>2013-05-14 08:31:52 +0900,
"DateLastViewed"=>2013-05-15 12:35:32 +0900,
"PreviewText"=>"このページをモバイルデバイスに最適化されたPublickey Smart Edtionで読む JavaScriptのプログラミングスタイルはどうあるべきか?重鎮
Douglas Crockford氏が脳の働きとの関係を語る(後編)。QCon Tokyo 2013 2013年5月1"
},
"ReadingListNonSync"=>{
"ArchiveOnDisk"=>true, "DateLastFetched"=>2013-05-16 07:27:02 +0900, "FetchResult"=>1, "PreviewText"=>"JavaScriptのプログラミングスタイルはどうあるべきか? 重鎮Douglas Crockford氏が脳の働きとの関係を語る(後編)。QCon Tokyo 2013 2013年5月13日 4月23日に都内で開催されたエンジニア向けのイベント「QCon Tokyo 2013」"
},
"Sync"=>{"Key"=>"\"C=3255@U=ca51b725-be75-411a-8340-09c60f38bf27\"",
"ServerID"=>"https://kjw_junichi%40mac.com@p02-bookmarks.icloud.com/95582769/bookmarks/BFEmlLhQQi64yzedNfEOOA/DC1036B1-1C4E-48
ED-80DF-7FF9F0FCD51E.xbel"}, "URIDictionary"=>{"title"=>"JavaScriptのプログラミングスタイルはどうあるべきか? 重鎮Douglas Cr r
ockford氏が脳の働きとの関係を語る(後編)。QCon Tokyo 2013 - Publickey"}, "URLString"=>"http://www.publickey1.jp/blog/13/ja a
vascript_douglas_crockfordqcon_tokyo_2013_1.html", "WebBookmarkType"=>"WebBookmarkTypeLeaf", "WebBookmarkUUID"=>"B6D208F6-E3
05-4149-A215-96419B96C460"}
1エントリの構造
ReadingList
DateAdded
DateLastViewed
これが設定されていなければ、未読扱いか?
URIDictionary
title
URLString
何とか手元の環境で動いたのがこちら
#!/usr/bin/env ruby require 'cfpropertylist' plist = CFPropertyList::List.new(:file => File.expand_path("~/Library/Safari/Bookmarks.plist")) data = CFPropertyList.native_types(plist.value) a=data['Children'] b=a[a.size-1]['Children'] puts "<html><body><ul>" (0..b.size-1).each{|i| if b[i]['ReadingList']['DateLastViewed'] puts "<li><a href=\""+b[i]['URLString']+"\">" + b[i]['URIDictionary']['title']+"</a></li>" end } puts "</ul></body></html>"