diff --git a/lib/media_wiki/gateway.rb b/lib/media_wiki/gateway.rb index b718792..eb84dc1 100644 --- a/lib/media_wiki/gateway.rb +++ b/lib/media_wiki/gateway.rb @@ -54,6 +54,43 @@ module MediaWiki @username = username end + # Fetch random MediaWiki page title(s). + # + # [num] Number of pages to fetch. Default = 1. + # [namespace] Only list pages in these namespaces [provide the namespace ID number] + # [limit] The API maximum limitation. 10 is the Wikipedia default for users. + # + # Returns list of random page titles. + def random(num = 1, namespace = '', limit = 10) + pages = [] + begin + if num > limit + rnlimit = limit + num -= limit + else + rnlimit = num + num -= num + end + form_data = {'action' => 'query', 'list' => 'random', 'rnlimit' => rnlimit, 'rnnamespace' => namespace} + res = make_api_request(form_data).first.elements["query/random"] + pages += REXML::XPath.match(res, "//page").map { |x| x.attributes["title"] } + end while num > 0 + return pages + end + + # Fetch MediaWiki page in MediaWiki format by revision ID. + # + # [revid] Page revision ID [revid] to fetch + # + # Returns content of page as string, nil if the revision does not exist. + def get_revision(revid = nil) + form_data = {'action' => 'query', 'prop' => 'revisions', 'rvprop' => 'content', 'revids' => revid} + page = make_api_request(form_data).first.elements["query/pages/page"] + if valid_page? page + page.elements["revisions/rev"].text || "" + end + end + 
 # Fetch MediaWiki page in MediaWiki format. Does not follow redirects. #
 # [page_title] Page title to fetch @@ -66,23 +103,45 @@ module MediaWiki page.elements["revisions/rev"].text || "" end end - + 
 # Fetch latest revision ID of a MediaWiki page. Does not follow redirects. #
 # [page_title] Page title to fetch # # Returns revision ID as a string, nil if the page does not exist. - def revision(page_title) + def latest_revision_id(page_title)
 form_data = {'action' => 'query', 'prop' => 'revisions', 'rvprop' => 'ids', 'rvlimit' => 1, 'titles' => page_title} page = make_api_request(form_data).first.elements["query/pages/page"] if valid_page? page page.elements["revisions/rev"].attributes["revid"] end end + + # Fetch listing of all revisions of a MediaWiki page. + # + # [page_title] Page title to fetch + # + # Returns ?? + def revisions(page_title) + revisions = [] + rvstartid = 0 + + begin + form_data = {'action' => 'query', 'prop' => 'revisions', 'rvprop' => 'ids|timestamp', 'rvlimit' => 500, 'rvstartid' => rvstartid, 'rvdir' => 'newer', 'titles' => page_title} + + res, rvstartid = make_api_request(form_data, '//query-continue/revisions/@rvstartid') + + revisions += REXML::XPath.match(res, "//rev") + + end while rvstartid + + revisions + end