diff options
Diffstat (limited to 'src/net/cbaines/suca/SotonCalendarFetcher.java')
-rw-r--r-- | src/net/cbaines/suca/SotonCalendarFetcher.java | 172 |
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¶mweeks=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¶mweeks=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; + } +} |