MediawikiConnection.java: Difference between revisions
From Knot Atlas
Jump to navigationJump to search
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
This page contains the source code for mediawiki.java, the java component of Scott Morrison's [[MediaWiki Mathematica package]]. |
|||
<pre> |
<pre> |
||
package mediawiki; |
package mediawiki; |
||
Revision as of 23:19, 15 August 2005
This page contains the source code for mediawiki.java, the java component of Scott Morrison's MediaWiki Mathematica package.
package mediawiki;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
/**
* @author Scott Morrison
* copyright 2005, available under either the MIT or GPL license.
*/
public class MediawikiConnection {
private String baseURL;
private HttpClient client = new HttpClient();
public MediawikiConnection(String baseURL) {
this.baseURL = baseURL;
}
public MediawikiConnection(String baseURL, String username, String password) {
this.baseURL = baseURL;
doLogin(username, password);
}
private boolean doLogin(String username, String password) {
PostMethod post = new PostMethod(baseURL + "?title=Special:Userlogin&action=submit");
// enable automatic retrying
post.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
NameValuePair[] data = {
new NameValuePair("wpName", username),
new NameValuePair("wpPassword", password),
new NameValuePair("wpRemember", "1"),
new NameValuePair("wpLoginAttempt", "1")
};
post.setRequestBody(data);
int status;
try {
status = client.executeMethod(post);
} catch (HttpException e) {
return false;
} catch (IOException e) {
return false;
} finally {
post.releaseConnection();
}
return (status == 302);
}
public String getPageText(String title) throws HttpException, IOException, JDOMException {
String URL = baseURL + "?title=Special:Export/" + title;
GetMethod get = new GetMethod(URL);
// enable automatic retrying
get.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
client.executeMethod(get);
InputStream is = get.getResponseBodyAsStream();
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(is);
Element text = doc.getRootElement().getChild("page").getChild("revision").getChild("text");
// finally, make sure we release the connection!
get.releaseConnection();
return text.getText();
}
public boolean setPageText(String title, String text) throws IOException {
return setPageText(title, text, "");
}
public boolean setPageText(String title, String text, String summary) throws IOException {
String URL = baseURL + "?title=" + title + "&action=edit";
// first, load the edit page, to get an 'edittime'
String editTime = "";
GetMethod get = new GetMethod(URL);
// enable automatic retrying
get.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
client.executeMethod(get);
// now sift through the response looking for the editime
String response = get.getResponseBodyAsString();
get.releaseConnection();
java.util.regex.Pattern regex = java.util.regex.Pattern.compile(
"value=\"([0-9]+)\" name=\"wpEdittime\"");
java.util.regex.Matcher matcher = regex.matcher(response);
if(matcher.find()) editTime = matcher.group(1);
PostMethod post = new PostMethod(URL);
NameValuePair[] data = {
new NameValuePair("wpTextbox1", text),
new NameValuePair("wpEdittime", editTime),
new NameValuePair("wpSummary", summary)
};
post.setRequestBody(data);
int status;
try {
status = client.executeMethod(post);
} catch (HttpException e) {
return false;
} catch (IOException e) {
return false;
} finally {
post.releaseConnection();
}
return (status == 302);
}
public static class Test {
public static void main(String[] args) throws HttpException, IOException, JDOMException {
MediawikiConnection conn = new MediawikiConnection(
"http://math.berkeley.edu/~scott/w/index.php", "TestRobot", "foobar");
System.out.println(conn.getPageText("Main_Page"));
System.out.println(conn.setPageText("foo", "crel", "auto!"));
}
}
}