2016-05-05 5 views
0

So arbeite ich an der Veröffentlichung eines Videos auf die Emotion API for video und ich konnte keine Antwort bekommen.Verwenden von Emotion API für Video (Javascript oder Ruby)

Ich konnte es auf der Microsoft online console arbeiten, aber wenn ich versuche, es in meiner Rails App mit (1) JavaScript Ajax oder (2) Ruby serverseitigen Code zu implementieren, bekomme ich konsequent verschiedene Fehler.

Hier ist mein Code. Zuerst habe ich versucht, Ajax so, aber ich hatte den Verdacht, dass die API nicht CORS aktiviert hat. Also habe ich Ruby versucht, ohne Erfolg.

Ruby-Versuch:

def index 
    uri = URI('https://api.projectoxford.ai/emotion/v1.0/recognizeinvideo') 
    uri.query = URI.encode_www_form({ 
    }) 

    data = File.read("./public/mark_zuck.mov") 

    request = Net::HTTP::Post.new(uri.request_uri) 
    # Request headers 
    request['Ocp-Apim-Subscription-Key'] = 'e0ae8aad4c7f4e33b51d776730cff5a9' 
    # Request body 
    request.body = data 
    request.content_type = "video/mov" 

    response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http| 
     http.request(request) 
    end 

    puts response.body 
end 

Hier ist mein Ajax Versuch:

function CallAPI(apiUrl, apiKey){ 
    console.log("API called"); 
    $(".loading").css("display", "inline-block"); 
    $.ajax({ 
     url: apiUrl, 
     beforeSend: function (xhrObj) { 
      xhrObj.setRequestHeader("Content-Type", "application/octet-stream"); 
      xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key", apiKey); 
     }, 
     type: "POST", 
     data: '{"url": "http://localhost:5000/mark_zuck.mov"}', 
     processData: false, 
     success: function(response){ 
      console.log("API success"); 
      ProcessResult(response); 
      $(".loading").css("display", "none"); 
      console.log(response); 
     }, 
     error: function(error){ 
      console.log("API failed"); 
      $("#response").text(error.getAllResponseHeaders()); 
      $(".loading").css("display", "none"); 
      console.log(error); 
     } 
    }) 

Ja, ich habe meinen Schlüssel regeneriert. Dies ist nur um meinen Standpunkt zu verdeutlichen.

+0

"* Ich bekomme immer verschiedene Fehler *" - definieren, was meinst du mit "Fehler"? – Uzbekjon

+0

Mein Ajax-Versuch ergab einen Fehler von 400 und auch einen Fehler "Access-Control-Allow-Origin not set". Mein Ruby-Versuch ergibt '{" Fehler ": {" code ":" BadArgument "," Nachricht ":" Ungültiger Medientyp. "}}' –

+0

Sind Sie sicher, dass Sie einen API-Client richtig implementieren? CORS verhindert oft, dass der Code der Website anderswo funktioniert. Selenium könnte stattdessen verwendet werden, wenn es keine funktionierende API gibt –

Antwort

0

Also müssen Sie Content-Type zu application/octet-stream setzen, wenn es eine binäre Datei ist, die Sie senden, wie ich war.

Wenn Sie eine URL verwenden, sollten Sie Content-Type auf Anwendung/Json setzen und die URL muss öffentlich verfügbar sein.

Verwandte Themen