Итак, я пытаюсь создать базовое приложение реагирования, которое использует API Spotify для воспроизведения музыки. Я очень новичок, чтобы реагировать, и до сих пор я написал / собрал два разных кода из разных источников. Первый - «App.js» (который я получил, следуя https://www.youtube.com/watch?v=prayNyuN3w0&t=685s), который аутентифицирует пользователя, генерирует идентификатор токена.
Поэтому, когда я запускаю его на localhost: 3000, приложение переходит на localhost: 8888 для получения токена, а затем обратно на localhost: 3000, где размещается мое веб-приложение.
Второй - это очень простой HTML-код "test.html", который я получил с сайта Spotify для разработчиков https://developer.spotify.com/documentation/web-playback-sdk/quick-start/, который позволяет пользователю воспроизводить музыку, если токен был жестко запрограммирован в HTML ,
Я хочу объединить функциональность этих двух так, чтобы после создания токена приложение позволяло пользователю воспроизводить музыку с помощью утилиты Spotify connect.
Я попытался скопировать html в index.js, но, поскольку там нужен токен, я не знаю, как и где передать токен в index.html.
Кроме того, используя JavaScript для воспроизведения внутри componentDidMount, но это дает мне ошибку, говоря, что «spotify.player» не является конструктором
test.html
<!DOCTYPE html>
<html>
<head>
<title>Spotify Web Playback SDK Quick Start Tutorial</title>
</head>
<body>
<h1>Spotify Web Playback SDK Quick Start Tutorial</h1>
<h2>Open your console log: <code>View > Developer > JavaScript Console</code></h2>
<script src="https://sdk.scdn.co/spotify-player.js"></script>
<script>
window.onSpotifyWebPlaybackSDKReady = () => {
const token = '[My Spotify Web API access token]';
const player = new Spotify.Player({
name: 'Web Playback SDK Quick Start Player',
getOAuthToken: cb => { cb(token); }
});
// Error handling
player.addListener('initialization_error', ({ message }) => { console.error(message); });
player.addListener('authentication_error', ({ message }) => { console.error(message); });
player.addListener('account_error', ({ message }) => { console.error(message); });
player.addListener('playback_error', ({ message }) => { console.error(message); });
// Playback status updates
player.addListener('player_state_changed', state => { console.log(state); });
// Ready
player.addListener('ready', ({ device_id }) => {
console.log('Ready with Device ID', device_id);
});
// Not Ready
player.addListener('not_ready', ({ device_id }) => {
console.log('Device ID has gone offline', device_id);
});
// Connect to the player!
player.connect();
};
</script>
</body>
</html>
App.js
import React, { Component } from 'react';
import './App.css';
import Spotify from 'spotify-web-api-js';
const spotifyApi = new Spotify();
class App extends Component {
constructor(){
super();
const params = this.getHashParams();
const token = params.access_token;
if(token){
spotifyApi.setAccessToken(token);
}
this.state={
loggedIn: token ? true : false,
nowPlaying: { name:'Not Checked',
albumArt: ''
}
}
}
getHashParams() {
var hashParams = {};
var e, r = /([^&;=]+)=?([^&;]*)/g,
q = window.location.hash.substring(1);
e = r.exec(q)
while (e) {
hashParams[e[1]] = decodeURIComponent(e[2]);
e = r.exec(q);
}
return hashParams;
}
getNowPlaying(){
spotifyApi.getMyCurrentPlaybackState()
.then((response) => {
this.setState({
nowPlaying: {
name: response.item.name,
albumArt: response.item.album.images[0].url
}
});
})
}
render() {
return (
<div className="App">
<a href='http://localhost:8888' > Login to Spotify </a>
<div>
Now Playing: { this.state.nowPlaying.name }
</div>
<div>
<img src={this.state.nowPlaying.albumArt} style={{ height: 150 }}/>
</div>
{ this.state.loggedIn &&
<button onClick={() => this.getNowPlaying()}>
Check Now Playing
</button>
}
</div>
);
}
}
export default App;
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<title>React App</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<script src="https://sdk.scdn.co/spotify-player.js"></script>
<div id="root"></div>
</body>
</html>
Я просто хочу каким-то образом получить токен и воспроизвести музыку, используя этот токен, но, поскольку я не знаком с JS и программированием на основе событий, и раньше я вообще не использовал API, это действительно сложно для меня.