2017-04-09 71 views
1

該腳本旨在被注入維基百科網站。它將使用用戶的登錄憑證發佈到編輯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

您是否包含編輯維基百科頁面時通常發送的隱藏字段?比較使用腳本和常規維基百科時,chrome日誌到「網絡」選項卡時是否發送相同的字段? –

回答

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

非常感謝......又一天花在打字錯誤上。我挖掘源代碼的行和行,並沒有發現這一點。 – golopot

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 
      }; 
     }); 
    }); 
} 
相關問題