Skip to content

Instantly share code, notes, and snippets.

@robmathers
Last active November 16, 2023 21:18
Show Gist options
  • Star 36 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save robmathers/5995026 to your computer and use it in GitHub Desktop.
Save robmathers/5995026 to your computer and use it in GitHub Desktop.
Prints out URLs of items in Safari’s Reading List
#!/usr/bin/env python
import plistlib
from shutil import copy
import subprocess
import os
from tempfile import gettempdir
import sys
import atexit
BOOKMARKS_PLIST = '~/Library/Safari/Bookmarks.plist'
bookmarksFile = os.path.expanduser(BOOKMARKS_PLIST)
# Make a copy of the bookmarks and convert it from a binary plist to text
tempDirectory = gettempdir()
copy(bookmarksFile, tempDirectory)
bookmarksFileCopy = os.path.join(tempDirectory, os.path.basename(bookmarksFile))
def removeTempFile():
os.remove(bookmarksFileCopy)
atexit.register(removeTempFile) # Delete the temp file when the script finishes
converted = subprocess.call(['plutil', '-convert', 'xml1', bookmarksFileCopy])
if converted != 0:
print "Couldn't convert bookmarks plist from xml format"
sys.exit(converted)
plist = plistlib.readPlist(bookmarksFileCopy)
# There should only be one Reading List item, so take the first one
readingList = [item for item in plist['Children'] if 'Title' in item and item['Title'] == 'com.apple.ReadingList'][0]
if 'Children' in readingList:
for item in readingList['Children']:
print item['URLString']
@mcdado
Copy link

mcdado commented Jul 19, 2013

It would be cool if there was an option (parameter?) that checks for the presence of DateLastView, so to only get unread items.

I would love to write a pull request here, but I have no knowledge of Python.

@philip-jakobsen
Copy link

I second the above suggestion

@richarddas
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment