Ignore:
Timestamp:
01/10/25 19:07:51 (5 days ago)
Author:
Kristijan <kristijanzafirovski26@…>
Branches:
master
Children:
cd64b06
Parents:
53bad7e
Message:

Added details for magelan

File:
1 edited

Legend:

Unmodified
Added
Removed
  • backend/GlobeGuru-backend/src/main/java/ScraperThread.java

    r53bad7e r1c51912  
    3939    }
    4040
    41     private WebDriver driver;
     41    public WebDriver driver;
    4242
    4343    private void initializeWebDriver() {
     
    7070                wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.sodrzina")));
    7171                break;
    72             default:
    73                 System.out.println("URL not recognized for waiting condition.");
    74                 // Handle other URLs if needed
    7572        }
    7673
     
    9289                            Option existingOption = DatabaseUtil.findOption(option);
    9390                            if (existingOption != null) {
    94                                 if (existingOption.equals(option) || existingOption.getPrice() != option.getPrice()) {
     91                                if (existingOption.equals(option)) {
    9592                                    option.setPriceChanged(true);
    9693                                    option.setNewPrice(option.getPrice());
     
    112109                if (parentDiv != null) {
    113110                    childDivs = parentDiv.select("div.destinacija");
    114                     System.out.println(childDivs.size());
    115111                    childDivs.removeIf(div -> div.attr("style").contains("display:none") || div.attr("style").contains("display: none"));
    116112                    System.out.println("Filtered childDivs size: " + childDivs.size());
     
    119115                        Option newOption = optionParser(data,numPeople);
    120116                        if (newOption != null) {
    121                             Option existingOption = DatabaseUtil.findOption(newOption);
    122                             if (existingOption != null) {
    123                                 if (existingOption.equals(newOption) || existingOption.getPrice() != newOption.getPrice()) {
    124                                     newOption.setPriceChanged(true);
    125                                     newOption.setNewPrice(newOption.getPrice());
    126                                 }
    127                                 DatabaseUtil.updateOptionInDatabase(newOption);
    128                             } else if (optionSet.add(newOption)) {
     117                            if (optionSet.add(newOption)) {
    129118                                uniqueOptions.add(newOption);
    130                                 DatabaseUtil.saveOptionToDatabase(newOption);
     119
     120                                newOption.setId(DatabaseUtil.saveOptionToDatabase(newOption));
     121                                scrapeOptionInfo(newOption);
    131122                                System.out.println("Parsed " + newOption);
    132123                            }
     
    142133        }
    143134    }
    144 
    145 
    146 
    147     private Option optionParser(String data, int numPeople) {
     135    private void scrapeOptionInfo(Option option) {
     136        String url = option.getLink();
     137        if(url.contains("magelantravel.mk")) {
     138            System.out.println("Scraping info for " + option.getHotelName());
     139         String[] dates = option.getDateRange().split(" - ");
     140         url += "&checkin=" + dates[0] + "&checkout=" + dates[1] + "&adult=" + option.getNumPeople();
     141
     142         driver.get(url);
     143         try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } //data fetch
     144         String pageSource = driver.getPageSource();
     145         Document doc = Jsoup.parse(pageSource);
     146         Elements roomOptions = doc.select(".tblroom > tbody > tr");
     147         for (Element roomOption : roomOptions) {
     148             String type = roomOption.select("a.tblroom-type").text();
     149
     150             String board = roomOption.select(".rezervacija-objekt").text();
     151             if(board.length() > 2){
     152                 board = board.substring(0,2);
     153             }
     154             if(board.isEmpty() || type.isEmpty()){
     155                 continue;
     156             }
     157             Elements amenityElement = roomOption.select(".objekt-opis");
     158             String amenity = (amenityElement != null ? amenityElement.text() : "");
     159             System.out.println(amenity + " " + board + " " + type );
     160             String priceText = roomOption.select(".tbl-cena").text().replace("€", "").trim();
     161             float price;
     162             if (!priceText.isEmpty()) {
     163                 price = Float.parseFloat(priceText);
     164             }else continue;
     165
     166             DatabaseUtil.saveOptionDetails(option.getId(), type,board,amenity, price);
     167         }
     168        }
     169    }
     170    private Option optionParser(String data, int numPeople){
    148171        Document doc = Jsoup.parse(data);
    149172        Option created = new Option();
     
    162185        }
    163186        if (created.isEmpty()) {
    164             System.out.println(created);
    165187            return null;
    166188        }
     189        //scrapeOptionInfo(created);
    167190        return created;
    168191    }
     
    181204        Element countryElement = doc.selectFirst("l.ponuda-lokacija");
    182205        created.setCountry(countryElement != null ? countryElement.text() : null);
    183         Element priceElement = doc.selectFirst("div.ponuda-cena");
     206        //Element priceElement = doc.selectFirst("div.ponuda-cena");
    184207        Element dateElement = doc.selectFirst("l.ponuda-opis.termin");
    185208        created.setDateRange(dateElement != null ? dateElement.text() : null);
    186         float price = Float.parseFloat(priceElement != null ? priceElement.text().replaceAll("[^\\d.]", "") : "0");
    187         created.setPrice(price);
     209        /*float price = Float.parseFloat(priceElement != null ? priceElement.text().replaceAll("[^\\d.]", "") : "0");
     210        created.setPrice(price);*/
    188211        return created;
    189212    }
     
    198221        String country = countryP.text().replaceAll("leto hoteli", "");
    199222        created.setCountry(country);
    200         Element priceElem = doc.selectFirst("span.hotel-price");
     223        /*Element priceElem = doc.selectFirst("span.hotel-price");
    201224        String priceText = priceElem.text();
    202225        float price = 0;
     
    204227            price = Float.parseFloat(priceText.replace("€", ""));
    205228        }
    206         created.setPrice(price);
     229        created.setPrice(price);*/
    207230        String[] queryParams = link.split("[?&]");
    208231        String startDateStr = null;
Note: See TracChangeset for help on using the changeset viewer.