API:Mergehistory/Sample code 1
Appearance
From mediawiki.org
Python
[edit ]#!/usr/bin/python3 """ mergehistory.py MediaWiki API Demos Demo of `mergehistory` module: Merge the page revisions of Oldpage dating up to 2015年12月31日T04:37:41Z into Newpage MIT license """ import requests S = requests.Session() URL = "https://test.wikipedia.org/w/api.php" # Step 1: Retrieve a login token PARAMS_1 = { "action": "query", "meta": "tokens", "type": "login", "format": "json" } R = S.get(url=URL, params=PARAMS_1) DATA = R.json() LOGIN_TOKEN = DATA['query']['tokens']['logintoken'] # Step 2: Send a post request to log in using the clientlogin method. # import rights can't be granted using Special:BotPasswords # hence using bot passwords may not work. # See https://www.mediawiki.org/wiki/API:Login for more # information on log in methods. PARAMS_2 = { "action": "clientlogin", "username": "username", "password": "password", "format": "json", "loginreturnurl": "http://127.0.0.1:5000/", "logintoken": LOGIN_TOKEN } R = S.post(URL, data=PARAMS_2) DATA = R.json() # Step 3: While logged in, retrieve a CSRF token PARAMS_3 = { "action": "query", "meta": "tokens", "format": "json" } R = S.get(url=URL, params=PARAMS_3) DATA = R.json() CSRF_TOKEN = DATA["query"]["tokens"]["csrftoken"] # Step 4: Send a POST request to merge the page revisions # of Oldpage dating up to 2015年12月31日T04:37:41Z into Newpage PARAMS_4 = { "action":"mergehistory", "from":"Oldpage", "to":"Newpage", "format":"json", "timestamp":"2015年12月31日T04:37:41Z", "reason":"Reason", "token" : CSRF_TOKEN } R = S.post(URL, data=PARAMS_4) DATA = R.text print(DATA) # To merge entire history of Oldpage to Newpage, # remove the "timestamp" parameter in step 4
PHP
[edit ]<?php /* mergehistory.php MediaWiki API Demos Demo of `mergehistory` module: Merge the page revisions of Oldpage dating up to 2015年12月31日T04:37:41Z into Newpage MIT license */ $endPoint = "https://test.wikipedia.org/w/api.php"; $login_Token = getLoginToken(); // Step 1 loginRequest( $login_Token ); // Step 2 $csrf_Token = getCSRFToken(); // Step 3 mergehistory( $csrf_Token ); // Step 4 // Step 1: GET request to fetch login token function getLoginToken() { global $endPoint; $params1 = [ "action" => "query", "meta" => "tokens", "type" => "login", "format" => "json" ]; $url = $endPoint . "?" . http_build_query( $params1 ); $ch = curl_init( $url ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" ); curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" ); $output = curl_exec( $ch ); curl_close( $ch ); $result = json_decode( $output, true ); return $result["query"]["tokens"]["logintoken"]; } // Step 2: Send a post request to log in using the clientlogin method. // import rights can't be granted using Special:BotPasswords // hence using bot passwords may not work. // See https://www.mediawiki.org/wiki/API:Login for more // information on log in methods. function loginRequest( $logintoken ) { global $endPoint; $params2 = [ "action" => "clientlogin", "username" => "username", "password" => "password", 'loginreturnurl' => 'http://127.0.0.1:5000/', "logintoken" => $logintoken, "format" => "json" ]; $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $endPoint ); curl_setopt( $ch, CURLOPT_POST, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $params2 ) ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" ); curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" ); $output = curl_exec( $ch ); curl_close( $ch ); } // Step 3: GET request to fetch CSRF token function getCSRFToken() { global $endPoint; $params3 = [ "action" => "query", "meta" => "tokens", "format" => "json" ]; $url = $endPoint . "?" . http_build_query( $params3 ); $ch = curl_init( $url ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" ); curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" ); $output = curl_exec( $ch ); curl_close( $ch ); $result = json_decode( $output, true ); return $result["query"]["tokens"]["csrftoken"]; } # Step 4: Send a POST request to merge the page revisions of Oldpage dating up to 2015年12月31日T04:37:41Z into Newpage function mergeHistory( $csrftoken ) { global $endPoint; $params4 = [ "action"=>"mergehistory", "from"=>"Oldpage", "to"=>"Newpage", "format"=>"json", "timestamp"=>"2015年12月31日T04:37:41Z", "reason"=>"Reason", "token" => $csrftoken ]; $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $endPoint ); curl_setopt( $ch, CURLOPT_POST, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $params4 ) ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" ); curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" ); $response = curl_exec($ch); curl_close($ch); echo ($response); } /* To merge entire history of Oldpage to Newpage, remove the "timestamp" parameter in step 4 */
JavaScript
[edit ]/* mergehistory.js MediaWiki API Demos Demo of `mergehistory` module: Merge the page revisions of Oldpage dating up to 2015年12月31日T04:37:41Z into Newpage MIT license */ varrequest=require("request").defaults({jar:true}), url="https://test.wikipedia.org/w/api.php"; // Step 1: GET request to fetch login token functiongetLoginToken(){ varparams_0={ action:"query", meta:"tokens", type:"login", format:"json" }; request.get({url:url,qs:params_0},function(error,res,body){ if(error){ return; } vardata=JSON.parse(body); loginRequest(data.query.tokens.logintoken); }); } // Step 2: Send a post request to log in using the clientlogin method. // import rights can't be granted using Special:BotPasswords // hence using bot passwords may not work. // See https://www.mediawiki.org/wiki/API:Login for more // information on log in methods. functionloginRequest(login_token){ varparams_1={ action:"clientlogin", username:"username", password:"password", loginreturnurl:"http://127.0.0.1:5000/", logintoken:login_token, format:"json" }; request.post({url:url,form:params_1},function(error,res,body){ if(error){ return; } getCsrfToken(); }); } // Step 3: GET request to fetch CSRF token functiongetCsrfToken(){ varparams_2={ action:"query", meta:"tokens", format:"json" }; request.get({url:url,qs:params_2},function(error,res,body){ if(error){ return; } vardata=JSON.parse(body); mergeHistory(data.query.tokens.csrftoken); }); } // Step 4: Send a POST request to merge the page revisions // of Oldpage dating up to 2015年12月31日T04:37:41Z into Newpage functionmergeHistory(csrf_token){ varparams_3={ action:"mergehistory", from:"Oldpage", to:"Newpage", reason:"Reason", format:"json", timestamp:"2015年12月31日T04:37:41Z", token:csrf_token }; request.post({url:url,form:params_3},function(error,res,body){ if(error){ return; } console.log(body); }); } // Start From Step 1 getLoginToken(); /* To merge entire history of Oldpage to Newpage, remove the "timestamp" parameter in step 4 */