Cómo obtener elementos de la lista de lectura como enlaces

Solo tengo mil millones de elementos en la lista de lectura de Safari y me gustaría tener los enlaces a todos ellos.

¿Hay alguna manera de obtener todos los elementos de su lista de lectura como enlaces (tal vez en un documento de texto)?

¿Es el archivo plist de 'lista de lectura' el mismo que el archivo plist de 'marcadores'?
Las entradas de la lista de lectura se almacenan en el archivo de marcadores, así que sí (más o menos).

Respuestas (3)

Preparé un script de Python para leer el archivo plist al que se hace referencia en la pregunta patrix mencionada en los comentarios .

#!/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']

Cópielo y péguelo en un archivo, asígnele un nombre como readinglisturls.py. Luego hazlo ejecutable ejecutándolo chmod +x readinglisturls.pyen la Terminal. Luego puede ejecutarlo en la Terminal e imprimirá las URL de la Lista de lectura. Si desea las URL en un archivo, puede redirigir la salida a un archivo ejecutándolo /path/to/readinglisturls.py > myfile.txten la Terminal.

Este script también está disponible como Gist en Github, si es útil para alguien: gist.github.com/robmathers/5995026

Otra opción usando la gema plist Ruby:

sudo gem install plist;plutil -convert xml1 -o - ~/Library/Safari/Bookmarks.plist|ruby -rubygems -e 'require "plist";puts Plist.parse_xml(STDIN.read)["Children"].select{|e|e["Title"]=="com.apple.ReadingList"}[0]["Children"].map{|e|e["URLString"]}'

O si no tienes otros marcadores:

defaults read ~/Library/Safari/Bookmarks.plist | sed -En 's/^ *URLString = "(.*)";/\1/p'

Aquí hay una versión que usa el lenguaje de programación Factor que es un poco más simple que la versión de Python que ya se respondió en esta publicación:

: reading-list ( -- urls )
    "~/Library/Safari/Bookmarks.plist" read-plist
    "Children" of [ "Title" of "com.apple.ReadingList" = ] find nip
    "Children" of [ "URLString" of ] map ;

Hay más información disponible en esta publicación de blog .