Автоматический выбор и отправка значений формы по заданному URL - PullRequest
1 голос
/ 19 января 2012

Я хочу, чтобы мое приложение Java загружало файлы CSV, например, с http://www.nasdaqomxbaltic.com/ или с любого другого сайта, который предлагает файлы данных.

Как я могу сказать моему java-приложению изменить значения на и перед загрузкой файла csv?

Ниже приведена форма для выбора диапазона дат: http://www.nasdaqomxbaltic.com/market/?pg=charts&idx_main[]=OMXBBGI. По умолчанию используются значения от и до, назначенные веб-сайтом, и я получаю файл CSV, включающий данные между значениями по умолчанию и датой.

Не могли бы вы предложить какую-либо библиотеку Java, которая может меняться от и до значений для загрузки CSV-файла, включая только определенный диапазон дат?

1 Ответ

1 голос
/ 19 января 2012

Во-первых, вы можете направить поиск по дате с помощью следующего URL:

http://www.nasdaqomxbaltic.com/market/?pg=charts&lang=en&idx_main%5B%5D=OMXBBGI&add_index=OMXBBPI&add_equity=LT0000128266&period=6months&start_d=19&start_m=7&start_y=2011&end_d=19&end_m=1&end_y=2012

, где вы можете указать нужные значения даты для этих параметров:

ex :start_d=19&start_m=7&start_y=2011&end_d=19&end_m=1&end_y=2012

Тогда идея состоит в том, чтобы получить отрендеренную веб-страницу. Здесь вы можете использовать библиотеку Jsoup следующим образом:

Document doc = Jsoup.connect("http://www.nasdaqomxbaltic.com/market/?pg=charts&lang=en&idx_main%5B%5D=OMXBBGI&add_index=OMXBBPI&add_equity=LT0000128266&period=6months&start_d=19&start_m=7&start_y=2011&end_d=19&end_m=1&end_y=2012").get();
Elements csvLinkFiles= doc.select("div.download > a");
int filesCounter = 0;
for (Element link : csvLinkFiles) {
    String href = link.attr("href");
    URL csvFileLink= new URL(href);
    ReadableByteChannel rbc = Channels.newChannel(csvFileLink.openStream());
    FileOutputStream fos = new FileOutputStream("csv-file-"+ (++filesCounter) + ".csv");
    fos.getChannel().transferFrom(rbc, 0, 1 << 24);
}

Я не уверен насчет кода, но идея здесь.

РЕДАКТИРОВАТЬ:

После выполнения небольшого запроса кажется, что вам нужно выполнить HTTP Get (потому что файл не статичен и возвращается по запросу).

Вот небольшой фрагмент кода, который должен заменить весь код ниже строки URL csvFileLink= new URL(href):

GetMethod get = new GetMethod(href);
InputStream in = get.getResponseBodyAsStream();
File file=new File("csv-file-"+ (++filesCounter) + ".csv");
OutputStream out = new FileOutputStream(file);
int read = 0;
byte[] bytes = new byte[1024];
while ((read = inputStream.read(bytes)) != -1) {
    out.write(bytes, 0,  read);
}
in.close();
out.flush();
out.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...