aboutsummaryrefslogtreecommitdiff
path: root/src/net/cbaines/suca/SotonCalendarFetcher.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/cbaines/suca/SotonCalendarFetcher.java')
-rw-r--r--src/net/cbaines/suca/SotonCalendarFetcher.java172
1 files changed, 172 insertions, 0 deletions
diff --git a/src/net/cbaines/suca/SotonCalendarFetcher.java b/src/net/cbaines/suca/SotonCalendarFetcher.java
new file mode 100644
index 0000000..633b898
--- /dev/null
+++ b/src/net/cbaines/suca/SotonCalendarFetcher.java
@@ -0,0 +1,172 @@
+package net.cbaines.suca;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.http.Header;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.cookie.Cookie;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.protocol.HTTP;
+
+public class SotonCalendarFetcher {
+ private String username;
+ private String password;
+
+ public SotonCalendarFetcher(String username, String password) {
+ this.username = username;
+ this.password = password;
+ }
+
+ public String fetchAndParseTimetable() {
+ DefaultHttpClient httpclient = new DefaultHttpClient();
+ try {
+ HttpGet httpget = new HttpGet(
+ "https://www.adminservices.soton.ac.uk/adminweb/servlet/login");
+
+ HttpResponse response = httpclient.execute(httpget);
+ HttpEntity entity = response.getEntity();
+
+ // System.out.println("Login form get: " +
+ // response.getStatusLine());
+ // EntityUtils.consume(entity);
+ if (entity != null) {
+ try {
+ entity.consumeContent();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ // System.out.println("Initial set of cookies:");
+ List<Cookie> cookies = httpclient.getCookieStore().getCookies();
+ if (cookies.isEmpty()) {
+ // System.out.println("None");
+ } else {
+ for (int i = 0; i < cookies.size(); i++) {
+ // System.out.println("- " + cookies.get(i).toString());
+ }
+ }
+
+ HttpPost httpost = new HttpPost(
+ "https://www.adminservices.soton.ac.uk/adminweb/servlet/login");
+
+ List<NameValuePair> nvps = new ArrayList<NameValuePair>();
+ nvps.add(new BasicNameValuePair("user", username));
+ nvps.add(new BasicNameValuePair("pwd", password));
+ System.out.println(username + password);
+
+ httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
+
+ response = httpclient.execute(httpost);
+ entity = response.getEntity();
+
+ for (Header header : response.getAllHeaders()) {
+ // System.out.println("header: " + header.getName() + " : " +
+ // header.getValue());
+ }
+
+ // System.out.println("Login form get: " +
+ // response.getStatusLine());
+ // EntityUtils.consume(entity);
+ BufferedReader br = new BufferedReader(new InputStreamReader(
+ entity.getContent()));
+ String line;
+ while ((line = br.readLine()) != null) {
+ // Log.v(TAG, line);
+ }
+
+ // System.out.println("Post logon cookies:");
+ cookies = httpclient.getCookieStore().getCookies();
+ if (cookies.isEmpty()) {
+ // System.out.println("None");
+ } else {
+ for (int i = 0; i < cookies.size(); i++) {
+ // System.out.println("- " + cookies.get(i).toString());
+ }
+ }
+
+ httpost = new HttpPost(
+ "https://www.adminservices.soton.ac.uk/adminweb/jsp/timetables/timetablesController.jsp?comm=studdisplay&style=+format&paramweeks=1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52");
+
+ nvps = new ArrayList<NameValuePair>();
+ nvps.add(new BasicNameValuePair("format", "list"));
+
+ httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
+
+ response = httpclient.execute(httpost);
+ entity = response.getEntity();
+
+ for (Header header : response.getAllHeaders()) {
+ // System.out.println("header: " + header.getName() + " : " +
+ // header.getValue());
+ }
+
+ System.out.println("Second post get: " + response.getStatusLine());
+ // EntityUtils.consume(entity);
+ br = new BufferedReader(new InputStreamReader(entity.getContent()));
+ while ((line = br.readLine()) != null) {
+ // System.out.println(line);
+ }
+
+ httpost = new HttpPost(
+ "https://www.adminservices.soton.ac.uk/adminweb/jsp/timetables/timetablesController.jsp?comm=studdisplay&style=+format&paramweeks=1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52");
+
+ nvps = new ArrayList<NameValuePair>();
+ nvps.add(new BasicNameValuePair("format", "list"));
+
+ httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
+
+ response = httpclient.execute(httpost);
+ entity = response.getEntity();
+
+ for (Header header : response.getAllHeaders()) {
+ // System.out.println("header: " + header.getName() + " : " +
+ // header.getValue());
+ }
+
+ System.out.println("Second post get: " + response.getStatusLine());
+ // EntityUtils.consume(entity);
+ br = new BufferedReader(new InputStreamReader(entity.getContent()));
+ while ((line = br.readLine()) != null) {
+ // Log.v(TAG, line);
+ }
+
+ httpost = new HttpPost(
+ "https://www.adminservices.soton.ac.uk/adminweb/timetables/ttdownload/.csv");
+
+ nvps = new ArrayList<NameValuePair>();
+ nvps.add(new BasicNameValuePair("format", "list"));
+
+ httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
+
+ response = httpclient.execute(httpost);
+ entity = response.getEntity();
+
+ return IOUtils.toString(entity.getContent());
+
+ } catch (IllegalStateException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } finally {
+ // When HttpClient instance is no longer needed,
+ // shut down the connection manager to ensure
+ // immediate deallocation of all system resources
+ httpclient.getConnectionManager().shutdown();
+ }
+ return null;
+ }
+}