Archived
wikipedia e altro
This commit is contained in:
+72
-35
@@ -1,10 +1,11 @@
|
||||
import React, { Component } from 'react';
|
||||
// import PropTypes from 'prop-types';
|
||||
import { Link } from 'react-router-dom';
|
||||
import wikijs from 'wikijs';
|
||||
import wdk from 'wikidata-sdk';
|
||||
import axios from 'axios';
|
||||
import { Table } from 'react-bootstrap';
|
||||
import moment from 'moment';
|
||||
import "./css/Wikipedia.css"
|
||||
|
||||
class Wikipedia extends Component {
|
||||
|
||||
@@ -26,9 +27,23 @@ class Wikipedia extends Component {
|
||||
return moment(a, [moment.ISO_8601, 'YYYY']).format('YYYY');
|
||||
}
|
||||
|
||||
filterWikipediaRes(results) {
|
||||
console.log('filterWikipediaRes', results);
|
||||
return results[0];
|
||||
getExternalLink(P, value) {
|
||||
switch (P) {
|
||||
case "P436": //MB release group id
|
||||
return (<a target="_blank" rel="noopener noreferrer" href={`https://musicbrainz.org/release-group/${value}`}>{`${value}`}</a>)
|
||||
case "P435": // MB work id
|
||||
return (<a target="_blank" rel="noopener noreferrer" href={`https://musicbrainz.org/work/${value}`}>{`${value}`}</a>)
|
||||
case "P1954": // discogs id
|
||||
return (<a target="_blank" rel="noopener noreferrer" href={`https://www.discogs.com/master/${value}`}>{`${value}`}</a>)
|
||||
case "P2624": // metrolyrics id
|
||||
return (<a target="_blank" rel="noopener noreferrer" href={`http://www.metrolyrics.com/${value}`}>{`${value}`}</a>)
|
||||
case "P1651": // youtubeid
|
||||
return ( <Link to={{pathname:`/video/${value}`}}>{`${value}`}</Link>)
|
||||
case "P2581":
|
||||
return (<a target="_blank" rel="noopener noreferrer" href={`https://babelnet.org/synset?word=bn:${value}`}>{`${value}`}</a>)
|
||||
default:
|
||||
return(`${value}`)
|
||||
}
|
||||
}
|
||||
|
||||
getWikidataPage(wikidataPXXXXResID) {
|
||||
@@ -36,13 +51,22 @@ class Wikipedia extends Component {
|
||||
.then(wikidataPage => {
|
||||
let wikidatatmp = wikidataPage.data.entities[Object.keys(wikidataPage.data.entities)[0]];
|
||||
this.setState({
|
||||
wikidata: wikidatatmp,
|
||||
wikidatakeys: Object.keys(wikidatatmp.claims),
|
||||
isWDataLoaded: true
|
||||
wikidata: wikidatatmp
|
||||
});
|
||||
wdk.getManyEntities(Object.keys(wikidatatmp.claims), 'en').then(
|
||||
res=> console.info(res,'eee')
|
||||
)
|
||||
axios.all([
|
||||
axios.get(wdk.getManyEntities(Object.keys(wikidatatmp.claims), 'en'))
|
||||
, axios.get(wdk.getManyEntities(
|
||||
Object.keys(wikidatatmp.claims)
|
||||
.map(x => wikidatatmp.claims[x][0].mainsnak.datavalue.value.id)
|
||||
.filter(x => typeof x === 'string'), 'en'))
|
||||
])
|
||||
.then(axios.spread((resKey, resQ) => {
|
||||
this.setState({
|
||||
wikidatakeys: Object.entries(resKey.data.entities),
|
||||
wikidataQ: resQ.data.entities,
|
||||
isWDataLoaded: true
|
||||
})
|
||||
}))
|
||||
if (wikidatatmp.sitelinks.enwiki)
|
||||
wikijs()
|
||||
.page(wikidatatmp.sitelinks.enwiki.title)
|
||||
@@ -55,9 +79,10 @@ class Wikipedia extends Component {
|
||||
wikipediakeys: Object.keys(wikipediaRes[0].general),
|
||||
isWikiLoaded: true
|
||||
}))
|
||||
else{ console.info('called here')
|
||||
this.findWikiPage();}
|
||||
|
||||
else {
|
||||
console.info('called here')
|
||||
this.findWikiPage();
|
||||
}
|
||||
}, error => console.error(error))
|
||||
}
|
||||
|
||||
@@ -66,8 +91,8 @@ class Wikipedia extends Component {
|
||||
console.info(wikiquery)
|
||||
return wikijs()
|
||||
.find(wikiquery)
|
||||
.then(res => {
|
||||
console.info(res,'a');
|
||||
.then(res => {
|
||||
console.info(res, 'a');
|
||||
return Promise.all([res.fullInfo(), res.summary()]);
|
||||
}) // find by props.title (props.artist song)
|
||||
.then(wikipediaRes => this.setState({
|
||||
@@ -80,9 +105,10 @@ class Wikipedia extends Component {
|
||||
}))
|
||||
}
|
||||
|
||||
wrapper() {
|
||||
componentDidMount() {
|
||||
const musicbrainzBaseUrl = "https://musicbrainz.org/ws/2"; // more readable
|
||||
return axios.get(wdk.getReverseClaims('P1651', this.props.videoId)) // P1651 is youtube_video_id property
|
||||
// let timerId1;
|
||||
axios.get(wdk.getReverseClaims('P1651', this.props.videoId)) // P1651 is youtube_video_id property
|
||||
.then(wikidataP1651Res => {
|
||||
if (wikidataP1651Res.data.results.bindings.length) { // got a match
|
||||
this.getWikidataPage(wdk.simplify.sparqlResults(wikidataP1651Res.data))// set in state wikidata
|
||||
@@ -145,8 +171,8 @@ class Wikipedia extends Component {
|
||||
})
|
||||
]).then(
|
||||
axios.spread((wikidataP435Res, musicbrainzWorkRes) => {
|
||||
this.setState({
|
||||
musicbrainz: musicbrainzWorkRes.data,
|
||||
this.setState({
|
||||
musicbrainz: musicbrainzWorkRes.data,
|
||||
isMBLoaded: true
|
||||
});
|
||||
if (wikidataP435Res.data.results.bindings.length) // found a match
|
||||
@@ -163,16 +189,19 @@ class Wikipedia extends Component {
|
||||
)
|
||||
})
|
||||
}
|
||||
return new Promise((resolve, reject) => resolve('ok'));
|
||||
|
||||
}).finally(() => {
|
||||
// let tmp = JSON.parse(localStorage['currentVideoInfo']);
|
||||
// tmp.id = this.props.videoId;
|
||||
// tmp.artist = this.state.wikipedia.info.artist;
|
||||
// tmp.genre = this.state.wikidataQ[this.state.wikidata.claims["P136"][0].mainsnak.datavalue.value.id].labels.en.value;
|
||||
// console.info(tmp)
|
||||
// // localStorage.setItem('currentVideoInfo',JSON.stringify(tmp));
|
||||
this.setState({ isLoaded: true })
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
componentDidMount() {
|
||||
this.wrapper().then(() => this.setState({ isLoaded: true }));
|
||||
}
|
||||
|
||||
|
||||
// shouldComponentUpdate(nextProps, nextState) {
|
||||
|
||||
// }
|
||||
@@ -193,7 +222,8 @@ class Wikipedia extends Component {
|
||||
} else if (!this.state.isLoaded) {
|
||||
return <React.Fragment>Loading...</React.Fragment>;
|
||||
} else {
|
||||
return (
|
||||
return (<>
|
||||
{/* {isWikiLoaded && wikipedia.desc} */}
|
||||
<Table bordered variant="dark" hover size="sm">
|
||||
<tbody>
|
||||
{isWikiLoaded &&
|
||||
@@ -206,15 +236,21 @@ class Wikipedia extends Component {
|
||||
}
|
||||
{isWDataLoaded &&
|
||||
this.state.wikidatakeys.map(key => (
|
||||
<tr key={key}>
|
||||
<td>{`${key} - ${wikidata.claims[key][0].mainsnak.datatype}`}</td>
|
||||
<tr key={key[0]}>
|
||||
<td>{`${key[0]} -
|
||||
${key[1].labels.en ? key[1].labels.en.value : ""} `}
|
||||
</td>
|
||||
<td>{
|
||||
typeof wikidata.claims[key][0].mainsnak.datavalue.value === "string" ?
|
||||
wikidata.claims[key][0].mainsnak.datavalue.value :
|
||||
typeof wikidata.claims[key][0].mainsnak.datavalue.value.id === "string" ?
|
||||
wikidata.claims[key][0].mainsnak.datavalue.value.id :
|
||||
typeof wikidata.claims[key][0].mainsnak.datavalue.value.time === "string" ?
|
||||
ISO_8601toYYYY(wikidata.claims[key][0].mainsnak.datavalue.value.time.toString()) :
|
||||
typeof wikidata.claims[key[0]][0].mainsnak.datavalue.value === "string" ?
|
||||
this.getExternalLink(key[0],wikidata.claims[key[0]][0].mainsnak.datavalue.value) :
|
||||
typeof wikidata.claims[key[0]][0].mainsnak.datavalue.value.id === "string" ?
|
||||
<><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.value :
|
||||
"??"}`}
|
||||
</a> {`(${wikidata.claims[key[0]][0].mainsnak.datavalue.value.id})`}</> :
|
||||
typeof wikidata.claims[key[0]][0].mainsnak.datavalue.value.time === "string" ?
|
||||
ISO_8601toYYYY(wikidata.claims[key[0]][0].mainsnak.datavalue.value.time.toString()) :
|
||||
""
|
||||
}</td>
|
||||
</tr>
|
||||
@@ -230,7 +266,7 @@ class Wikipedia extends Component {
|
||||
else if (relation["target-type"] === "url")
|
||||
return (<tr key={i}>
|
||||
<td>{relation.type}</td>
|
||||
<td><a href={relation.url.resource}>{relation.type}</a></td>
|
||||
<td><a target="_blank" rel="noopener noreferrer" href={relation.url.resource}>{relation.type}</a></td>
|
||||
</tr>)
|
||||
else
|
||||
return ("");
|
||||
@@ -238,6 +274,7 @@ class Wikipedia extends Component {
|
||||
}
|
||||
</tbody>
|
||||
</Table>
|
||||
</>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user