Archive for the 'NSURLDownload' Category

2015/09/09 指定URLのファイルをダウンロード

Cocoaの機能を用いて、指定URLのファイルをダウンロードするAppleScriptです。

書いている途中でどうしてもNSURLErrorDomain Error 3001が出てダウンロードできなかったのですが、それはダウンロード先をファイル名まで指定していなかったからでした(Appleのサンプルどおりに書いたのに!)。

最初の掲載時にはcachePolicyにNSURLRequestUseProtocolCachePolicyを指定していたのですが、ネット非接続時も正常終了したり、キャッシュが効いて最新版が取得できないなどの問題を見かけたため、NSURLRequestReloadIgnoringLocalCacheDataに変更しました。

AppleScript名:ASOCで指定URLのファイルをダウンロード
– Created 2015-09-09 Takaaki Naganoya
– 2015 Piyomaru Software
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”

–https://developer.apple.com/library/mac/documentation/Cocoa/
– Conceptual/URLLoadingSystem/Tasks/UsingNSURLDownload.html

property dlF : false
property dlTimeOutSec : 60.0

set my dlF to false

–DL先はファイル名まで指定しないとエラー(Error 3001)になる
set theDLdir to (current application’s NSHomeDirectory())’s stringByAppendingPathComponent:“Desktop/index.html”
–>  (NSString) “/Users/me/Desktop”

downloadFrom(“http://www.apple.com/jp/index.html”, theDLdir) of me

set waitLoop to 1000 * dlTimeOutSec –60 seconds
set hitF to false
repeat waitLoop times
  if my dlF is not equal to false then
    set hitF to true
    
exit repeat
  end if
  
current application’s NSThread’s sleepForTimeInterval:(“0.001″ as real) –delay 0.001
end repeat
if hitF = false then return
return dlF
–>  true

on downloadFrom(aURLstr, dlDir)
  
  
set aURL to current application’s |NSURL|’s URLWithString:aURLstr
  
–>  (NSURL) http://www.apple.com
  
  
set theReq to current application’s NSURLRequest’s requestWithURL:aURL cachePolicy:(current application’s NSURLRequestReloadIgnoringLocalCacheData) timeoutInterval:dlTimeOutSec
  
–>  (NSURLRequest) { URL: http://www.apple.com }
  
  
set theDownload to current application’s NSURLDownload’s alloc()’s initWithRequest:theReq delegate:me
  
–>  (NSURLDownload) { request: { URL: http://www.apple.com } }
  
  
theDownload’s setDestination:dlDir allowOverwrite:true
  
end downloadFrom

–Download Error Event Handler
on download:aDownload didFailWithError:anError
  set anErrorStr to anError’s localizedDescription()
  
set errorReason to (anError’s userInfo())’s objectForKey:(current application’s NSURLErrorFailingURLStringErrorKey)
  
set my dlF to {anErrorStr, errorReason}
end download:didFailWithError:

–Download Finished Event Handler
on downloadDidFinish:aDownload
  set my dlF to true
end downloadDidFinish:

★Click Here to Open This Script