Skip to content

Instantly share code, notes, and snippets.

@lucaswerkmeister
Created April 12, 2019 14:38
Show Gist options
  • Select an option

  • Save lucaswerkmeister/5056dda00c5bec336a064e920b88aadc to your computer and use it in GitHub Desktop.

Select an option

Save lucaswerkmeister/5056dda00c5bec336a064e920b88aadc to your computer and use it in GitHub Desktop.

Revisions

  1. lucaswerkmeister created this gist Apr 12, 2019.
    53 changes: 53 additions & 0 deletions import.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,53 @@
    async function importEntitiesFromWikidata( wikidataEntityIds ) {
    const params = new URLSearchParams();
    params.set( 'action', 'wbgetentities' );
    params.set( 'ids', wikidataEntityIds.join( '|' ) );
    params.set( 'props', [ 'labels', 'descriptions', 'aliases', 'datatype' ].join( '|' ) );
    params.set( 'format', 'json' );
    params.set( 'origin', '*' );
    const response = await fetch( `https://www.wikidata.org/w/api.php?${ params.toString() }` ),
    json = await response.json();
    for ( const wikidataEntityData of Object.values( json.entities ) ) {
    await importEntityFromJson( wikidataEntityData );
    }
    }

    async function importEntityFromJson( wikidataEntityData ) {
    const wikidataEntityId = wikidataEntityData.id,
    api = new mw.Api();
    delete wikidataEntityData.id;
    for ( const key of [ 'labels', 'descriptions', 'aliases' ] ) {
    if ( key in wikidataEntityData ) {
    filterUnknownLanguages( wikidataEntityData[ key ] );
    }
    }
    try {
    await api.postWithEditToken( {
    action: 'wbeditentity',
    new: wikidataEntityData.type,
    data: JSON.stringify( wikidataEntityData ),
    summary: `Imported from ${ wikidataEntityId } on Wikidata`,
    bot: true,
    } );
    } catch ( e ) {
    if ( e === 'modification-failed' ) {
    return; // ignore; entity exists already
    } else {
    throw e;
    }
    }
    }

    function filterUnknownLanguages( terms ) {
    // InitialiseSettings.php, wmgExtraLanguageNames
    delete terms.kea;
    delete terms.nod;
    delete terms.nys;
    delete terms.ota;
    delete terms.rwr;
    delete terms.sje;
    delete terms.smj;
    delete terms.smn;
    delete terms.sms;
    delete terms.srq;
    }