スティッキーズ(Stickies.app)のデータをまとめて引っこ抜いてListに入れるAppleScriptです。色情報、1行目の内容をタイトルとみなしてタイトル情報も付加して出力するようにしてみました。
オープンソースのStickiesViewerをFramework化したstickiesLib.frameworkを経由してデータを読み出します。データベースファイルから情報を直接読み取るので、Stickies.appが起動している必要はありません。
–> Download stickiesLib.framework(To ~/Library/Frameworks/)
–> {creationDate:date “2006年1月15日日曜日 11:02:32″, aTitle:”WX-310Kの画像サイズ”, modificationDate:date “2006年1月15日日曜日 11:03:09″, aContents:”WX-310Kの画像サイズ
ケータイ:120×160
壁紙:240×320″, colorName:”Yellow”}
StickiesDatabaseからまとめて一括で全部抽出するので、個別に何かのIDで指定して抽出するといった動作にはなりません。
93個のスティッキーズ書類(93個のウィンドウが表示されている状態、1つのDBを指定)から、全データを取得して本AppleScriptで0.1秒程度です。
AppleScript名:Stickiesからのデータ取り出し v2.scptd |
— – Created by: Takaaki Naganoya – Created on: 2018/09/05 — – Copyright © 2018 Piyomaru Software, All Rights Reserved — use AppleScript version "2.5" — El Capitan (10.11) or later use framework "Foundation" use framework "AppKit" use framework "stickiesLib" use scripting additions property NSColor : a reference to current application’s NSColor property |NSURL| : a reference to current application’s |NSURL| property SVReader : a reference to current application’s SVReader property NSFileManager : a reference to current application’s NSFileManager property NSMutableArray : a reference to current application’s NSMutableArray set sRes to retStickiesData() of me –> (* {{creationDate:date "2006年1月15日日曜日 11:02:32", aTitle:"WX-310Kの画像サイズ", modificationDate:date "2006年1月15日日曜日 11:03:09", aContents:"WX-310Kの画像サイズ ケータイ:120×160 壁紙:240×320", colorName:"Yellow"}, ….} *) on retStickiesData() set dbPath to POSIX path of (path to library folder from user domain) & "StickiesDatabase" set aExt to (NSFileManager’s defaultManager()’s fileExistsAtPath:dbPath) as boolean if aExt = false then set dbPath to POSIX path of (choose file with prompt "Select StickiesDatabase file") end if set aURL to |NSURL|’s fileURLWithPath:dbPath set aStickDB to SVReader’s notesWithContentsOfURL:aURL set aList to aStickDB as list –スティッキーズの色データ set cList to {{"Yellow", {254, 244, 156}}, {"Blue", {173, 244, 255}}, {"Green", {178, 255, 161}}, {"Pink", {255, 199, 199}}, {"Purple", {182, 202, 255}}, {"Gray", {238, 238, 238}}} set outArray to NSMutableArray’s new() repeat with i in aList set anAttrStr to i’s attributedString() set aStr to (anAttrStr’s |string|()) as string set curTitle to first paragraph of aStr set aColor to i’s |color|() set cDate to i’s dateCreated() as date set mDate to i’s dateModified() as date set c1List to retColListFromNSColor(aColor, 255) of me –Find Color Name set hitF to false repeat with ii in cList set {colName, colList} to ii if c1List = colList then set hitF to true exit repeat end if end repeat if hitF = false then error "Color name did not hit" set curName to colName (outArray’s addObject:{creationDate:cDate, modificationDate:mDate, aContents:aStr, colorName:curName, aTitle:curTitle}) end repeat return outArray as list end retStickiesData on retColorFromRGBnum(r, g, b) return (NSColor’s colorWithCalibratedRed:r / 255.0 green:g / 255.0 blue:b / 255.0 alpha:1.0) end retColorFromRGBnum –NSColorからrgbの8bitの値を取り出す on retColListFromNSColor(aCol, aMAX as integer) set aRed to round ((aCol’s redComponent()) * aMAX) rounding as taught in school set aGreen to round ((aCol’s greenComponent()) * aMAX) rounding as taught in school set aBlue to round ((aCol’s blueComponent()) * aMAX) rounding as taught in school return {aRed, aGreen, aBlue} end retColListFromNSColor |