该脚本旨在注入维基百科网站。它将使用用户'登录凭据以发布到编辑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')
回复说:
编辑表单的某些部分未到达服务器;再检查一遍 你的编辑完好无损,然后再试一次。
答案 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
};
} );
} );
}