2017-04-09 6 views
1

このスクリプトは、Wikipediaのサイトに挿入されることを意図しています。ユーザーのログイン認証情報を使用して編集APIに投稿します。Wikipedia APIを使用してブラウザのJavaScriptを編集するには?

これは私の試みです:

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の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.'); 
     } 
    }); 
} 
+0

多くのおかげさま...もう一日、誤字を犯しました。私はソースコードの行と行を掘り下げ、これを見つけられませんでした。 – golopot

2

MediaWikiのAPIドキュメントは、私が以下に再現しまし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 
      }; 
     }); 
    }); 
} 
関連する問題