2 / 2 / 2
Регистрация: 27.03.2013
Сообщений: 55
1

Парсинг из сайта booking.uz.gov.ua

03.07.2015, 13:21. Показов 2150. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
У меня есть такой код, который парсит из сайта booking.uz.gov.ua.
Но почему мне не выдает запрос откуда и куда ехать.
Сразу говорю, код НЕ мой.
Но сам немогу разобратся.


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class Main {
 
    static String html   = "";
    static String cookie = "";
    static String token  = "";
    static String error  = "";
 
    static Map<String, List<String>> headers = null;
 
    static void fetchHtml() {
        try {
            URL url = new URL("http://booking.uz.gov.ua/");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            headers = conn.getHeaderFields();
            String line;
            while ((line = rd.readLine()) != null) {
                html += line;
            }
            rd.close();
        } catch (Exception e) {
            error = e.getMessage();
        }
    }
 
    static void parseCookie() {
        List<String> cookies = headers.get("Set-Cookie");
        for (String current_cookie : cookies) {
            if (current_cookie.startsWith("_gv_sessid")) {
                cookie = current_cookie;
                break;
            }
        }
    }
 
    static void parseToken() {
        String adapter = "var token;localStorage={setItem:function(key, value){if(key==='gv-token')token=value}};";
        Pattern pattern = Pattern.compile("\\$\\$_=.*~\\[\\];.*\"\"\\)\\(\\)\\)\\(\\);");
        Matcher matcher = pattern.matcher(html);
        if (matcher.find()) {
            String obfuscated = matcher.group(0);
            ScriptEngineManager factory = new ScriptEngineManager();
            ScriptEngine engine = factory.getEngineByName("JavaScript");
            try {
                engine.eval(adapter + obfuscated);
            } catch (ScriptException e) {
                error = e.getMessage();
            }
            token = engine.get("token").toString();
        }
    }
 
    static String getStationId(String name) {
        String json = "";
        try {
            URL url = new URL("http://booking.uz.gov.ua/en/purchase/station/" + name + "/");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = rd.readLine()) != null) {
                json += line;
            }
            rd.close();
        } catch (Exception e) {
            error = e.getMessage();
        }
        ScriptEngineManager factory = new ScriptEngineManager();
        ScriptEngine engine = factory.getEngineByName("JavaScript");
        engine.put("json", json);
        try {
            engine.eval("var station_id = JSON.parse(json).value[0].station_id");
        } catch (ScriptException e) {
            error = e.getMessage();
        }
        return engine.get("station_id").toString();
    }
 
    static String getData(String fromName, String toName, String date) {
        fetchHtml();
        parseCookie();
        parseToken();
        String from = getStationId(fromName);
        String to = getStationId(toName);
        String json = "";
        try {
            URL url = new URL("http://booking.uz.gov.ua/en/purchase/search/");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestProperty("Cookie", cookie);
            conn.setRequestProperty("GV-Token", token);
            conn.setRequestProperty("GV-Ajax", "1");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            conn.setRequestProperty("Referer", "http://booking.uz.gov.ua/en/");
            conn.setRequestMethod("POST");
            String urlParameters = MessageFormat.format("station_id_from={0}&station_id_till={1}&date_dep={2}" +
                                                        "&time_dep=00:00&time_dep_till=24:00", from, to, date);
            conn.setDoOutput(true);
            DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
            wr.writeBytes(urlParameters);
            wr.flush();
            wr.close();
            BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = rd.readLine()) != null) {
                json += line;
            }
            rd.close();
        } catch (Exception e) {
            error = e.getMessage();
        }
        return json;
    }
 
    static String getData(String fromName, String toName) {
        return getData(fromName, toName, new SimpleDateFormat("MM.dd.yyyy").format(new Date()));
    }
 
    public static void main(String[] args) {
        if (args.length < 2) {
            System.out.println("Онлайн резервування та придбання квиткiв - Укрзалізниця");
            System.out.println("Введите: <start_station> <end_station> [MM.DD.YYYY]");
            System.exit(1);
        }
        String data;
        if (args.length > 2)
            data = getData(args[0], args[1], args[2]);
        else
            data = getData(args[0], args[1]);
        System.out.println(data);
    }
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.07.2015, 13:21
Ответы с готовыми решениями:

Парсинг данных с сайта или страницы сайта
Здравствуйте, добрые люди! Есть задача спарсить данные с страницы соц сети. Или просто со...

Как подключиться по FTP к zakupki.gov.ru
Добры вечер ребята ... Хочу написать программу для работы FTP серверу! Но я не понял вот это, до...

Работа в Windows 10 с сайтом zakupki.gov.ru
Ребята, добрый день. Подскажите, пожалуйста, на работе юрист обновил ОС до Windows 10... Не...

Можно ли работать с bus.gov.ru на linux
Скажите возможно ли установить bus.gov.ru, zakupki.gov.ru и сервис контур экстерн на linux?

1
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
05.07.2015, 23:21 2
так там сам сайт не работает наверное )))
Только что пробовал например Днепропетровск - Красноград - ничего не находит
1
05.07.2015, 23:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2015, 23:21
Помогаю со студенческими работами здесь

Парсинг сайта
Доброе утро! Есть на сайт таблица &lt;table class=&quot;tabulkaquick&quot; width=&quot;670&quot;&gt; &lt;tbody&gt; &lt;tr&gt; ...

Парсинг сайта
Добрый день. Возникла проблема с написанием рекурсивного парсинга страниц сайта. Суть такова,...

Парсинг сайта
Хочу пропарсить сайт, на котором через некоторое время появляются элементы в виде div-ов. Эти дивы...

Парсинг сайта
Подскажите пожалуйста чем лучше всего парсить сайты? что-бы было просто и легко. Html Agility Pack...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru