diff --git a/public/assets/person-1.jpg b/public/assets/person-1.jpg
new file mode 100644
index 0000000..1105563
Binary files /dev/null and b/public/assets/person-1.jpg differ
diff --git a/public/assets/person-2.jpg b/public/assets/person-2.jpg
new file mode 100644
index 0000000..d61a1a7
Binary files /dev/null and b/public/assets/person-2.jpg differ
diff --git a/public/assets/person-3.jpg b/public/assets/person-3.jpg
new file mode 100644
index 0000000..761217e
Binary files /dev/null and b/public/assets/person-3.jpg differ
diff --git a/src/AboutUs.js b/src/AboutUs.js
new file mode 100644
index 0000000..c01711b
--- /dev/null
+++ b/src/AboutUs.js
@@ -0,0 +1,29 @@
+import React, { Component } from 'react'
+import { Container, Row, Col, Image } from 'react-bootstrap';
+import './css/AboutUs.css';
+
+export default class AboutUs extends Component {
+ render() {
+ return (
+
+
+
+
+ Matteo Scorzafava
+ That's a crooked tree. We'll send him to Washington. These little son of a guns hide in your brush and you just have to push them out.
+
+
+
+ Simone Ferrari
+ That's a crooked tree. We'll send him to Washington. These little son of a guns hide in your brush and you just have to push them out.
+
+
+
+ Gregorio Giacchetti
+ That's a crooked tree. We'll send him to Washington. These little son of a guns hide in your brush and you just have to push them out.
+
+
+
+ )
+ }
+}
diff --git a/src/Suggestion.js b/src/Suggestion.js
new file mode 100644
index 0000000..8d17c39
--- /dev/null
+++ b/src/Suggestion.js
@@ -0,0 +1,55 @@
+import React, { Component } from 'react';
+import { Row } from 'react-bootstrap';
+import { Switch, Route } from 'react-router';
+import Random from './reccomenders/Random';
+import Related from './reccomenders/Related';
+import Search from './reccomenders/Search';
+import fvitali from './reccomenders/fvitali';
+import popGlobaleAssoluta from './reccomenders/popGlobaleAssoluta';
+import Recent from './reccomenders/Recent';
+
+// and so on..
+
+class Suggestion extends Component {
+
+ // static getDerivedStateFromProps(nextProps, prevState) {
+
+ // }
+
+ // componentDidMount() {
+
+ // }
+
+ // shouldComponentUpdate(nextProps, nextState) {
+
+ // }
+
+ // componentDidUpdate(prevProps, prevState) {
+
+ // }
+
+ // componentWillUnmount() {
+
+ // }
+
+ render() {
+ return (
+
+
+
+
+
+
+
+
+
+ {/* lasciare questo per ultimo */}
+
+
+
+
+ );
+ }
+}
+
+export default Suggestion;
\ No newline at end of file
diff --git a/src/css/AboutUs.css b/src/css/AboutUs.css
new file mode 100644
index 0000000..72e67db
--- /dev/null
+++ b/src/css/AboutUs.css
@@ -0,0 +1,18 @@
+.person-wrapper {
+ margin-bottom: 2em;
+}
+
+.profile-pic {
+ width: 50%;
+}
+
+.btn-primary {
+ background-image: none;
+ border: none;
+ border-radius: 0;
+ background-color: #2892D7;
+}
+
+h3 {
+ margin-bottom: 1em;
+}
\ No newline at end of file
diff --git a/src/reccomenders/genreSimilarity.js b/src/reccomenders/genreSimilarity.js
new file mode 100644
index 0000000..b9b5e4e
--- /dev/null
+++ b/src/reccomenders/genreSimilarity.js
@@ -0,0 +1,43 @@
+import React, { Component } from 'react';
+import axios from 'axios';
+
+class genreSimilarity extends Component {
+ state={
+ videoId : localStorage['lastId'],
+ videoTopic : localStorage['lastTopic'],
+ items : []
+ }
+
+ componentDidMount() {
+ axios.get("https://www.googleapis.com/youtube/v3/search", {
+ params: {
+ 'part': 'snippet',
+ 'topicId': this.videoTopic,
+ 'type': 'video',
+ 'maxResults': '21',
+ 'key': 'AIzaSyA21Odw9UdfiOJnxvA_eDfOW0OxuUfHKig'
+ }
+ }).then(
+ response => {
+ this.setState({
+ items: response.data.items,
+ })
+ console.log(response);
+ },
+ error => {
+ console.error(error);
+ }
+ )
+ console.log("dfadfsd");
+ }
+
+ render(){
+ return(3);
+ }
+}
+
+Related.propTypes = {
+
+};
+
+export default genreSimilarity;
\ No newline at end of file
diff --git a/src/reccomenders/popLocaleAss.js b/src/reccomenders/popLocaleAss.js
new file mode 100644
index 0000000..ec1425e
--- /dev/null
+++ b/src/reccomenders/popLocaleAss.js
@@ -0,0 +1,114 @@
+import React from 'react';
+import axios from 'axios';
+import { Link } from 'react-router-dom';
+import { Col, Media } from 'react-bootstrap';
+
+class popLocaleAss extends React.Component {
+
+ state = {
+ isLoaded: false,
+ error: null,
+ res: null
+ }
+
+ // static getDerivedStateFromProps(nextProps, prevState) {
+
+ // }
+
+ componentDidMount() {
+ axios
+ .get('http://site1854.tw.cs.unibo.it/videotrack')
+ .then(res=>{
+ this.getThumbnailsNames(res.data.sort((a, b) => a.timesWatched - b.timesWatched).reverse());
+ }
+ ,error=>this.setState({error}))
+ }
+
+ // shouldComponentUpdate(nextProps, nextState) {
+
+ // }
+
+ // componentDidUpdate(prevProps, prevState) {
+ // if (prevProps.match.params !== this.props.match.params) {
+ // this.setState({ isLoaded: false })
+ // }
+ // }
+
+ // componentWillUnmount() {
+
+ // }
+
+ getThumbnailsNames(reccomended) {
+ let idToLookFor = reccomended.map(item => item.id);
+ axios.get('https://www.googleapis.com/youtube/v3/videos', {
+ params: {
+ part: 'snippet',
+ id: idToLookFor.toString(),
+ key: 'AIzaSyA21Odw9UdfiOJnxvA_eDfOW0OxuUfHKig',
+ fields: 'items(id,snippet/thumbnails/medium,snippet/title,snippet/description)'
+ }
+ })
+
+ .then(
+ res1 => {
+ res1.data.items.map(resCurrentValue =>
+ Object.defineProperties(
+ reccomended.find(videoItem => {
+ return videoItem.id === resCurrentValue.id;
+ }),
+ {
+ 'thumbnail':
+ { value: resCurrentValue.snippet.thumbnails.medium.url },
+ 'name':
+ {value: resCurrentValue.snippet.title},
+ 'description':
+ {value: resCurrentValue.snippet.description }
+ })
+ );
+ this.setState({
+ isLoaded: true,
+ items: reccomended
+ });
+ })
+ }
+
+
+ render() {
+ if (this.state.error) {
+ return {this.state.error.message} -- {this.state.error.response.data.error.errors[0].reason} ;
+ } else if (!this.state.isLoaded) {
+ return
+
+ ;
+ } else {
+ return (
+
+ );
+ }
+ }
+}
+
+export default popLocaleAss;
\ No newline at end of file
diff --git a/src/reccomenders/similarityArtist.js b/src/reccomenders/similarityArtist.js
new file mode 100644
index 0000000..abc6ec0
--- /dev/null
+++ b/src/reccomenders/similarityArtist.js
@@ -0,0 +1,111 @@
+import React from 'react';
+import axios from 'axios';
+import { Link } from 'react-router-dom';
+import { Col, Media } from 'react-bootstrap';
+
+class similarityArtist extends React.Component {
+
+ state = {
+ isLoaded: false,
+ error: null,
+ res: null
+ }
+
+ // static getDerivedStateFromProps(nextProps, prevState) {
+
+ // }
+
+ componentDidMount() {
+ let timerId1;
+ let promise = new Promise ((resolve,reject) => {
+ timerId1 = window.setInterval(()=>{
+ if(localStorage['lastId'] === JSON.parse(localStorage['currentVideoInfo']).id)
+ resolve(true)
+ },1000)
+ })
+ promise.then(()=>{
+ window.clearInterval(timerId1);
+ this.setState({artist: JSON.parse(localStorage['currentVideoInfo']).artist})
+ axios.get('https://www.googleapis.com/youtube/v3/search', {
+ params: {
+ 'part': 'snippet',
+ 'q': JSON.parse(localStorage['currentVideoInfo']).artist,
+ 'videoEmbeddable': 'true',
+ 'type': 'video',
+ 'maxResults': 15,
+ 'topicId': '/m/04rlf, /m/02jjt',
+ 'key': 'AIzaSyA21Odw9UdfiOJnxvA_eDfOW0OxuUfHKig'
+ }
+ }).then(
+ res =>
+ this.setState({
+ res: res.data,
+ isLoaded: true
+ })
+ ,
+ error => this.setState({
+ error
+ })
+ )
+ })
+
+ }
+
+ // shouldComponentUpdate(nextProps, nextState) {
+
+ // }
+
+ // componentDidUpdate(prevProps, prevState) {
+ // if (prevProps.match.params !== this.props.match.params) {
+ // this.setState({ isLoaded: false })
+ // }
+ // }
+
+ // componentWillUnmount() {
+
+ // }
+
+
+
+ render() {
+ if (this.state.error) {
+ return {this.state.error.message} -- {this.state.error.response.data.error.errors[0].reason} ;
+ } else if (!this.state.isLoaded) {
+ return
+
+ ;
+ } else {
+ return (
+ <>
+ Artist Similarity: {this.state.artist}
+
+ >
+ );
+ }
+ }
+}
+
+export default similarityArtist;
\ No newline at end of file