--
-- pgURLAppDelegate.applescript
-- pgURL
--
-- Created by goodtime on 4/10/11.
-- Copyright 2011 NiceMac. All rights reserved.
-- demonstrates doing a GET or POST Request using NSURLConnection. Runs in the Background (not in main thread)
-- contains no UI... might add one later, for now it just logs or displays alerts
-- see console log and feel free to change the URL
-- reference material: http://cocoawithlove.com/2008/09/cocoa-application-driven-by-http-data.html
script pgURLAppDelegate
property parent : class "NSObject"
property self : current application's pgURLAppDelegate -- should match the script delegate name above
property myURL : "http://www.heise.de" -- URL of your request
property postMethod : "POST" -- use POST for POST
property myBody : "" -- PUT YOUR POST MESSAGE HERE if trying to do a POST
-- URL Request Encoding
property myEncoding : NSUTF8StringEncoding of current application --code for UTF8
property getMethod : "GET" -- use GET for any other Requests
property intermediateMsg : "" -- Text String returned from the request (may not be complete for long downloads)
property entireMsg : "" -- All the Text String returned from the request
on pgURL_(myURL, myBody, myMethod)
-- String to NSURL
tell class "NSURL" of current application
set myURL to URLWithString_(myURL)
end tell
-- String
tell class "NSString" of current application
set myBody to stringWithString_(myBody)
end
set myBody to myBody's dataUsingEncoding_(myEncoding)
tell class "NSString" of current application
set myMethod to myMethod
end
tell NSMutableURLRequest of current application
set myRequest to requestWithURL_(myURL)
end
tell myRequest
setHTTPMethod_(myMethod)
end
-- add the Message Body when sending a POST Method
if myMethod = "POST" then
tell myRequest
setHTTPBody_(myBody)
end
end
-- form the connection
set myConnection to (((current application's class "NSURLConnection")'s alloc)'s initWithRequest_delegate_(myRequest, self))
end
-- handle the connection in the background (not in main thread)
-- this is controlled by the next four threads
on connection_didReceiveResponse_(myConnection, response)
tell class "NSHTTPURLResponse" of current application
set statusText to (localizedStringForStatusCode_(statusCode of response)) as text
set statusCode to (statusCode of response) as string
end
-- if it fails to do anything, show what it didn't do here (the error)
if statustext = "no error" then
-- I am not really sure if this does anything or if it is reseting the returnData properly
tell current application's returnData
setLength_(0)
end
else
display alert "HTTP Error: " & statusCode & return & "Error Message: " & statusText & "."
end
end
on connection_didReceiveData_(myConnection, returnData)
-- convert Data returned to String (Don't ever forget how to do this, it is a pain when do forget)
set my intermediateMsg to (((current application's class "NSString")'s alloc)'s initWithData_encoding_(returnData, current application's NSUTF8StringEncoding)) as string
log "didReceivedData:"
log intermediateMsg & return & return
set my entireMsg to my entireMsg & intermediateMsg
end
on connection_didFailWithError_(myConnection,trpErr)
-- display alert trpErr as string
log trpErr
set EM to ""
try
set newError to (NSLocalizedDescription of userInfo of (trpErr)) as string
on error EM
-- if AppleScript can't do this, so what else is wrong
set errorMore to EM
end
display alert newError & return & return & errorMore
end
on connectionDidFinishLoading_(myConnection)
log "connection Finished."
-- here you can do what you want to do with the intermediateMsg
log "here is your entire message returned:"
log entireMsg
log "end of line."
end
on applicationWillFinishLaunching_(aNotification)
-- Insert code here to initialize your application before any files are opened
-- run the request here for demonstration purposes
pgURL_(myURL, myBody, getMethod)
end applicationWillFinishLaunching_
on applicationShouldTerminate_(sender)
-- Insert code here to do any housekeeping before your application quits
return current application's NSTerminateNow
end applicationShouldTerminate_
end script
Web, Coding, Mac, Snippets, a Blog and more…