私の最終目標は、スイッチを「オン」にすると、Spark Core (wifi マイクロチップ) に投稿要求を送信してリレーをオンにするスイッチを備えたシンプルな iPhone ビューです。
投稿リクエストで機能する形式でパラメーターを追加するのに苦労しています。これは CLI で機能します。
curl https://api.spark.io/v1/devices/<myDeviceId>/led -d access_token=<myAccessToken> -d params=l1,LOW
これは、リクエストを迅速に再現する私の試みです:
func toggleLight (on: Bool){
var urlToUse = sparkAPIBaseURL+coreId+lightsMethodName
var url = NSURL.URLWithString(urlToUse)
var request = NSMutableURLRequest(URL: url)
var session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
if (on==true) {
request.setValue(paramsForOn, forHTTPHeaderField: "params")
} else {
request.setValue(paramsForOff, forHTTPHeaderField: "params")
}//if
request.setValue(accessToken, forHTTPHeaderField: "access_token")
println("request: \(request)")
var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in println("response: \(response)")
var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
println(strData)
self.responseDataLabel.text = strData
})//task
task.resume() //no idea what this does
}//toggleLight
println は、キー「access_token」の周りに余分な引用符を付ける要求を示しています。これが問題であると私は信じています:
request: <NSMutableURLRequest: 0x7a62a450> { URL: https://api.spark.io/v1/devices/<myDeviceId>/led, headers: {
"access_token" = <myAccessToken>;
params = "l1,LOW"; } }
応答には、アクセス トークンが見つからないというエラーが表示されます。
response: <NSHTTPURLResponse: 0x7b654c60> { URL: https://api.spark.io/v1/devices/<myDeviceId>/led } { status code: 400, headers {
"Access-Control-Allow-Origin" = "*";
Connection = "keep-alive";
"Content-Length" = 104;
"Content-Type" = "application/json; charset=utf-8";
Date = "Sun, 27 Jul 2014 18:21:45 GMT";
Server = "nginx/1.6.0";
"X-Powered-By" = Express;} }{
"code": 400,
"error": "invalid_request",
"error_description": "The access token was not found"}
setValue と addValue を試しましたが、どちらも引用符を追加することでキー access_token を処理しているように見えます。
ありがとう!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~
スタックは私自身の質問にあと数時間答えさせてくれないので、問題を解決した作業コードは次のとおりです: ジョナに感謝します - 友人から、Spark Core は本体にキーと値のペアが必要であることを知りました。こぶを乗り越えた作業コード:
func toggleLight (on: Bool){
var urlToUse = sparkAPIBaseURL+coreId+lightsMethodName
var url = NSURL.URLWithString(urlToUse)
var request = NSMutableURLRequest(URL: url)
var session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
var params: String
if (on==true) {
params = paramsForOn
} else {
params = paramsForOff
}//if
**var message = "access_token=\(accessToken)¶ms=\(params)"
request.HTTPBody = (message as NSString).dataUsingEncoding(NSUTF8StringEncoding)**
println("request: \(request)")
var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in println("response: \(response)")
var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
println(strData)
self.responseDataLabel.text = strData
})//task
task.resume() //no idea what this does
}//toggleLight