Маленький пятничный подарок, реализованный за 1 час времени с нуля — прошу, интеграция с AviaSales.
Хотите, чтобы в модуле управления командировками можно было получать реальные цены на авиабилеты? Вот кусок кода, который можно вставить в бадишку для поиска билетов. Это образец, дальше сами сообразите. А полное решение будет в новой книге от меня 😉
REPORT ZAVIASALES.
DATA: lo_http_client TYPE REF TO if_http_client,
lo_rest_client TYPE REF TO cl_rest_http_client,
lv_url TYPE string,
lv_body TYPE string,
lo_response TYPE REF TO if_rest_entity.
cl_http_client=>create_by_url(
EXPORTING
url = ‘http://api.travelpayouts.com’
IMPORTING
client = lo_http_client » HTTP Client Abstraction
exceptions
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
others = 4
).
CREATE OBJECT lo_rest_client
EXPORTING
io_http_client = lo_http_client.
IF lo_http_client IS BOUND AND lo_rest_client IS BOUND.
lv_url = ‘/v1/prices/cheap?origin=MOW&destination=HKT&depart_date=2015-11&return_date=2015-12&token=ВАШТОКЕН’.
cl_http_utility=>set_request_uri(
EXPORTING
request = lo_http_client->request » HTTP Framework (iHTTP) HTTP Request
uri = lv_url » URI String (in the Form of /path?query-string)
).
* HTTP GET
lo_rest_client->if_rest_client~get( ).
* HTTP response
lo_response = lo_rest_client->if_rest_client~get_response_entity( ).
* HTTP return status
DATA(http_status) = lo_response->get_header_field( ‘~status_code’ ).
* HTTP JSON return string
DATA(json_response) = lo_response->get_string_data( ).
write json_response.
ENDIF.
Результат выглядит вот так. И его уже можно разобрать на части, сложить в поля.
{«success»: true, «data»: {«HKT»:{«0»:{«price»:36693,»airline»:»SU»,»flight_number»:274,»departure_at»:»2015-11-24T19:15:00Z»,»return_at»:»2015-12-09T11:40:00Z»,»expires_at»:»2015-10-19T14:18:50Z»},»1″:{«price»:25654,»airline»:»CA»,»flight_number»:910,»departure_at»:»2015-11-22T18:55:00Z»,»return_at»:»2015-12-10T01:40:00Z»,»expires_at»:»2015-10-17T18:14:29Z»},»2″:{«price»:26837,»airline»:»EY»,»flight_number»:68,»departure_at»:»2015-11-19T12:50:00Z»,»return_at»:»2015-12-15T06:55:00Z»,»expires_at»:»2015-10-18T14:54:47Z»},»3″:{«price»:37979,»airline»:»SU»,»flight_number»:22,»departure_at»:»2015-11-16T16:10:00Z»,»return_at»:»2015-12-14T01:50:00Z»,»expires_at»:»2015-10-19T13:11:55Z»}}}}
2 комментария
Bully
правильнее параметры задавать не через URL, а через метод, который управляет GET-параметрами.
совсем было бы вкусно, если бы полученный JSON ты при помощи XLT положил в ABAP-переменные. 🙂
VirVit
Это же затравка 🙂 Так бы неплохо и проксирующие классы сделать 😉