package it.fdev.scraper.esse3; import it.fdev.unisaconnect.data.SharedPrefDataManager; import it.fdev.utils.Utils; import org.jsoup.HttpStatusException; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import android.content.Context; import android.util.Log; /** * Frammento che si occupa dell'accesso alla esse3 * * @author francesco * */ public class Esse3Login extends Esse3BasicScraper { private final String startUrl = "https://esse3web.unisa.it/unisa/auth/Logon.do"; private boolean chooseCareer; private SharedPrefDataManager mDataManager; public Esse3Login(Context context, SharedPrefDataManager dataManager, String base64login, String broadcastID, boolean chooseCareer) { super(context, dataManager, base64login, broadcastID); this.chooseCareer = chooseCareer; mDataManager = new SharedPrefDataManager(context); } @Override public LoadStates startScraper() { try { Document result; try { scraperGetUrl(startUrl); } catch (Exception e) { // Come risposta alla prima richiesta si ha un 401, perchè non vengono inviati cookie // La risposta contiene anche l'header Set-Cookie. Il cookie è necessario per autenticarsi } result = scraperGetUrl(startUrl); if (result == null) { Log.d(Utils.TAG, "I'm lost 0"); return LoadStates.NO_INTERNET; } if (!chooseCareer) { return LoadStates.FINISHED; } String nextUrl = chooseCareer(result); if (nextUrl == null) { Log.d(Utils.TAG, "I'm lost 1"); return LoadStates.NO_INTERNET; } if (!nextUrl.isEmpty()) { result = scraperGetUrl(nextUrl); if (result == null) { Log.d(Utils.TAG, "I'm lost 2"); return LoadStates.NO_INTERNET; } } nextUrl = chooseCareer(result); if (nextUrl == null) { Log.d(Utils.TAG, "I'm lost 3"); return LoadStates.NO_INTERNET; } if (!nextUrl.isEmpty()) { Log.d(Utils.TAG, "I'm lost 4"); return LoadStates.NO_INTERNET; } return LoadStates.FINISHED; } catch (HttpStatusException e) { Log.w(Utils.TAG, "ERROR ", e); int code = e.getStatusCode(); if (code == 401) { return LoadStates.WRONG_DATA; } else { return LoadStates.UNKNOWN_PROBLEM; } } catch (Exception e) { Log.w(Utils.TAG, "ERROR ", e); } return LoadStates.UNKNOWN_PROBLEM; } private String chooseCareer(Document document) { if (document == null) { return null; } Elements detailsTables = document.getElementsByClass("detail_table"); if (detailsTables.size() > 0) { int tipoCorso = mDataManager.getTipoCorso(); if (detailsTables.size() < tipoCorso || tipoCorso < 1) { mDataManager.setTipoCorso(1); tipoCorso = 1; } Element firstRow = detailsTables.get(0).getElementsByTag("tr").get(tipoCorso); Elements anchors = firstRow.getElementsByTag("a"); if (anchors.size() == 0) { return ""; } String carrieraUrl = anchors.get(anchors.size() - 1).absUrl("href"); return carrieraUrl; } else { return ""; } } }