Shane Stanleyが「HTMLをXMLと見立ててアクセスすれば外部フレームワークなしに処理できて簡単だよ」と、送ってくれたサンプルScriptです。
2つの意味で焦りました。
(1)指定URLの内容をダウンロードするのに、「initWithContentsOfURL:」で処理
(2)この調子で処理したら、お手軽にREST APIも呼べそうな雰囲気
いろいろ考えさせられる内容でもあります。こういう「それ自体で何か製品を構成できるほどのサイズの処理じゃないけど、何かに絶対に使ってますよね」的な処理をBlogで公開しておくことのメリットを感じつつ、XML処理とか正規表現の処理が個人的に不得意なので、とても参考になります。
自分の用途が残念な(そんなに生産的でもなく趣味的な、という意味で)ものだったので、恐縮するばかりですー(オンラインゲームの機体のデータをWikiからまるごと引っこ抜くというものだったので)。
AppleScript名:get a title.scptd |
— – Created by: Shane Stanley – Created on: 2019/09/03 — use AppleScript version "2.4" use scripting additions use framework "Foundation" — classes, constants, and enums used property NSXMLDocumentTidyHTML : a reference to 512 property NSXMLDocument : a reference to current application’s NSXMLDocument property NSString : a reference to current application’s NSString property |NSURL| : a reference to current application’s |NSURL| property HTMLDocument : a reference to current application’s HTMLDocument property NSMutableArray : a reference to current application’s NSMutableArray set aURL to "https://w.atwiki.jp/senjounokizuna/pages/1650.html" set aRes to getTitleFromAURL(aURL) of me –> "ジム・スナイパー RGM-79(G)" on getTitleFromAURL(aURL) set theNSURL to |NSURL|’s URLWithString:aURL set {theXML, theError} to NSXMLDocument’s alloc()’s initWithContentsOfURL:theNSURL options:NSXMLDocumentTidyHTML |error|:(reference) if theXML is missing value then error theError’s localizedDescription() as text repeat with i from 2 to 7 by 1 set theNodes to (theXML’s nodesForXPath:("//h" & i) |error|:(missing value)) if theNodes’s |count|() is not 0 then return (theNodes’s firstObject()’s stringValue()) as text end repeat error "Header is missing" end getTitleFromAURL |