package org.softeg.slartus.forpdaplus.devdb.helpers; import com.google.gson.Gson; import org.jsoup.Jsoup; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.softeg.slartus.forpdaplus.devdb.model.CommentsModel; import org.softeg.slartus.forpdaplus.devdb.model.DiscussionModel; import org.softeg.slartus.forpdaplus.devdb.model.FirmwareModel; import org.softeg.slartus.forpdaplus.devdb.model.PricesModel; import org.softeg.slartus.forpdaplus.devdb.model.ReviewsModel; import org.softeg.slartus.forpdaplus.devdb.model.SpecModel; import java.util.ArrayList; import java.util.List; /** * Created by isanechek on 23.11.15. */ public class ParseHelper { private ParsedModel parsed = new ParsedModel(); public ParsedModel parseHelper(String page) { Element main = Jsoup.parse(page).select(".device-frame").first(); parseTitle(main); parseSpec(main); parseFirmware(main); parseComments(main); parseReviews(main); parseDiscussions(main); parsePrices(main); return parsed; } private void parseTitle(Element main){ parsed.setTitle(main.select(".product-name").first().text()); } private void parseSpec(Element main){ SpecModel specModel = new SpecModel(); Element spec = main.select("#specification").first(); for(Element element:spec.select(".item-visual .item-gallery a")){ specModel.getGalleryLinks().add(element.attr("href")); specModel.getGalleryImages().add(element.select("img").first().attr("src")); } Elements temp = spec.select(".item-main .price-box .price strong"); if(!temp.text().isEmpty()) specModel.setPrice(temp.first().text()); specModel.setSpecTable(spec.select(".item-content .content .specifications-list")); parsed.setSpecModel(specModel); } private void parseDiscussions(Element main) { String link, title, time, description; List<DiscussionModel> cache = new ArrayList<>(); DiscussionModel model; for (Element element : main.select("#discussions .article-list li")) { link = element.select(".title a").first().attr("href"); title = element.select(".title").first().text(); time = element.select(".upd").first().text(); description = element.select(".description").first().text(); cache.add(new DiscussionModel(description, time, link, title)); } parsed.setDiscussionModels(new Gson().toJson(cache)); } private void parseComments(Element main) { String comment, link, userName, date, ratingNum, ratingText; List<CommentsModel> cache = new ArrayList<>(); ArrayList<String> dr = new ArrayList<>(); for (Element element1 : main.select("#comments .reviews li")) { if (!element1.select(".text-box").text().isEmpty()) { /** * Тут короче если текст бокс не нуль, то и все остальное не нуль. */ Element element = element1.select(".text-box .w-toggle").first(); if(element==null) element = element1.select(".text-box").first(); comment = element.text(); element = element1.select("div.name a").first(); link = element.attr("href"); userName = element.attr("title"); date = element1.select("div.date").first().text(); ratingNum = element1.select("span.num").first().text(); ratingText = element1.select("span.text").first().text(); // for detail dialog Elements elements1 = element1.getElementsByClass("reviews-list"); if (elements1 != null) for (Element element2 : elements1) dr.add(element2.select("div.line").text()); cache.add(new CommentsModel(date, ratingNum, ratingText, comment, link, userName, dr)); } } parsed.setCommentsModels(new Gson().toJson(cache)); } private void parsePrices(Element main) { String link, title, time, description; List<PricesModel> cache = new ArrayList<>(); Elements elements = main.select("#prices .article-list li"); for(Element element:elements){ link = element.select(".title a").first().attr("href"); title = element.select(".title").first().text(); time = element.select(".upd").first().text(); description = element.select(".description").first().text(); cache.add(new PricesModel(time, description, link, title)); } parsed.setPricesModels(new Gson().toJson(cache)); } private void parseFirmware(Element main) { String link, title, time, description; List<FirmwareModel> cache = new ArrayList<>(); for(Element element:main.select("#firmware .article-list li")){ link = element.select(".title a").first().attr("href"); title = element.select(".title").first().text(); time = element.select(".upd").first().text(); description = element.select(".description").first().text(); cache.add(new FirmwareModel(time, description, link, title)); } parsed.setFirmwareModels(new Gson().toJson(cache)); } private void parseReviews(Element main) { String url, imgLink, title, date, description; List<ReviewsModel> cache = new ArrayList<>(); for(Element element:main.select("#reviews .article-list li")){ url = element.select("a").first().attr("href"); imgLink = element.select(".article-img img").first().attr("src"); title = element.select(".title").first().text(); date = element.select(".upd").first().text(); description = element.select(".description").first().text(); cache.add(new ReviewsModel(date, imgLink, url, description, title)); } parsed.setReviewsModels(new Gson().toJson(cache)); } }