safari书签html,如何把 Safari 的“阅读列表”转换为 Chrome 的书签

对过程不感兴趣的小伙伴请直接戳这里看使用方法

0. 剧情

某小伙伴平常用 Safari ,收藏了很多网页在“阅读列表”里,现在换成了 Chrome ,想要把“阅读列表”里的收藏作为书签导入到 Chrome 里,但是 Safari 没有提供这个功能,搜索了一番也没找的解决方案。所以作为程序猿,本着“自给自足丰衣足食”的精神,没有的功能咱就自己写。

1. 列需求

找到 Safari 的“阅读列表”的 URL 和标题

将 URL 和 标题导入到 Chrome

2. 探索一番

刚看到这个需求的时候,我搜索了一下“阅读列表”的作用:将网页内容保存到本地供离线使用。显然,找到保存网页离线数据的文件夹或者数据库就有可能找到 URL 列表,在/目录下搜索包含safari的文件夹,结果并没有什么帮助。

然后换个思路,能不能找到 Safari 的历史记录文件。用safari 历史记录 路径做为关键字搜索,找到了这个:Safari 的历史记录文件保存在/Users/你的用户名/Library/Caches/Metadata/Safari/History目录下,扫了一眼也没有什么帮助。但是发现在/Users/你的用户名/Library目录下有个safari文件夹,打开一看,很有帮助。

002a43874026?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

很有帮助的图1

我们发现了什么?ReadingListArchives,保存“阅读列表”离线文件的目录,打开一看,目录下文件夹数量刚好和我的“阅读列表”里网页数量相同,然而目录名是一堆 UUID ,并不是 URL ,文件夹里的文件也只有网页的离线文件。

002a43874026?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

ReadingListArchives目录下内容

我想这些 UUID 一定是和 URL 有对应关系,于是又看了看 Safari 目录下的文件和文件夹,锁定这几个数据库文件和 plist 文件。首先用 SQLite 工具浏览几个数据库文件,还是没有帮助。再看 plist 文件。首先用Xcode打开Bookmarks.plist文件,展开Children,和那几个Item,发现了有用的东西:WebBookmarkTypeProxy、BookmarksBar、BookmarksMenu和com.apple.ReadingList。

002a43874026?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Bookmarks.plist

展开com.apple.ReadingList所在的那级Item 3 -> Children,点开几个Item我发现了我想要的东西:“阅读列表”的 URL 和 标题。

002a43874026?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

URLString和title就是我们想要的

其实到这里已经解决最难的问题了,剩下的是导入到 Chrome 的书签里。本身 Chrome 提供了书签导入/导出功能,我们先导出一份书签看看。

002a43874026?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

导出的书签 html 文件

结构一目了然,先写个例子。

002a43874026?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

简单的🌰

然后导入测试一下。

002a43874026?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

测试结果

成功导入,完成了需求。

3. 上代码

有了上面的探索,代码部分就简单多了。我本是 iOS 堆码猿,考虑到用 ObjectiveC 写还要发个工程压缩包给小伙伴,不如脚本来的轻快,于是我就用 Python3 来写。

我的环境:

Mac 10.11.6

Safari 10.0.1(11602.2.14.0.7)

Chrome 57.0.2987.133 (64-bit)

Python 3.6.1

用法:

把 plist 文件复制到一个文件夹

打开终端,cd 到那个文件夹

在终端输入python3 safari2chrome.py来运行脚本

脚本运行完会在当前目录生成个 html 文件,导入到 Chrome 齐活

代码如下:

from plistlib import *

# read plist file and get URLs and titles

with open('./Bookmarks.plist', 'rb') as fp:

plist = load(fp)

urlArray = plist['Children'][3]['Children']

marks = []

for dict in urlArray:

marks.append((dict['URLString'], dict['URIDictionary']['title']))

# create Chrome bookmark html file

fileHeader = '''

Bookmarks

Bookmarks

'''

rowHeader = '

\n'

rowFooter = '

'

bookmarkFolderLine = '

Safari Web Bookmark

\n'

f = open('chrome-bookmark.html', 'w')

f.write(fileHeader)

f.write(rowHeader)

f.write(bookmarkFolderLine)

f.write(rowHeader)

for target in marks:

str = u'

' + target[1] + u'' + '\n'

f.write(str)

f.write(rowFooter)

f.write(rowFooter)

4. 改进

改进的地方有几个吧,比如全程自动导出导入,弄个小小的 GUI ,支持更多版本的 Mac / Safari / Chrome / Python 。小伙伴已经用上面的脚本完成导入,后续我会继续完善这个小工具,让它更简单更好用吧。

# EOF

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值