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 javax.security.auth.login.LoginException; 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() throws LoginException { 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 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 nvps = new ArrayList(); 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(); 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(); 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(); nvps.add(new BasicNameValuePair("format", "list")); httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); response = httpclient.execute(httpost); entity = response.getEntity(); String responseString = IOUtils.toString(entity.getContent()); if (responseString.contains("Failed Login")) { throw new LoginException("Login failed"); } else { return responseString; } } 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; } }