Page MenuHomeDevCentral

D2156.diff
No OneTemporary

D2156.diff

diff --git a/includes/mediawikibot.php b/includes/mediawikibot.php
old mode 120000
new mode 100644
--- /dev/null
+++ b/includes/mediawikibot.php
@@ -0,0 +1,309 @@
+<?php
+
+/**
+ *
+ * MediaWikiBot PHP Class
+ *
+ * The MediaWikiBot PHP Class provides an easy to use interface for the
+ * MediaWiki api. It dynamically builds functions based on what is available
+ * in the api. This version supports Semantic MediaWiki.
+ *
+ * You do a simple require_once( '/path/to/mediawikibot.class.php' ) in your
+ * own bot file and initiate a new MediaWikiBot() object. This class
+ * supports all of the api calls that you can find on your wiki/api.php page.
+ *
+ * You build the $params and then call the action.
+ *
+ * For example,
+ * $params = array( 'text' => '==Heading 2==' );
+ * $bot->parse( $params );
+ *
+ * @author Kaleb Heitzman
+ * @email jkheitzman@gmail.com
+ * @license The MIT License ( MIT )
+ * @date 2012-12-07 02:55 -0500
+ *
+ * The MIT License ( MIT ) Copyright ( c ) 2011 Kaleb Heitzman
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files ( the "Software" ),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+class MediaWikiBot {
+
+ /** Methods set by the mediawiki api
+ */
+ protected $apimethods = array(
+ 'block',
+ 'compare',
+ 'delete',
+ 'edit',
+ 'emailuser',
+ 'expandtemplates',
+ 'feedcontributions',
+ 'feedwatchlist',
+ 'filerevert',
+ 'help',
+ 'import',
+ 'login',
+ 'logout',
+ 'move',
+ 'opensearch',
+ 'paraminfo',
+ 'parse',
+ 'patrol',
+ 'protect',
+ 'purge',
+ 'query',
+ 'rollback',
+ 'rsd',
+ 'smwinfo',
+ 'unblock',
+ 'undelete',
+ 'upload',
+ 'userrights',
+ 'watch'
+ );
+
+ /** Methods that need an xml format
+ */
+ protected $xmlmethods = array(
+ 'opensearch',
+ 'feedcontributions',
+ 'feedwatchlist',
+ 'rsd'
+ );
+
+ /** Methods that need multipart/form-date
+ */
+ protected $multipart = array(
+ 'upload',
+ 'import'
+ );
+
+ /** Methods that do not need a param check
+ */
+ protected $parampass = array(
+ 'login',
+ 'logout',
+ 'rsd'
+ );
+
+ /** Constructor
+ */
+ public function __construct(
+ $url = 'http://example.com/w/api.php',
+ $format = 'php',
+ $username = 'bot',
+ $password = 'passwd',
+ $useragent = 'WikimediaBot Framework by JKH',
+ $cookies = 'cookies.tmp'
+ ) {
+ /** Set some constants
+ */
+ define( 'URL', $url );
+ define( 'FORMAT', $format );
+ define( 'USERNAME', $username );
+ define( 'PASSWORD', $password );
+ define( 'USERAGENT', $useragent );
+ define( 'COOKIES', $cookies );
+ }
+
+ /** Dynamic method server
+ *
+ * This builds dyamic api calls based on the protected apimethods var.
+ * If the method exists in the array then it is a valid api call and
+ * based on some php5 magic, the call is executed.
+ */
+ public function __call( $method, $args ) {
+ # get the params
+ $params = $args[0];
+ # check for multipart
+ if ( isset( $args[1] ) ) {
+ $multipart = $args[1];
+ }
+ # check for valid method
+ if ( in_array( $method, $this->apimethods ) ) {
+ # get multipart info
+ if ( !isset( $multipart ) ) {
+ $multipart = $this->multipart( $method );
+ }
+ # process the params
+ return $this->standard_process( $method, $params, $multipart );
+ } else {
+ # not a valid method, kill the process
+ die( "$method is not a valid method \r\n" );
+ }
+ }
+
+ /** Log in and get the authentication tokens
+ *
+ * MediaWiki requires a dual login method to confirm authenticity. This
+ * entire method takes that into account.
+ */
+ public function login( $init = null ) {
+ # build the url
+ $url = $this->api_url( __FUNCTION__ );
+ # build the params
+ $params = array(
+ 'lgname' => USERNAME,
+ 'lgpassword' => PASSWORD,
+ 'format' => 'php' # do not change this from php
+ );
+ # get initial login info
+ if ( $init == null ) {
+ $results = $this->login( true );
+ $results = ( array ) $results;
+ } else {
+ $results = null;
+ }
+ # pass token if not null
+ if ( $results != null ) {
+ $params['lgtoken'] = $results['login']['token'];
+ }
+ # get the data
+ $data = $this->curl_post( $url, $params );
+ # return or set data
+ if ( $data['login']['result'] != "Success" ) {
+ return $data;
+ }
+ }
+
+ /** Standard processesing method
+ *
+ * The standard process methods calls the correct api url with params
+ * and executes a curl post request. It then returns processed data
+ * based on what format has been set (default=php).
+ */
+ private function standard_process( $method, $params = null, $multipart = false ) {
+ # check for null params
+ if ( ! in_array( $method, $this->parampass ) ) {
+ $this->check_params( $params );
+ }
+ # specify xml format if needed
+ if ( in_array( $method, $this->xmlmethods ) ) {
+ $params['format'] = 'xml';
+ }
+ # build the url
+ $url = $this->api_url( $method );
+ # get the data
+ $data = $this->curl_post( $url, $params, $multipart );
+ # set smwinfo
+ $this->$method = $data;
+ # return the data
+ return $data;
+ }
+
+ /** Execute curl post
+ */
+ private function curl_post( $url, $params = '', $multipart = false ) {
+ # set the format if not specified
+ if ( empty( $params['format'] ) ) {
+ $params['format'] = FORMAT;
+ }
+ # open the connection
+ $ch = curl_init();
+ # set the url, number of POST vars, POST data
+ curl_setopt( $ch, CURLOPT_URL, $url );
+ curl_setopt( $ch, CURLOPT_USERAGENT, USERAGENT );
+ curl_setopt( $ch, CURLOPT_RETURNTRANSFER,1 );
+ curl_setopt( $ch, CURLOPT_TIMEOUT, 15 );
+ curl_setopt( $ch, CURLOPT_COOKIEFILE, COOKIES );
+ curl_setopt( $ch, CURLOPT_COOKIEJAR, COOKIES );
+ curl_setopt( $ch, CURLOPT_POST, count( $params ) );
+ # choose multipart if necessary
+ if ( $multipart ) {
+ # submit as multipart
+ curl_setopt( $ch, CURLOPT_POSTFIELDS, $params );
+ } else {
+ # submit as normal
+ curl_setopt( $ch, CURLOPT_POSTFIELDS, $this->urlize_params( $params ) );
+ }
+ # execute the post
+ $results = curl_exec( $ch );
+ # close the connection
+ curl_close( $ch );
+ # return the unserialized results
+ return $this->format_results( $results, $params['format'] );
+ }
+
+ /** Check for multipart method
+ */
+ private function multipart( $method ) {
+ # get multipart true/false
+ $multipart = in_array( $method, $this->multipart );
+ # check to see if multipart method exists and return true/false
+ return $multipart;
+ }
+
+ /** Format results based on format (default=php)
+ */
+ private function format_results( $results, $format ) {
+ switch( $format ) {
+ case 'json':
+ return json_decode( $results, true );
+ case 'php':
+ return unserialize( $results );
+ case 'wddx':
+ return wddx_deserialize( $results );
+ case 'xml':
+ return simplexml_load_string( $results );
+ case 'yaml':
+ return $results;
+ case 'txt':
+ return $results;
+ case 'dbg':
+ return $results;
+ case 'dump':
+ return $results;
+ }
+ }
+
+ /** Check for null params
+ *
+ * If needed params are not passed then kill the script.
+ */
+ private function check_params( $params ) {
+ # check for null
+ if ( $params == null ) {
+ die( "You didn't pass any params. \r\n" );
+ }
+ }
+
+ /** Build a url string out of params
+ */
+ private function urlize_params( $params ) {
+ # url-ify the data for POST
+ $urlstring = '';
+ foreach ( $params as $key => $value ) {
+ $urlstring .= $key . '=' . $value . '&';
+ }
+ # pull the & off the end
+ rtrim( $urlstring, '&' );
+ # return the string
+ return $urlstring;
+ }
+
+ /** Build the needed api url
+ */
+ private function api_url( $function ) {
+ # return the url
+ return URL."?action={$function}&";
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Sat, Nov 16, 18:27 (21 h, 38 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2247928
Default Alt Text
D2156.diff (9 KB)

Event Timeline