2016-08-15 4 views
0

Ich versuche eine Alexa-Fähigkeit zu machen, in der das Alexa-Gerät die Titel aus der Google News API ausliest. Ich habe eine JSON url und ich möchte eine Funktion machen, damit der Titel vom Alexa-Gerät analysiert und gelesen werden kann. Hier ist mein Code so weit: (es ist die Hauptfunktion w/JSON und Sachen fehlt)Wie man eine Alexa Fähigkeit JSON Daten (node.js) auslesen lässt?

/** 
* App ID for the skill 
*/ 
var APP_ID = undefined; 
/** 
* The AlexaSkill prototype and helper functions 
*/ 
var AlexaSkill = require('./AlexaSkill'); 

var News = function() { 
    AlexaSkill.call(this, APP_ID); 
}; 

// Extend AlexaSkill 
News.prototype = Object.create(AlexaSkill.prototype); 
News.prototype.constructor = News; 

News.prototype.eventHandlers.onSessionStarted = function (sessionStartedRequest, session) { 

}; 

News.prototype.eventHandlers.onLaunch = function (launchRequest, session, response) { 
    handleNewsRequest(response); 
}; 


News.prototype.eventHandlers.onSessionEnded = function (sessionEndedRequest, session) { 

}; 

News.prototype.intentHandlers = { 
    "NewsIntent": function (intent, session, response) { 
     handleNewsRequest(response); 
    }, 

    "AMAZON.HelpIntent": function (intent, session, response) { 
     response.ask("You can ask me for the latest news headlines in the world right now. Simply ask Top News for the latest news."); 
    }, 

    "AMAZON.StopIntent": function (intent, session, response) { 
     var speechOutput = "Goodbye"; 
     response.tell(speechOutput); 
    }, 

    "AMAZON.CancelIntent": function (intent, session, response) { 
     var speechOutput = "Goodbye"; 
     response.tell(speechOutput); 
    } 
}; 

/** 
* News API 
*/ 
function handleNewsRequest(response) { 
    /** 
    * This is where I need help!!!!!!!! 
    */ 







    // Create speech output 
    var speechOutput =  ; 
    var cardTitle = "Top News"; 
    response.tellWithCard(speechOutput, cardTitle, speechOutput); 
} 

// Create the handler that responds to the Alexa Request. 
exports.handler = function (event, context) { 
    // Create an instance of the Top News skill. 
    var news = new News(); 
    news.execute(event, context); 
}; 
+0

Gibt es ein bestimmtes Problem, in das Sie geraten sind? – httpNick

+0

@httpNick Ich versuche, Daten von einer URL zu analysieren, so dass ich nur den Titel der Nachrichtenartikel habe. Wie gehe ich da vor? –

Antwort

0

Sie benötigen eine Anfrage an die api zu machen und dieses Ergebnis in Alexas tell-Funktion verwenden.

Ich würde versuchen, mit dem Request-Modul, um die API-Daten zu erhalten. Das erste Beispiel auf der npm-Website sollte Ihnen zeigen, wie das geht.

request('http://www.google.com', function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
    console.log(body) // Show the HTML for the Google homepage. 
    } 
}); 

Weil Sie warten müssen, für die Antwort zurück zu kommen, müssen Sie die Funktion zum Bearbeiten auch Bluebird's Promisfication zu implementieren. Dadurch können Sie auf die Antwort warten, bevor Sie sie an die Tell-Funktion übergeben, da es einige Sekunden dauern kann, bis ein Ergebnis von der API erhalten wird.

var Promise = require("bluebird"); 
var Request = require("request"); 
Promise.promisifyAll(Request); 

Request.getAsync(url) 
.then(function(error, response, body){ 
    console.log(body); 
}); 

Schließlich müssen Sie auch JSON.parse verwenden, um den Wert des Körpers zu erhalten, die Sie brauchen, und es auf der tell-Funktion verwenden.

var obj = JSON.parse(body); 
response.tell(obj); 
Verwandte Themen