Wyszukiwarka towarów

0

Cześć. Wpadłem na pomysł, żeby sobie napisać taki programik, który by mi na podanej przeze mnie liście stron internetowych szukał danego po najniższej cenie i wyświetlał o nim info. Wiem, że jest coś takiego jak ceneo, ale ono nie działa zawsze tak jakbym chciał a to ma być wyszukiwarka dla specyficznego towaru i też dla zagranicznych stron.

Czy takie aplikacje robi się tak, że te strony wszystkie udostępniają API, czy muszę napisać jakiś parser html ?

0

Napotkałem pierwszy problem przy próbie odczytania pliku html .. :

    @GetMapping("/test")
    public String url() {
        URL url;
        StringBuilder html = new StringBuilder("");

        try {

            String a = "https://www.jomashop.com/certina-watch-c006-407-11-051-00.html";
            url = new URL(a);
//            URLConnection conn = url.openConnection();
            HttpsURLConnection con = (HttpsURLConnection) url.openConnection();

            BufferedReader br = new BufferedReader(
                    new InputStreamReader(con.getInputStream()));

            String inputLine;
            while ((inputLine = br.readLine()) != null) {
                html.append(inputLine);
            }
            br.close();


        } catch (IOException e) {
            e.printStackTrace();
        }

        return html.toString();


    }

Po wywołaniu tego dostaję:

java.io.IOException: Server returned HTTP response code: 405 for URL: https://www.jomashop.com/certina-watch-c006-407-11-051-00.html

Na innym sklepie dostaję normalnie kod html.

Sugestie ?

0

Musisz poprobowac np curlem. Zobacz w debugu jaki request leci i sprobuj odtworzyc sytuacje. Moze jest przekierowanie lub brakuje ci naglowka jakiegos. Na telefonie strzelilem przez onlinecurl.com i bylo wszystko ok

0

@hcubyc:

Oki dzięki ! A jeszcze jedno .. wiesz może jak odczytać np konkretną cenę w tym przypadku zegarka ? Bo tutaj to jest jako model js zapisane, a nie konkretna liczba.

0

To zalezy - jezeli dla kazdej strony masz inny algorytm i np szukasz konkretnego tagu to tez bym zrovil tu osobna strategie i czytal z jsa. Jezeli masz jakis ogolny mechanizm, ktory po prostu szuka ceny w htmlu to te konkretna strone bym olal, bo dla jednego przypadku bedziesz musial hackowac

0

@hcubyc:
Dodałem nagłówki i zrobiem dekodowanie:

        ```

HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setRequestProperty ("Accept", "/");
con.setRequestProperty ("Accept-Encoding", "gzip, deflate");
con.setRequestProperty ("User-Agent", "runscope/0.1");

        BufferedReader br = null;
        if ("gzip".equals(con.getContentEncoding())) {
            br = new BufferedReader(new InputStreamReader(new GZIPInputStream(con.getInputStream())));
        }
        else {
            br = new BufferedReader(
                    new InputStreamReader(con.getInputStream()));
        }

Ale zamiast tego co powinienem dostać, dostaję coś takiego:

<!DOCTYPE html><html><head><META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"><meta http-equiv="cache-control" content="max-age=0" /><meta http-equiv="cache-control" content="no-cache" /><meta http-equiv="expires" content="0" /><meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" /><meta http-equiv="pragma" content="no-cache" /><meta http-equiv="refresh" content="10; url=/distil_r_captcha.html?requestId=5138fbf7-c66f-4448-abe8-ff82d4553579&httpReferrer=%2Fcertina-watch-c006-407-11-051-00.html" /><script src="/cdn-cgi/apps/head/iyeI1HfvWlxE50i5Mq2B77638tw.js"></script><script type="text/javascript">	(function(window){		try {			if (typeof sessionStorage !== 'undefined'){				sessionStorage.setItem('distil_referrer', document.referrer);			}		} catch (e){}	})(window);</script><script type="text/javascript" src="/jmshpdstl.js" defer></script><style type="text/css">#d__fFH{position:absolute;top:-5000px;left:-5000px}#d__fF{font-family:serif;font-size:200px;visibility:hidden}#fdusefxzyacyqzd{display:none!important}</style></head><body><div id="distilIdentificationBlock"> </div></body></html>
0

Korzystajac z onlinecurl.com wywolujac po prostu cutl i ten adres dostaje inna odpowiedz, wiec musisz jeszcze pokombinowac

1 użytkowników online, w tym zalogowanych: 0, gości: 1