Safariのリーディングリストに登録したURLをPocketに送るためのツールを作った

laiso/rl2pocket · GitHub

これ。

iPhoneMacで適当にリーディングリストを使う。

f:id:laiso:20150108191807p:plain

./rl2pocket

というコマンドを実行するとmailto:のリンクを開くのでMail.appやブラウザが起動するのでそのまま送信する

f:id:laiso:20150108191656p:plain

サイトが特殊なタイプのリンクを開くことを許可する(ハンドラ) - Chrome ヘルプ

Setup

https://github.com/laiso/rl2pocket/releases からダウンロードしてTerminalから実行。

  1. OS XiCloud設定でSafariをオンに

f:id:laiso:20150108191254p:plain

  1. Pocketにメールで投稿できるようにしておく

https://getpocket.com/emails

Motivation

  • iPhoneでいろんなアプリからPocketに登録するよりリーディングリストへの追加のが手軽だから使っていた
  • しかしRead it LaterはPocketに集約したい
  • それPla(plagger.orgはそれどころではないよの略)

Improvements

  • 認証機能つけて自働化できるようにする
  • 差分で送信して同期するしくみをつける
  • 黒い画面を見なくてもよくする

Code

Swiftで簡単に書けた

import Foundation
import Cocoa

func putPocket(readingList: [[String: AnyObject]]){
    let urls = readingList.map({ (item) -> String in
        item["URLString"] as String
    })
    
    let body = "\n".join(urls).stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())!
    let url = "mailto:add@getpocket.com?subject=rl2pocket&body=\(body)"
    NSWorkspace.sharedWorkspace().openURL(NSURL(string: url)!)
    
    println("Sending... \(urls.count) urls")
}

if let plist = NSDictionary(contentsOfFile: NSHomeDirectory()+"/Library/Safari/Bookmarks.plist") {
    let bookmarks = plist["Children"] as [AnyObject]
    if let readingList = bookmarks.filter({$0["Title"] as String? == "com.apple.ReadingList"}).first?["Children"] as? [[String: AnyObject]] {
        putPocket(readingList)
    }
    
    println("done")
}