package com.tevinjeffrey.rmp.scraper.search; import com.tevinjeffrey.rmp.scraper.ScrapeLocation; import com.tevinjeffrey.rmp.scraper.ScrapeProfessor; import com.tevinjeffrey.rmp.scraper.ScrapeRating; import org.apache.commons.lang3.StringUtils; public class RatingParser { public static ScrapeProfessor findProfessor(Listing listing, String html) { ScrapeProfessor scrapeProfessor = new ScrapeProfessor(); scrapeProfessor.firstName = findFirstName(html); scrapeProfessor.lastName = findLastName(html); scrapeProfessor.department = findDepartment(html); ScrapeLocation scrapeLocation = new ScrapeLocation(); scrapeLocation.city = findLocation(html); scrapeLocation.university = findUniversity(html); ScrapeRating scrapeRating = new ScrapeRating(); scrapeRating.overall = toStringDouble(findOverallQuality(html)); scrapeRating.clarity = toStringDouble(findClarity(html)); scrapeRating.easiness = toStringDouble(findEasiness(html)); scrapeRating.helpfulness = toStringDouble(findHelpfulness(html)); scrapeRating.isHotness = findHotness(html); scrapeRating.ratingsCount = findRatingCount(html); scrapeRating.ratingUrl = listing.getUrl(); scrapeRating.averageGrade = findAverageGrade(html); scrapeProfessor.location = scrapeLocation; scrapeProfessor.rating = scrapeRating; return scrapeProfessor; } private static double toStringDouble(String str) { try { return Double.parseDouble(str); } catch (NumberFormatException e) { return 0; } } private static int findRatingCount(String html) { String dirty = StringUtils.substringAfter(html, "count active\" data-table=\"rating-filter\">"); try { return Integer.parseInt(StringUtils.substringBefore(dirty, " Student Ratings").trim()); } catch (NumberFormatException e) { return 0; } } public static boolean isLegit(String html) { return !findFirstName(html).trim().equals(""); } public static String findLastName(String html) { String dirty = StringUtils.substringAfter(html, "class=\"plname\">"); return StringUtils.substringBefore(dirty, "<").trim(); } public static String findFirstName(String html) { String dirty = StringUtils.substringAfter(html, "<span class=\"pfname\">"); return StringUtils.substringBefore(dirty, "<").trim(); } public static String findUniversity(String html) { String dirty = StringUtils.substringAfter(html, "class=\"school\">"); return StringUtils.substringBefore(dirty, "<").trim(); } public static String findLocation(String html) { String dirty = StringUtils.substringAfter(html, "</a>,"); return StringUtils.substringBefore(dirty, ", ").trim(); } public static String findDepartment(String html) { String dirty = StringUtils.substringAfter(html, "Professor in the "); return StringUtils.substringBefore(dirty, " department").trim(); } public static String findOverallQuality(String html) { String dirty = StringUtils.substringAfter(html, "Overall Quality"); String dirty2 = StringUtils.substringAfter(dirty, "\">"); return StringUtils.substringBefore(dirty2, "<").trim(); } public static String findAverageGrade(String html) { String dirty = StringUtils.substringAfter(html, "Average Grade"); String dirty2 = StringUtils.substringAfter(dirty, "\">"); return StringUtils.substringBefore(dirty2, "<").trim(); } public static boolean findHotness(String html) { String dirty = StringUtils.substringAfter(html, "Hotness"); String dirty2 = StringUtils.substringAfter(dirty, "<img src=\""); return !dirty2.contains("cold"); } public static String findHelpfulness(String html) { String dirty = StringUtils.substringAfter(html, "<div class=\"label\">Helpfulness</div>"); String dirty2 = StringUtils.substringAfter(dirty, "<div class=\"rating\">"); return StringUtils.substringBefore(dirty2, "<").trim(); } public static String findClarity(String html) { String dirty = StringUtils.substringAfter(html, "<div class=\"label\">Clarity</div>"); String dirty2 = StringUtils.substringAfter(dirty, "<div class=\"rating\">"); return StringUtils.substringBefore(dirty2, "<").trim(); } public static String findEasiness(String html) { String dirty = StringUtils.substringAfter(html, "<div class=\"label\">Easiness</div>"); String dirty2 = StringUtils.substringAfter(dirty, "<div class=\"rating\">"); return StringUtils.substringBefore(dirty2, "<").trim(); } }