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>"