2017-04-09 1 views
1

스크립트는 Wikipedia 사이트에 삽입하기위한 것입니다. 사용자의 로그인 자격 증명을 사용하여 수정 API에 게시합니다.Wikipedia 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는 대화 형 클라이언트 용입니다. 코드가 브라우저에서 실행중인 경우

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

(따라서 미디어 위키의 자바 스크립트 모듈에 액세스 할 수 있습니다

미디어 위키 API 문서는 내가 아래에 재현 한 자바 스크립트,이 작업을 수행하는 방법에 대한 예제를 포함), 당신은 단지 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 
      }; 
     }); 
    }); 
} 
관련 문제