मैं कीमिया-API दस्तावेज़ यहाँ के माध्यम से पढ़ रहा हूँ:यूआरआई-एनकोड छवि कैसे करें?
http://www.alchemyapi.com/api/image-tagging/image.html
वे कहते हैं कि छवि यूआरआई-एन्कोड किया जाना चाहिए ... कि वास्तव में क्या मतलब है?
क्या इसका मतलब है कि छवि को बेस 64 स्ट्रिंग में परिवर्तित करना और फिर अनुरोध को पास करना?
मैंने कोशिश की है लेकिन मुझे http 414 त्रुटि प्राप्त है - अनुरोध यूआरआई बहुत बड़ा है।
@IBAction func analyzeImage(sender: UIButton) {
var imageData = UIImagePNGRepresentation(mainImage.image)
let base64ImageString = imageData.base64EncodedStringWithOptions(.allZeros)
let requestString = ENDPOINT+"?apikey="+API_KEY+"&image="+base64ImageString+"&outputMode=json"
let url = NSURL(string: requestString)
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
println(NSString(data: data, encoding: NSUTF8StringEncoding))
}
task.resume()
}
संपादित करें:
यहाँ मेरी कोड जहां अनुरोध किया जाता है मैं खाते Dijkgraaf की सिफारिश में ले गया एक पोस्ट अनुरोध का उपयोग करने के बजाय यूआरआई लंबाई के आसपास काम करने के लिए मिल। मैं ऐसा करने के लिए अलामोफायर लाइब्रेरी का उपयोग कर रहा हूं। त्रुटि जब मैं इस प्रयास करें:
@IBAction func analyzeImage(sender: UIButton) {
var imageData = UIImagePNGRepresentation(mainImage.image)
let base64ImageString = imageData.base64EncodedStringWithOptions(.allZeros)
let params = [
"apikey" : API_KEY,
"image" : base64ImageString,
"outputMode" : "json"]
var manager = Manager.sharedInstance
//Passing all the headers you want!
manager.session.configuration.HTTPAdditionalHeaders = [
"Content-Type": "application/x-www-form-urlencoded"
]
manager.request(.POST, ENDPOINT, parameters:params, encoding: .URL)
.response { (request, response, data, error) in
println(request)
println(response)
println(error)
}
}
हालांकि, मैं एक "नीचे की ओर से जारी नहीं-विश्लेषण कर सकते हैं" मिलती है: यहाँ मेरी कोड है।
<NSMutableURLRequest: 0x1742040c0> { URL: http://access.alchemyapi.com/calls/image/ImageGetRankedImageKeywords }
Optional(<NSHTTPURLResponse: 0x17082c1e0> { URL: http://access.alchemyapi.com/calls/image/ImageGetRankedImageKeywords } { status code: 200, headers {
"Access-Control-Allow-Origin" = "*";
"Cache-Control" = "no-cache";
Connection = "keep-alive";
"Content-Length" = 326;
"Content-Type" = "application/json";
Date = "Mon, 08 Jun 2015 05:59:22 GMT";
Server = nginx;
"X-AlchemyAPI-CurrentVersion" = "12.15";
"X-AlchemyAPI-Error-Msg" = "cannot-analyze:downstream-issue";
"X-AlchemyAPI-Key" = [API KEY HIDDEN];
"X-AlchemyAPI-Params" = "sentiment=0&knowledgeGraph=0&detectedLanguage=unknown&submitLanguage=detect";
"X-AlchemyAPI-Status" = ERROR;
"X-AlchemyAPI-Total-Transactions" = 0;
} })
nil
सुनिश्चित नहीं हैं कि क्या गलत हो रहा है, लेकिन कीमिया प्रलेखन करता राज्य पोस्ट अनुरोध "सामग्री प्रकार" होना चाहिए कि शीर्ष लेख सेट करने के लिए "application/x-: www
यहाँ कंसोल आउटपुट है -फॉर्म-urlencoded ", जो प्रतीत होता है कि कोई फर्क नहीं पड़ता कि मैं क्या सेट करने की कोशिश करता हूं। क्या यह समस्या हो सकती है?
संपादित करें: मैं बस कच्चे छवि डेटा पोस्टिंग की कोशिश की, फिर से के रूप में Dijkgraaf सुझाव:
@IBAction func analyzeImage(sender: UIButton) {
var imageData = UIImagePNGRepresentation(mainImage.image)
//let base64ImageString = imageData.base64EncodedStringWithOptions(.allZeros)
var request = HTTPTask()
request.requestSerializer = HTTPRequestSerializer()
request.requestSerializer.headers["Content-Type"] = "application/x-www-form-urlencoded"
let params: Dictionary<String,AnyObject> = [
"apikey" : API_KEY,
"imagePostMode" : "raw",
"image" : imageData,
"outputMode" : "json"]
request.POST(ENDPOINT, parameters: params, completionHandler: {(response: HTTPResponse) in
println(response.headers)
})
}
लेकिन मैं अभी भी एक ही फिर से नहीं-विश्लेषण कर सकते हैं नीचे की ओर मुद्दा त्रुटि मिलती है।
"अनुरोधित छवि दस्तावेज़ अधिकतम 1 मेगाबाइट हो सकते हैं। बड़े दस्तावेज़ों के परिणामस्वरूप" सामग्री-सीमा-आकार-सीमा "त्रुटि प्रतिक्रिया होगी।" आप जिस छवि को भेजने की कोशिश कर रहे हैं उसका आकार क्या है? – Icaro
यदि छवि बड़ी है तो आप शायद यूआरआई एन्कोड को आजमाने और क्वेरीस्ट्रिंग के साथ जीईटी का उपयोग करने के बजाय उस दस्तावेज़ में उल्लिखित कच्ची छवि पोस्ट करना चाहेंगे। एक यूआरआई अधिकतम लंबाई 2,083 वर्ण कुछ सिस्टम है, और यहां तक कि 255 वर्ण कुछ अन्य हैं। – Dijkgraaf
@Icaro मेरी टेस्ट छवि 156kb – snowflakekiller