diff --git a/src/VideoInfo.js b/src/VideoInfo.js index a1fb3e7..05de0f2 100644 --- a/src/VideoInfo.js +++ b/src/VideoInfo.js @@ -97,10 +97,7 @@ class VideoInfo extends Component { } else { return ( - - {/* codice per tabs reccomenders */} - - + - - -

{this.state.others.artist}

-

{this.state.others.title}

- -
- -

C

-
-
- - -

2

- +
); } diff --git a/src/areainfo/Wikipedia.js b/src/areainfo/Wikipedia.js index df26961..63dd259 100644 --- a/src/areainfo/Wikipedia.js +++ b/src/areainfo/Wikipedia.js @@ -4,6 +4,7 @@ import wikijs from 'wikijs'; import wdk from 'wikidata-sdk'; import axios from 'axios'; import { Table } from 'react-bootstrap'; +import moment from 'moment'; class Wikipedia extends Component { constructor(props) { @@ -16,81 +17,90 @@ class Wikipedia extends Component { error: null, isLoaded: false }; - this.getWikiBox = this.getWikiBox.bind(this); - this.raffina = this.raffina.bind(this); + this.filterWikipediaRes = this.filterWikipediaRes.bind(this); + this.ISO_8601toYYYY = this.ISO_8601toYYYY.bind(this); this.getWikidataPage = this.getWikidataPage.bind(this); } - getWikiBox(name) { - wikijs() - .page(name) - .then(page => page.fullInfo()) - .then( - infobox => console.log('infobox', infobox) - //this.setState({ infobox }) - ); - //console.log('infobox', this.state.infobox) + ISO_8601toYYYY(a) { + return moment(a, [moment.ISO_8601, 'YYYY']).format('YYYY'); } - raffina(results) { - console.log('raffina', results); + filterWikipediaRes(results) { + console.log('filterWikipediaRes', results); return results[0]; } - getWikidataPage(wikidataPXXXXResID){ - return axios.get(wdk.getEntities(wikidataPXXXXResID, 'en')) - .then(wikidataPage => { - this.setState({ - wikidata: wikidataPage.data.entities[Object.keys(wikidataPage.data.entities)[0]] - });// onReject todo - }) - .finally(()=>{ - if(this.state.wikidata.sitelinks.enwiki) - wikijs() - .page(this.state.wikidata.sitelinks.enwiki.title) - .then(page => Promise.all([page.fullInfo(),page.summary()])) - .then(wikipediaRes => this.setState({ isLoaded: true, - wikipedia: wikipediaRes})); - }); -} + getWikidataPage(wikidataPXXXXResID) { + return axios.get(wdk.getEntities(wikidataPXXXXResID, 'en')) + .then(wikidataPage => { + this.setState({ + wikidata: wikidataPage.data.entities[Object.keys(wikidataPage.data.entities)[0]] + }) + }, error => console.error(error)) + .finally(() => { + console.log(this.state.wikidata) + if (this.state.wikidata.sitelinks.enwiki) + wikijs() + .page(this.state.wikidata.sitelinks.enwiki.title) + .then(page => Promise.all([page.fullInfo(), page.summary()])) + .then(wikipediaRes => this.setState({ + wikipedia: { + "desc": wikipediaRes[1], + "info": wikipediaRes[0].general + } + })) + .finally(() => console.log(this.state.wikipedia)); + }); + } componentWillMount() { + const musicbrainzBaseUrl = "https://musicbrainz.org/ws/2"; // more readable 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 - else { //oof - const musicbrainzBaseUrl = "https://musicbrainz.org/ws/2"; // more readable - axios.get(musicbrainzBaseUrl+"/work",{ - params:{ - 'query':this.props.title, + if (wikidataP1651Res.data.results.bindings.length) { // got a match + this.getWikidataPage(wdk.simplify.sparqlResults(wikidataP1651Res.data))// set in state wikidata + .then(() => { + console.log(this.state.wikidata.claims.P435[0].mainsnak.datavalue.value) + axios.get(`${musicbrainzBaseUrl}/work/${this.state.wikidata.claims.P435[0].mainsnak.datavalue.value}`, { // get musicbrainz info + params: { + 'inc': 'artist-rels url-rels', + 'limit': 1, + 'offset': 0, + 'fmt': 'json' + } + }).then(musicbrainzRes1 => this.setState({ isLoaded: true, musicbrainz: musicbrainzRes1.data })); + }); + + } else { //oof + axios.get(`${musicbrainzBaseUrl}/work`, { + params: { + 'query': this.props.title, 'limit': 1, 'offset': 0, - 'fmt':'json' + 'fmt': 'json' } - }).then(musicbrainzRes=> { - // console.log(musicbrainzRes.data.works[0],musicbrainzRes.data.works[0].id) + }).then(musicbrainzRes => { this.setState({ musicbrainz: musicbrainzRes.data.works[0] }); axios.all([ axios.get(wdk.getReverseClaims('P435', musicbrainzRes.data.works[0].id)), // P435 is musicbrainz id - axios.get(musicbrainzBaseUrl+"/work/"+musicbrainzRes.data.works[0].id,{ // - params:{ - 'inc':'url-rels', - 'fmt':'json' + axios.get(`${musicbrainzBaseUrl}/work/${musicbrainzRes.data.works[0].id}`, { // get musicbrainz info + params: { + 'inc': 'artist-rels url-rels', + 'fmt': 'json' } }) ]).then( - axios.spread((wikidataP435Res,musicbrainzWorkRes) => { - // console.info(wikidataP435Res.data,musicbrainzWorkRes.data) - if(wikidataP435Res.data.results.bindings.length) // found a match + axios.spread((wikidataP435Res, musicbrainzWorkRes) => { + if (wikidataP435Res.data.results.bindings.length) // found a match this.getWikidataPage(wdk.simplify.sparqlResults(wikidataP435Res.data)); // set the result in the state - else if(musicbrainzWorkRes.data.relations.find(currentRel => currentRel.type === "wikidata")){ // found wikidata on music brainz + else if (musicbrainzWorkRes.data.relations.find(currentRel => currentRel.type === "wikidata")) { // found wikidata on music brainz let a = musicbrainzWorkRes.data.relations.find(currentRel => currentRel.type === "wikidata"); let wikidataEntityRegEx = new RegExp("[^/]+$"); // match last part of url https://regex101.com/r/0wCQHY/1 - this.getWikidataPage(wikidataEntityRegEx.exec(a.url.resource)); - } - else{ // oof - wikijs().find(this.props.title).then(data=>console.log('asd',data)) // find by props.title + this.getWikidataPage(wikidataEntityRegEx.exec(a.url.resource)).then(() => this.setState({ isLoaded: true })); + } + else { // oof + wikijs().find(this.props.title).then(data => console.log('asd', data)) // find by props.title } }) ) @@ -100,6 +110,9 @@ class Wikipedia extends Component { } + componentDidMount() { + } + // componentWillReceiveProps(nextProps) { // } @@ -122,50 +135,62 @@ class Wikipedia extends Component { render() { const { wikidata, wikipedia, musicbrainz, error, isLoaded } = this.state; - + const ISO_8601toYYYY = this.ISO_8601toYYYY; if (error) { return Error: {error.message}; } else if (!isLoaded) { return Loading...; } else { - let keys = {wikipedia : Object.keys(this.state.wikipedia[0].general), - wikidata :Object.keys(this.state.wikidata.claims)} + let keys = { + wikipedia: Object.keys(this.state.wikipedia.info), + wikidata: Object.keys(this.state.wikidata.claims) + } return ( - //
- //

risultato ricerca wikidata:

- // { wikidata &&
- //

{ wikidata.labels.en.value }

- //

{ wikidata.id }

- // { wikidata.sitelinks.enwiki &&

{ wikidata.sitelinks.enwiki.title}

} - //
} - //

wikipedia summary:

- // {this.state.wikipedia &&

{ this.state.wikipedia[1]}

} - //
- // - // { keys.wikipedia.map(key => ( - + )) } { keys.wikidata.map(key => ( - - + + )) } + { + musicbrainz.relations.map(relation => { + if (relation["target-type"] === "artist") + return ( + + + ); + else if (relation["target-type"] === "url") + return ( + + + ) + else + return (""); + }) + }
{key} {wikipedia[0].general[key].toLocaleString()}{wikipedia.info[key].toLocaleString()}
{key} {wikidata.claims[key][0].mainsnak.datavalue.value.toLocaleString()}{`${key} - ${wikidata.claims[key][0].mainsnak.datatype}`}{ + 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()) : + "" + }
{relation.type}{relation.artist.name}
{relation.type}{relation.type}
- //
- // - ); + ); } } }