如何使用 Spotify api 端点(下面包含 API 的 URL)播放我的 index.js 文件中的特定歌曲?
How do I use the Spotify api endpoint (the URL of the API is included below) to play a specific song from my index.js file?
我正在制作一个 Google 助手应用程序,其中 (1)。考虑用户的情绪,(2)。从具有相同情绪的预分析数据库中检索一首歌曲和 (3)。通过 Spotify 播放那首歌。
我已经完成了第 1 部分和第 2 部分,但正在努力学习第 3 部分。我在这里 ( https://developer.spotify.com/console/put-play ) 上找到 API 用于向播放特定歌曲或专辑的 Spotify 发送 POST 请求。如何将此信息转换为来自我的 index.js 文件的 POST 请求?
例如,如果我想 POST Red Hot Chili Peppers 的 Spotify 代码 "Suck My Kiss",发送 Spotify 曲目 ID 的代码会是什么样子?
3
artist:
"Red Hot Chili Peppers"
id:
"4"
maxEmotion:
"anger"
score:
"0.578864"
song:
"Suck My Kiss"
spotifyCode:
"spotify:track:0psB5QzGb4653K0uaPgEyh"
我试过使用 Webhook 格式,但不确定我是否理解正确的使用方法,而且这意味着我的整个 index.js 文件都没有用(因为你只能有一个或其他在 Google 助手上)。所以我很想知道如何在 index.js 文件中执行此操作(如果可能的话)?我在下面包含了最重要的代码:
'use strict';
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const {WebhookClient} = require('dialogflow-fulfillment');
admin.initializeApp({
credential: admin.credential.applicationDefault(),
databaseURL: 'ws://mood-magic-four-ptwvjb.firebaseio.com/'
});
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
//4
function playAngrySong (agent) {
// Get the database collection 'dialogflow' and document 'agent'
return admin.database().ref((`3`) ).once('value').then((snapshot) => {
const song = snapshot.child('song').val();
const artist = snapshot.child('artist').val();
agent.add(`I will play ${song} by ${artist}`);
// THIS IS WHERE I NEED THE POST TO THE SPOTIFY API
});
}
// Map from Dialogflow intent names to functions to be run when the intent is matched
let intentMap = new Map();
intentMap.set('-Angry - yes', playAngrySong);
agent.handleRequest(intentMap);
});
已解决:这是下面的代码(使用 Google 助理代理在播放前说 'Enjoy'):
function playMusic(agent){
agent.add('Enjoy!');
var request = require("request");
var options = { method: 'PUT',
url: 'https://api.spotify.com/v1/me/player/play',
headers:
{ 'cache-control': 'no-cache,no-cache',
'Content-Type': 'application/json',
Authorization: `Bearer ${Access.accessToken}`,
Accept: 'application/json' },
body: { uris: [ `${SongInfo.Spotify_uri}` ] },
json: true };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log('This is the body of the play music request ' + body);
});
}
我正在制作一个 Google 助手应用程序,其中 (1)。考虑用户的情绪,(2)。从具有相同情绪的预分析数据库中检索一首歌曲和 (3)。通过 Spotify 播放那首歌。
我已经完成了第 1 部分和第 2 部分,但正在努力学习第 3 部分。我在这里 ( https://developer.spotify.com/console/put-play ) 上找到 API 用于向播放特定歌曲或专辑的 Spotify 发送 POST 请求。如何将此信息转换为来自我的 index.js 文件的 POST 请求?
例如,如果我想 POST Red Hot Chili Peppers 的 Spotify 代码 "Suck My Kiss",发送 Spotify 曲目 ID 的代码会是什么样子?
3
artist:
"Red Hot Chili Peppers"
id:
"4"
maxEmotion:
"anger"
score:
"0.578864"
song:
"Suck My Kiss"
spotifyCode:
"spotify:track:0psB5QzGb4653K0uaPgEyh"
我试过使用 Webhook 格式,但不确定我是否理解正确的使用方法,而且这意味着我的整个 index.js 文件都没有用(因为你只能有一个或其他在 Google 助手上)。所以我很想知道如何在 index.js 文件中执行此操作(如果可能的话)?我在下面包含了最重要的代码:
'use strict';
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const {WebhookClient} = require('dialogflow-fulfillment');
admin.initializeApp({
credential: admin.credential.applicationDefault(),
databaseURL: 'ws://mood-magic-four-ptwvjb.firebaseio.com/'
});
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
//4
function playAngrySong (agent) {
// Get the database collection 'dialogflow' and document 'agent'
return admin.database().ref((`3`) ).once('value').then((snapshot) => {
const song = snapshot.child('song').val();
const artist = snapshot.child('artist').val();
agent.add(`I will play ${song} by ${artist}`);
// THIS IS WHERE I NEED THE POST TO THE SPOTIFY API
});
}
// Map from Dialogflow intent names to functions to be run when the intent is matched
let intentMap = new Map();
intentMap.set('-Angry - yes', playAngrySong);
agent.handleRequest(intentMap);
});
已解决:这是下面的代码(使用 Google 助理代理在播放前说 'Enjoy'):
function playMusic(agent){
agent.add('Enjoy!');
var request = require("request");
var options = { method: 'PUT',
url: 'https://api.spotify.com/v1/me/player/play',
headers:
{ 'cache-control': 'no-cache,no-cache',
'Content-Type': 'application/json',
Authorization: `Bearer ${Access.accessToken}`,
Accept: 'application/json' },
body: { uris: [ `${SongInfo.Spotify_uri}` ] },
json: true };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log('This is the body of the play music request ' + body);
});
}