This commit is contained in:
matteo
2019-03-03 15:09:54 +01:00
parent d99f2fe057
commit cb35dfbe65
3 changed files with 137 additions and 64 deletions
+3
View File
@@ -50,6 +50,9 @@ class VideoInfo extends React.Component {
comments: commentThreadResponse.data.items, comments: commentThreadResponse.data.items,
isLoaded: true isLoaded: true
}); });
let index = videosResponse.data.items[0].topicDetails.relevantTopicIds.indexOf('/m/04rlf');
videosResponse.data.items[0].topicDetails.relevantTopicIds.splice(index, 1);
localStorage.setItem('lastTopic',videosResponse.data.items[0].topicDetails.relevantTopicIds);
}), error => { }), error => {
console.error(error); console.error(error);
this.setState({ this.setState({
+89 -20
View File
@@ -38,13 +38,73 @@ class Wikipedia extends Component {
case "P2624": // metrolyrics id case "P2624": // metrolyrics id
return (<a target="_blank" rel="noopener noreferrer" href={`http://www.metrolyrics.com/${value}`}>{`${value}`}</a>) return (<a target="_blank" rel="noopener noreferrer" href={`http://www.metrolyrics.com/${value}`}>{`${value}`}</a>)
case "P1651": // youtubeid case "P1651": // youtubeid
return ( <Link to={{pathname:`/video/${value}`}}>{`${value}`}</Link>) return (<Link to={{ pathname: `/video/${value}` }}>{`${value}`}</Link>)
case "P2581": case "P2581":
return (<a target="_blank" rel="noopener noreferrer" href={`https://babelnet.org/synset?word=bn:${value}`}>{`${value}`}</a>) return (<a target="_blank" rel="noopener noreferrer" href={`https://babelnet.org/synset?word=bn:${value}`}>{value}</a>)
case "P1827": case "P1827":
return (<a target="_blank" rel="noopener noreferrer" href={`https://musicbrainz.org/iswc/${value}`}>{`${value}`}</a>) return (<a target="_blank" rel="noopener noreferrer" href={`https://musicbrainz.org/iswc/${value}`}>{value}</a>)
default: default:
return(`${value}`) return (`${value}`);
}
}
// P175 = artist
// P361 = album
getMusicBrainz = (P175, P361, ) => {
const musicbrainzBaseUrl = "https://musicbrainz.org/ws/2"; // more readable
let artist = this.props.artist || this.props.artist2;
let title = this.props.title || this.props.title2;
console.log('porcodio', P175.toLowerCase(), artist.trim().toLowerCase(), P175.toLowerCase() === artist.trim().toLowerCase())
if (P175.toLowerCase() === artist.trim().toLowerCase()) {
axios
.get(`https://musicbrainz.org/ws/2/recording`, {
params: {
'query': `${title.trim()} AND artistname:${artist.trim()} AND release:${P361}`,
'limit': 1,
'fmt': 'json'
}
})
.then(resP175EqArtist => {
axios
.get(`${musicbrainzBaseUrl}/recording/${resP175EqArtist.data.recordings[0].id}`, {
params: {
'inc': 'work-rels+artists+releases',
'fmt': 'json'
}
})
.then(resRecordingQuery => {
let x = resRecordingQuery.data.relations.map(x => x['target-type'] === 'work' ? x.work.id : "").toString();
console.log(x,'resRecordingQuery.data true', resRecordingQuery.data)
}, err => { console.error(err) })
}
, err => console.error(err))
}
else if (P175.toLowerCase() === title.trim().toLowerCase()) { // video title was title - artist
// axios
// .get(`${musicbrainzBaseUrl}/release-group/`)
// .then(res => { }, err => { })
axios
.get(`https://musicbrainz.org/ws/2/recording`, {
params: {
'query': `"${artist.trim()}" AND artistname:"${title.trim()}"`, //rgid:${res.data.}
'limit': 1,
'fmt': 'json'
}
})
.then(resP175EqTitle => {
axios
.get(`${musicbrainzBaseUrl}/recording/${resP175EqTitle.data.recordings[0].id}`, {
params: {
'inc': 'work-rels+artists+releases',
'fmt': 'json'
}
})
.then(resRecordingQuery => {
let x = resRecordingQuery.data.relations.map(x => x['target-type'] === 'work' ? x.work.id : "").toString();
console.log(x, 'resRecordingQuery.data false', resRecordingQuery.data)
}, err => { console.error(err) })
}
, err => console.error(err))
} }
} }
@@ -62,20 +122,24 @@ class Wikipedia extends Component {
.map(x => wikidatatmp.claims[x][0].mainsnak.datavalue.value.id) .map(x => wikidatatmp.claims[x][0].mainsnak.datavalue.value.id)
.filter(x => typeof x === 'string'), 'en')) .filter(x => typeof x === 'string'), 'en'))
]) ])
.then(axios.spread((resKey, resQ) => { .then(
axios.spread((resKey, resQ) => {
this.setState({ this.setState({
wikidatakeys: Object.entries(resKey.data.entities), wikidatakeys: Object.entries(resKey.data.entities),
wikidataQ: resQ.data.entities, wikidataQ: resQ.data.entities,
isWDataLoaded: true isWDataLoaded: true
}) })
this.getMusicBrainz(resQ.data.entities[wikidatatmp.claims.P175[0].mainsnak.datavalue.value.id].labels.en.value,
resQ.data.entities[wikidatatmp.claims.P361[0].mainsnak.datavalue.value.id].labels.en.value);
})) }))
if (wikidatatmp.sitelinks.enwiki) if (wikidatatmp.sitelinks.enwiki)
wikijs() wikijs()
.page(wikidatatmp.sitelinks.enwiki.title) .page(wikidatatmp.sitelinks.enwiki.title)
.then(page => Promise.all([page.fullInfo(), page.summary()])) .then(page => Promise.all([page.fullInfo()]))
.then(wikipediaRes => this.setState({ .then(wikipediaRes => this.setState({
wikipedia: { wikipedia: {
"desc": wikipediaRes[1], // "desc": wikipediaRes[1],
"info": wikipediaRes[0].general "info": wikipediaRes[0].general
}, },
wikipediakeys: Object.keys(wikipediaRes[0].general), wikipediakeys: Object.keys(wikipediaRes[0].general),
@@ -115,7 +179,7 @@ class Wikipedia extends Component {
if (wikidataP1651Res.data.results.bindings.length) { // got a match if (wikidataP1651Res.data.results.bindings.length) { // got a match
this.getWikidataPage(wdk.simplify.sparqlResults(wikidataP1651Res.data))// set in state wikidata this.getWikidataPage(wdk.simplify.sparqlResults(wikidataP1651Res.data))// set in state wikidata
.then(() => { .then(() => {
if (this.state.wikidata.claims.P435) { // p435 == musicbrainzWorkId /* if (this.state.wikidata.claims.P435) { // p435 == musicbrainzWorkId
axios.get(`${musicbrainzBaseUrl}/work/${this.state.wikidata.claims.P435[0].mainsnak.datavalue.value}`, { // get musicbrainz info axios.get(`${musicbrainzBaseUrl}/work/${this.state.wikidata.claims.P435[0].mainsnak.datavalue.value}`, { // get musicbrainz info
params: { params: {
'inc': 'artist-rels url-rels', 'inc': 'artist-rels url-rels',
@@ -150,11 +214,12 @@ class Wikipedia extends Component {
this.setState({ musicbrainz: musicbrainzWorkRes2.data, isMBLoaded: true }) this.setState({ musicbrainz: musicbrainzWorkRes2.data, isMBLoaded: true })
); );
}); });
} } */
}); });
} }
else { //oof else { //oof -- no P1651 :(
axios.get(`${musicbrainzBaseUrl}/work`, { // eslint-disable-next-line no-lone-blocks
{/* axios.get(`${musicbrainzBaseUrl}/work`, {
params: { params: {
'query': 'undefined' === typeof this.props.title ? ('undefined' === typeof this.props.title2 ? this.props.artist2 : this.props.title2) : this.props.title, 'query': 'undefined' === typeof this.props.title ? ('undefined' === typeof this.props.title2 ? this.props.artist2 : this.props.title2) : this.props.title,
'limit': 1, 'limit': 1,
@@ -189,16 +254,20 @@ class Wikipedia extends Component {
} }
}) })
) )
}) }) */}
} }
return new Promise ((resolve,reject) => { return new Promise((resolve, reject) => {
timerId1 = window.setInterval(()=>{ timerId1 = window.setInterval(() => {
if((this.state.wikipedia !== 'undefined') && (this.state.wikidataQ !== 'undefined') && (this.state.wikidata !== 'undefined')) if (this.state.wikidataQ == undefined || this.state.wikidata == undefined) { }
else {
resolve({ resolve({
artist: this.state.wikipedia.info.artist.toString(), artist: this.state.wikidataQ[this.state.wikidata.claims["P175"][0].mainsnak.datavalue.value.id].labels.en.value.toString(),
genre: this.state.wikidataQ[this.state.wikidata.claims["P136"][0].mainsnak.datavalue.value.id].labels.en.value.toString() genre: this.state.wikidataQ[this.state.wikidata.claims["P136"][0].mainsnak.datavalue.value.id].labels.en.value.toString()
}) })
}, 700) }
}, 1000)
}) })
}).then((res) => { }).then((res) => {
let tmp = JSON.parse(localStorage['currentVideoInfo']); let tmp = JSON.parse(localStorage['currentVideoInfo']);
@@ -208,9 +277,9 @@ class Wikipedia extends Component {
artist: res.artist, artist: res.artist,
genre: res.genre genre: res.genre
} }
localStorage.setItem('currentVideoInfo',JSON.stringify(tmp)); localStorage.setItem('currentVideoInfo', JSON.stringify(tmp));
}) })
.finally(()=>this.setState({ isLoaded: true })); .finally(() => this.setState({ isLoaded: true }));
} }
@@ -255,7 +324,7 @@ class Wikipedia extends Component {
</td> </td>
<td>{ <td>{
typeof wikidata.claims[key[0]][0].mainsnak.datavalue.value === "string" ? // wikidata external typeof wikidata.claims[key[0]][0].mainsnak.datavalue.value === "string" ? // wikidata external
this.getExternalLink(key[0],wikidata.claims[key[0]][0].mainsnak.datavalue.value) : this.getExternalLink(key[0], wikidata.claims[key[0]][0].mainsnak.datavalue.value) :
typeof wikidata.claims[key[0]][0].mainsnak.datavalue.value.id === "string" ? // wikidata Q typeof wikidata.claims[key[0]][0].mainsnak.datavalue.value.id === "string" ? // wikidata Q
<><a target="_blank" rel="noopener noreferrer" href={`https://www.wikidata.org/wiki/${wikidata.claims[key[0]][0].mainsnak.datavalue.value.id}`}> <><a target="_blank" rel="noopener noreferrer" href={`https://www.wikidata.org/wiki/${wikidata.claims[key[0]][0].mainsnak.datavalue.value.id}`}>
{`${this.state.wikidataQ[wikidata.claims[key[0]][0].mainsnak.datavalue.value.id].labels.en ? {`${this.state.wikidataQ[wikidata.claims[key[0]][0].mainsnak.datavalue.value.id].labels.en ?
+1
View File
@@ -18,6 +18,7 @@ localStorage['currentVideoInfo']? function(){}() : localStorage.setItem('current
'artist':'Seven Nation Army', 'artist':'Seven Nation Army',
'genre':'Rock' 'genre':'Rock'
})); }));
localStorage['lastTopic']? function(){}() : localStorage.setItem('lastTopic','/m/04rlf');
ReactDOM.render(<BrowserRouter><App /></BrowserRouter>, document.getElementById('root')); ReactDOM.render(<BrowserRouter><App /></BrowserRouter>, document.getElementById('root'));
registerServiceWorker(); registerServiceWorker();