2017-04-09 4 views
1

Das Skript soll in die Wikipedia-Site injiziert werden. Es verwendet die Anmeldedaten der Benutzer, um sie an die API für die Bearbeitung zu senden.Wie benutze Wikipedia API um eine Seite im Browser Javascript zu bearbeiten?

Dies ist mein Versuch:

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') 

Die Antwort sagt:

Einige Teile des Bearbeitungsformulars den Server nicht erreicht haben; Überprüfen Sie , dass Ihre Änderungen intakt sind, und versuchen Sie es erneut.

+0

Beziehen Sie alle versteckten Feld, das in der Regel gesendet werden, wenn wikipedia-Seiten zu bearbeiten? Vergleichen Sie, was Chrom-Protokolle in die Registerkarte "Netzwerk", wenn Sie Ihr Skript und normale Wikipedia, das gleiche Feld gesendet werden? –

Antwort

2

Verwenden Sie the MediaWiki edit API, um Seiten zu bearbeiten. Nicht direkt an ?action=edit senden; Dieser URI ist für interaktive Clients gedacht.

Die Dokumentation MediaWiki API enthält ein Beispiel dafür, wie dies mit Javascript zu tun, die ich im Folgenden wiedergegeben habe:

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

Vielen Dank ... Noch ein weiterer Tag für einen Tippfehler. Ich grabe Zeilen und Zeilen des Quellcodes und habe das nicht gefunden. – golopot

2

Wenn der Code im Browser ausgeführt wird (und hat somit Zugriff auf Javascript-Module der MediaWiki), können Sie einfach mw.Api.edit verwenden:

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 
      }; 
     }); 
    }); 
} 
Verwandte Themen