Mail.appからメールを書き出ししたeml形式のファイルをMailCore2 Frameworkで読み込んで、本文(HTML)中に記載されているリンクURLを抽出するAppleScriptです。
eml形式ファイルは、Mail.appからドラッグ&ドロップでメールを書き出したファイルです。書き出し後のファイルはMail.appの管轄ではなく、メールデータはFinderの専門外。AppleScriptではこのeml形式ファイルへのアクセスは一切できず、eml形式ファイルが相手では手も足も出ませんでした。
macOS 10.10でAppleScriptの主要ランタイムでCocoaの機能が利用できるようになり、これまでにアクセスできなかったデータ形式にアクセスできるようになりました。その典型例がこのemlファイルです。
メールの各種データへのアクセスを行えるMailCore2.frameworkを使えば、簡単にこのemlファイル内の各種情報にアクセスできます。
各種Frameworkに甘やかされまくって、HTMLを自力でparseするとかいったことは一切努力しようとしていない今日このごろ。MailCore2でメール本文をいいようにparseし、HTMLReader Frameworkで解釈したHTMLからリンクをひとまかせで抽出しています。
–> Download MailCore.framework
–> Download HTMLReader.framework
–> Downdload emlLinkExtracter (Code-Signed AppleScript Applet with Frameworks within its bundle)
AppleScript名:MailCore2でメールのeml形式ファイルを読み込んでリンクURL抽出 |
— Created 2017-01-18 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "MailCore" –https://github.com/MailCore/mailcore2 use framework "HTMLReader" –https://github.com/nolanw/HTMLReader –emlファイルを選択して読み込み set aPath to POSIX path of (choose file of type {"com.apple.mail.email"}) set fileContents to current application’s NSData’s dataWithContentsOfFile:aPath options:(current application’s NSDataReadingMappedIfSafe) |error|:(missing value) if fileContents = missing value then return –メール本文をHTML化 set aParser to current application’s MCOMessageParser’s messageParserWithData:fileContents set aBody1 to current application’s NSString’s stringWithString:(aParser’s htmlBodyRendering()) set aData to aBody1’s dataUsingEncoding:(current application’s NSUTF8StringEncoding) set aHTML to current application’s HTMLDocument’s documentWithData:aData contentTypeHeader:"text/html" –HTMLからリンクURLを抽出 set aTextArray to ((aHTML’s nodesMatchingSelector:"a")’s textContent) as list –リンク文字 set aLinkArray to ((aHTML’s nodesMatchingSelector:"a")’s attributes’s valueForKeyPath:"href") as list –URL –> {"http://peatix.com", … "https://peatix.com/contact"} |
More from my site
(Visited 179 times, 1 visits today)