Archived
reccomender similarity genere
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 36 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 28 KiB |
@@ -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 (
|
||||||
|
<Container>
|
||||||
|
<Row className="show-Container text-center">
|
||||||
|
<Col xs={12} sm={4} className="person-wrapper">
|
||||||
|
<Image src="assets/person-1.jpg" roundedCircle className="profile-pic"/>
|
||||||
|
<h3>Matteo Scorzafava</h3>
|
||||||
|
<p>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.</p>
|
||||||
|
</Col>
|
||||||
|
<Col xs={12} sm={4} className="person-wrapper">
|
||||||
|
<Image src="assets/person-2.jpg" roundedCircle className="profile-pic"/>
|
||||||
|
<h3>Simone Ferrari</h3>
|
||||||
|
<p>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.</p>
|
||||||
|
</Col>
|
||||||
|
<Col xs={12} sm={4} className="person-wrapper">
|
||||||
|
<Image src="assets/person-3.jpg" roundedCircle className="profile-pic"/>
|
||||||
|
<h3>Gregorio Giacchetti</h3>
|
||||||
|
<p>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.</p>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</Container>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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 (
|
||||||
|
<React.Fragment>
|
||||||
|
<Row>
|
||||||
|
<Switch>
|
||||||
|
<Route path='/video/:id/vitali' component={fvitali} />
|
||||||
|
<Route path='/search/:query' component={Search} />
|
||||||
|
<Route path='/video/:id/random' component={Random} />
|
||||||
|
<Route path='/video/:id/popGlobalAssoluta' component={popGlobaleAssoluta} />
|
||||||
|
<Route path='/video/:id/recent' component={Recent} />
|
||||||
|
|
||||||
|
{/* lasciare questo per ultimo */}
|
||||||
|
<Route component={Related} />
|
||||||
|
</Switch>
|
||||||
|
</Row>
|
||||||
|
</React.Fragment>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Suggestion;
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
@@ -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 <React.Fragment>{this.state.error.message} -- {this.state.error.response.data.error.errors[0].reason} </React.Fragment>;
|
||||||
|
} else if (!this.state.isLoaded) {
|
||||||
|
return <Col className="text-center">
|
||||||
|
<div className="lds-ellipsis"><div></div><div></div><div></div><div></div></div>
|
||||||
|
</Col>;
|
||||||
|
} else {
|
||||||
|
return (
|
||||||
|
<ul className="list-unstyled">{
|
||||||
|
this.state.items.map(item => (
|
||||||
|
<Link
|
||||||
|
key={item.id.videoId}
|
||||||
|
as="li" className="media mx-5 my-1 suggItem"
|
||||||
|
to={{
|
||||||
|
pathname: '/video/' + item.id,
|
||||||
|
}}>
|
||||||
|
<img
|
||||||
|
width={240}
|
||||||
|
height={120}
|
||||||
|
className="align-self-center mr-3"
|
||||||
|
src={item.thumbnail}
|
||||||
|
alt={'Thumbnail of ' + item.name}
|
||||||
|
/>
|
||||||
|
<Media.Body>
|
||||||
|
<h5>{item.name}</h5>
|
||||||
|
<p>{item.description.substring(0,200)}</p>
|
||||||
|
<p>Visto: {item.timesWatched} volte <br />
|
||||||
|
Reccomender: popLocaleAss</p>
|
||||||
|
</Media.Body>
|
||||||
|
</Link>
|
||||||
|
))
|
||||||
|
}</ul>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default popLocaleAss;
|
||||||
@@ -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 <React.Fragment>{this.state.error.message} -- {this.state.error.response.data.error.errors[0].reason} </React.Fragment>;
|
||||||
|
} else if (!this.state.isLoaded) {
|
||||||
|
return <Col className="text-center">
|
||||||
|
<div className="lds-ellipsis"><div></div><div></div><div></div><div></div></div>
|
||||||
|
</Col>;
|
||||||
|
} else {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<h4>Artist Similarity: {this.state.artist}</h4>
|
||||||
|
<ul className="list-unstyled">{
|
||||||
|
this.state.res.items.map(item => (
|
||||||
|
<Link
|
||||||
|
key={item.id.videoId}
|
||||||
|
as="li" className="media mx-5 my-1 suggItem"
|
||||||
|
to={{
|
||||||
|
pathname: '/video/' + item.id.videoId,
|
||||||
|
search:"?ref=similarityArtist"
|
||||||
|
}}>
|
||||||
|
<img
|
||||||
|
width={240}
|
||||||
|
height={120}
|
||||||
|
className="align-self-center mr-3"
|
||||||
|
src={item.snippet.thumbnails.medium.url}
|
||||||
|
alt={'Thumbnail of ' + item.snippet.title}
|
||||||
|
/>
|
||||||
|
<Media.Body>
|
||||||
|
<h5>{item.snippet.title}</h5>
|
||||||
|
<p>{item.snippet.description}</p>
|
||||||
|
<p>Reccomender: similarityArtist</p>
|
||||||
|
</Media.Body>
|
||||||
|
</Link>
|
||||||
|
))
|
||||||
|
}</ul>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default similarityArtist;
|
||||||
Reference in New Issue
Block a user