Prosty program prośba o pomoc

0

Witam,
Poproszę o pomoc w utworzeniu programu. Program ma pytać o :

    // USER INPUT
    //Ile KM przejechaleś?
    //... (tutaj dane użytkownika)

    //Koszt przejechania to ...zl.
    //Spaliles ... litrów paliwa.

Czy jest możliwość aby program pobierał średnią cene lpg z jakiegoś portalu automatycznie?

import java.util.;
import java.lang.
;
import java.io.*;

class Paliwo {

public static void main(String[] args)
{
    int ilosckm = 27;
    double cenalpg = 2.40;
    double spalanie = 9.0; // spalanie na 100km
    double koszt = (cenalpg * spalanie * ilosckm)/100;

    System.out.println("Koszt przejechania 100 km przy cenie lpg "+ cenalpg +" to: ");
    System.out.format("%.2f%n", koszt);

}

}

0

Myślę, że bez problemów.
Będziesz musiał pewnie parsować HTML "ręcznie" np. ze strony http://nafta.wnp.pl/ceny_paliw/.
Dobre wyrażenie regularne powinno wystarczyć.

0
  1. HTML łatwiej sparsować za pomocą dedykowanego parsera (są gotowe biblioteki w każdym chyba języku), niż bawić się w wymyślanie wyrażeń regularnych.
  2. zamiast parsować ze strony można by poszukać jakiejś usługi, która daje gotowe API do sprawdzania cen paliwa (nie wiem czy taka istnieje).
0

Myślałem też o imporcie pliku xml które są udostępniane przez różne strony a następnie import konkretnej informacji z tego pliku.

0
Krzywy Ogrodnik napisał(a):

Myślałem też o imporcie pliku xml które są udostępniane przez różne strony a następnie import konkretnej informacji z tego pliku.

Takie coś możesz zrobić za pomocą SAXParser/DOMParser, ale lepiej skorzystać z tego API bo z tym xml to nigdy nie wiadomo - nie wiesz czy nie zmieni się struktura, no i w sumie musiałbyś za każdym razem pobierać nową wersję tego pliku, co też może być problematyczne.

Chyba, że ta cena nie musi być aktualna - to ok.

Jeśli chodzi o parsera HTML to polecam jSoup - u mnie śmiga z crawlerem :D

0

Tak jak przedmowcy napisali. Opcje sa generalnie dwie: albo parsujesz jakas strone albo (zdecydowanie lepiej) skorzystasz z jakiegos API. Jezeli chcesz parsowac strone to dobra biblioteka jest jSoup. Przykladowy kod wyciagajacy srednia cene gazu:

 public double getAverageLpgCost() throws IOException {
        Document document = Jsoup.connect("http://nafta.wnp.pl/ceny_paliw/").get();
        Element table = document.select("table").first();
        Elements tableRows = table.select("tr");
        boolean tableHeader = true;
        double priceSum = 0;

        for (Element tableRow: tableRows) {
            if (tableHeader) {
                tableHeader = false;
                continue;
            }

            Elements tableCols = tableRow.select("td");
            priceSum += Double.parseDouble(tableCols.get(4).html().replaceAll(" .*", "")); // Cena LPG, czyli 5 kolumna
        }

        return priceSum / (double)(tableRows.size() - 1);
    }

Kod pisalem troche na szybko - nie wiem nawet czy dobrze liczy srednia bo nie sprawdzalem.

Przy podejsciu opartym na parsowaniu HTML-a dobrze byloby pobierac dane z wielu zrodel - wtedy jezeli jakas strona zmieni swoja strukture (ewentualnie przestanie dzialac) to program wyciagnie dane z innych serwisow.

Pobieranie danych z wielu serwisow mogloby takze w pewnym sensie rozwiazac problem niepoprawnych obliczen na skutek zmiany struktury strony - chodzi o sytuacje typu "ktos wstawil jedna kolumne i cena gazu nie jest juz w 5 kolumnie tylko w 6". Majac odpowiednia ilosc srednich cen paliw moglbys odrzucic wartosci skrajne. Problem tylko w tym, ze dane z roznych serwisow musialbys gdzies gromadzic tak aby nie były pobierane po każdym uruchomieniu aplikacji (długi czas oczekiwania).

0

Dziękuje za pomoc. Przetestuję to w domu rozwiązania które zaproponowaliście. :)

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