如何使用Wikipedia API在浏览器javascript上编辑页面?

时间:2017-04-09 02:38:46

标签: javascript wikipedia wikipedia-api

该脚本旨在注入维基百科网站。它将使用用户'登录凭据以发布到编辑API。

这是我的尝试:

function getEditToken(){
    return fetch(
        'https://en.wikipedia.org/w/api.php?action=query&meta=tokens&format=json',
        {credentials: 'include'}
    )
    .then( r => r.json() )
    .then( r => r.query.tokens.csrftoken )
}

function writeRevision(title, text, summary){
    var url = `https://en.wikipedia.org/w/index.php?action=edit`
    var formData = new FormData()
    formData.append('title', title)
    formData.append('text', text)
    formData.append('summary', summary)    
    formData.append('contentmodel', 'wikitext') 

    var option = {
        method: 'POST',
        body: formData,
        credentials: 'include',
    }

    return getEditToken()
    .then( token => { formData.append('token', token); console.log(token) } )
    .then( x => fetch(url, option) )
    .then( r => r.text() )
    .then( console.log )
    .catch( e => console.log(e) )

}

writeRevision('User:eeeeeeeee/draft_1', 'foo wikitext', 'foo summary')

回复说:

  

编辑表单的某些部分未到达服务器;再检查一遍   你的编辑完好无损,然后再试一次。

2 个答案:

答案 0 :(得分:2)

使用the MediaWiki edit API编辑页面。不要直接发布到?action=edit;该URI用于交互式客户端。

MediaWiki API文档包含一个如何使用Javascript执行此操作的示例,我已在下面转载:

function addNewSection( summary, content, editToken ) {
    $.ajax({
        url: mw.util.wikiScript( 'api' ),
        data: {
            format: 'json',
            action: 'edit',
            title: mw.config.get( 'wgPageName' ),
            section: 'new',
            summary: summary,
            text: content,
            token: editToken
        },
        dataType: 'json',
        type: 'POST',
        success: function( data ) {
            if ( data && data.edit && data.edit.result == 'Success' ) {
                window.location.reload(); // reload page if edit was successful
            } else if ( data && data.error ) {
                alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info );
            } else {
                alert( 'Error: Unknown result from API.' );
            }
        },
        error: function( xhr ) {
            alert( 'Error: Request failed.' );
        }
    });
}

答案 1 :(得分:2)

如果代码在浏览器中运行(因此可以访问MediaWiki的javascript模块),您可以使用mw.Api.edit

function edit( title, text, summary ) {
    mw.loader.using( 'mediawiki.api.edit' ).then( function () {
        let api = new mw.Api();
        api.edit( title, function () {
            return {
                text: text,
                summary: summary
            };
        } );
    } );
}