Wikipedia API: как узнать количество ревизий страницы?
Кто-нибудь знает, как получить количество ревизий страницы википедии с помощью MediaWiki API? Я прочитал эту документацию по API, но не могу найти соответствующий API:
Редакция API
5 ответов
Единственная возможность - извлечь все ревизии и сосчитать их. Возможно, вам придется продолжить запрос для этого.
Ошибка 17993 о включении подсчета, но все еще не решена.
Вот код для получения количества ревизий страницы (в данном случае это вики-страница JSON):
import requests
BASE_URL = "http://en.wikipedia.org/w/api.php"
TITLE = 'JSON'
parameters = { 'action': 'query',
'format': 'json',
'continue': '',
'titles': TITLE,
'prop': 'revisions',
'rvprop': 'ids|userid',
'rvlimit': 'max'}
wp_call = requests.get(BASE_URL, params=parameters)
response = wp_call.json()
total_revisions = 0
while True:
wp_call = requests.get(BASE_URL, params=parameters)
response = wp_call.json()
for page_id in response['query']['pages']:
total_revisions += len(response['query']['pages'][page_id]['revisions'])
if 'continue' in response:
parameters['continue'] = response['continue']['continue']
parameters['rvcontinue'] = response['continue']['rvcontinue']
else:
break
print parameters['titles'], total_revisions
Вы можете проверить результат здесь: https://en.wikipedia.org/w/index.php?title=JSON&action=info
(доступно из соответствующей боковой панели страницы википедии: Инструменты - Информация о странице)
Получить ревизии и реализовать метод их подсчета (это просто XML).
api.php ? action=query & prop=revisions & titles=API|Main%20Page & rvprop=timestamp|user|comment|content
,
<api>
<query>
<pages>
<page pageid="1191" ns="0" title="API">
<revisions>
<rev user="Harryboyles" timestamp="2006-10-31T05:39:01Z" comment="revert unexplained change: see talk ...">
...content...
</rev>
</revisions>
</page>
<page pageid="11105676" ns="0" title="Main Page">
<revisions>
<rev user="Ryan Postlethwaite" timestamp="2007-06-26T19:05:06Z" comment="rv - what was that for?">
...content...
</rev>
</revisions>
</page>
</pages>
С REST API , предоставляемым более новыми MediaWiki, вы можете использовать API «Получить счетчики истории страниц», чтобы получить количество ревизий страницы.
Например,
GET https://en.wikipedia.org/w/rest.php/v1/page/Jupiter/history/counts/edits?from=384955912&to=406217369
этот запрос вернет ответ JSON, подобный следующему:
{
"count": 110,
"limit": false
}
Нулевое кодирование вообще.
Как указано в ответе Винта , лучшим решением, вероятно, будет использование REST API.
Хотя, если вам придется использовать обычный Action API, единственным решением будет подсчет ревизий (что, очевидно, будет медленным на страницах с большой историей).
Я только что создал для этого код JavaScript:
/* jshint esversion: 6 */
/* globals Promise, mw */
function countRevisions( pageTitle ) {
return new Promise( function ( resolve, reject ) {
mw.loader.using( 'mediawiki.api', function () {
const api = new mw.Api();
const userGroups = mw.config.get( 'wgUserGroups' );
const apiLimit = userGroups.includes( 'sysop' ) || userGroups.includes( 'bot' ) ? 5000 : 500;
let count = 0;
function makeRequest( apiContinue ) {
const params = {
action: 'query',
prop: 'revisions',
titles: pageTitle,
rvprop: '', // we don't need any property
rvlimit: apiLimit,
formatversion: 2,
};
if ( apiContinue ) {
Object.assign( params, apiContinue );
}
api.get( params ).done( function ( data ) {
if ( !data.query ) {
reject();
return;
}
const revisions = data.query.pages[ 0 ].revisions;
if ( revisions ) {
count += revisions.length;
}
if ( data[ 'continue' ] ) {
makeRequest( data[ 'continue' ] );
} else {
resolve( count );
}
} ).fail( function () {
reject();
} );
}
makeRequest();
} );
} );
}
countRevisions( 'Page title' ).then( function ( count ) {
/* ... */
} );