Last active
          January 10, 2021 08:17 
        
      - 
      
 - 
        
Save yaakov-h/85749cecb6cc3faf17fdaee59254875e to your computer and use it in GitHub Desktop.  
Revisions
- 
        
yaakov-h revised this gist
Dec 25, 2017 . 1 changed file with 88 additions and 43 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,52 +1,97 @@ import Foundation func fatalerror(_ text : String) { fputs(text, __stderrp) exit(-1) } struct ReadingListItem { init(title: String?, previewText: String?, url: URL, dateAdded: Date) { self.title = title self.previewText = previewText self.url = url self.dateAdded = dateAdded } let title : String? let previewText : String? let url : URL let dateAdded : Date } var items = [ReadingListItem]() let outputPath = "/Users/yaakov/Sync/Personal/readinglist" let libraryDirectory = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true)[0] if let bookmarks = NSDictionary(contentsOfFile: "\(outputPath)/Bookmarks.plist"), let children = bookmarks["Children"] as? [NSDictionary] { for var item in children { if item["WebBookmarkType"] as? String != "WebBookmarkTypeList" || item["Title"] as? String != "com.apple.ReadingList" { continue } let readingListItems = item["Children"] as? [NSDictionary] if let readingListItems = readingListItems { for var currentItem in readingListItems { let title = (currentItem["URIDictionary"] as? NSDictionary)?["title"] as? String let uri = currentItem["URLString"] as? String let rldata = currentItem["ReadingList"] as? NSDictionary let preview = rldata?["PreviewText"] as? String let date = rldata?["DateAdded"] as? Date if let _ = title, let _ = uri { print() } else { fatalerror("Missing title or uri for item.") } if date == nil { fatalerror("Missing date for item.") } if let urlText = uri, let url = URL(string: urlText) { let item = ReadingListItem(title: title, previewText: preview, url: url, dateAdded: date!) items.append(item) } } } else { fatalerror("Could not find a Reading List bookmarks set.") } } } else { fatalerror("Unable to load Safari Bookmarks.") } let itemsByDomain = Dictionary(grouping: items, by: { $0.url.host?.lowercased() ?? "unknown" }) print("Found \(itemsByDomain.values.count) items across \(itemsByDomain.keys.count) domains.") var domains = Array(itemsByDomain.keys) for var domain in domains { let domainItems = itemsByDomain[domain]!.sorted(by: { $0.dateAdded < $1.dateAdded }) var text = "" for var item in domainItems { text += item.dateAdded.description + "\n" if let title = item.title { text += title + "\n" } text += item.url.absoluteString + "\n" if let preview = item.previewText { text += preview + "\n" } text += "\n----\n\n" } try text.write(toFile: outputPath + "/" + domain + ".txt", atomically: true, encoding: .utf8) }  - 
        
yaakov-h created this gist
Jan 29, 2017 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,52 @@ import Foundation func fatalerror(_ text : String) { fputs(text, __stderrp) exit(-1) } let libraryDirectory = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true)[0] if let bookmarks = NSDictionary(contentsOfFile: "\(libraryDirectory)/Safari/Bookmarks.plist"), let children = bookmarks["Children"] as? [NSDictionary] { for var item in children { if item["WebBookmarkType"] as? String != "WebBookmarkTypeList" || item["Title"] as? String != "com.apple.ReadingList" { continue } let readingListItems = item["Children"] as? [NSDictionary] if let readingListItems = readingListItems { for var currentItem in readingListItems { let title = (currentItem["URIDictionary"] as? NSDictionary)?["title"] as? String let uri = currentItem["URLString"] as? String let rldata = currentItem["ReadingList"] as? NSDictionary let preview = rldata?["PreviewText"] as? String let date = rldata?["DateAdded"] as? Date if let title = title, let uri = uri { print("Title: \(title)") if let preview = preview { print("Preview: \(preview)") } print("Uri: \(uri)") if let date = date { print("Date Added: \(date)") } print() } else { fatalerror("Missing title or uri for item.") } } } else { fatalerror("Could not find a Reading List bookmarks set.") } } } else { fatalerror("Unable to load Safari Bookmarks.") }