新浪数据获取
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
REPORT zbrf. *&---------------------------------------------------------------------* *& Report ZDPPSTDWT *& *&---------------------------------------------------------------------* *https://blog.csdn.net/kindsavage/article/details/78513326 *& *&---------------------------------------------------------------------* TYPE-POOLS: slis. TABLES: ekpo,pa0001,mara,ekko. DATA : gt_user LIKE uinfo OCCURS 0 WITH HEADER LINE. " User info in SM04 CLASS lcl_receiver DEFINITION. PUBLIC SECTION. METHODS: handle_finished FOR EVENT finished OF cl_gui_timer. ENDCLASS. CLASS lcl_receiver IMPLEMENTATION. METHOD handle_finished. CALL METHOD cl_gui_cfw=>set_new_ok_code EXPORTING new_code = '&NTE'. ENDMETHOD. ENDCLASS. DATA: test TYPE i, receiver TYPE REF TO lcl_receiver, timer TYPE REF TO cl_gui_timer. *--·与ALV相关的变量 DATA: wa_fieldcat TYPE lvc_s_fcat, "ALV显示字段內表 it_fieldcat TYPE lvc_t_fcat, "ALV显示字段结构 wa_layout TYPE lvc_s_layo, "ALV显示风格结构 ls_glay TYPE lvc_s_glay, it_sub_fieldcat TYPE lvc_t_fcat, wa_sub_layout TYPE lvc_s_layo, con_diabox TYPE REF TO cl_gui_dialogbox_container, wcl_alv1 TYPE REF TO cl_gui_alv_grid, tem_grid TYPE REF TO cl_gui_alv_grid, ref_grid TYPE REF TO cl_gui_alv_grid. DATA: mt_stock_pub_list TYPE TABLE OF string . TYPES: BEGIN OF ty_stock_live, sid TYPE char10, sname TYPE char10, topen TYPE char10, yclose TYPE char10, cprice TYPE char10, thigh TYPE char10, tlow TYPE char10, buy TYPE char10, sale TYPE char10, number TYPE char20, amount TYPE char20, buy11 TYPE char10, buy12 TYPE char10, buy21 TYPE char10, buy22 TYPE char10, buy31 TYPE char10, buy32 TYPE char10, buy41 TYPE char10, buy42 TYPE char10, buy51 TYPE char10, buy52 TYPE char10, sale11 TYPE char10, sale12 TYPE char10, sale21 TYPE char10, sale22 TYPE char10, sale31 TYPE char10, sale32 TYPE char10, sale41 TYPE char10, sale42 TYPE char10, sale51 TYPE char10, sale52 TYPE char10, date TYPE char15, time TYPE char15, cbox(1) TYPE c, " line_color(4) TYPE c, "设置行颜色的字段 cell_color TYPE slis_t_specialcol_alv, "设置字段颜色 END OF ty_stock_live. TYPES: BEGIN OF ty_stock_id, stock_id TYPE char6, END OF ty_stock_id. TYPES ty_tab_stock_id TYPE STANDARD TABLE OF ty_stock_id. TYPES ty_tab_stock_live TYPE STANDARD TABLE OF ty_stock_live. DATA: gv_stock_id(6) TYPE c. DATA: tmp_num(6) TYPE n, idx TYPE i, idx_tmp TYPE i. "定义内表,定义SALV 的类CL_GUI_SALV_TABLE的对象变量 DATA gt_stock_id TYPE ty_tab_stock_id. DATA gs_stock_id TYPE ty_stock_id. "定义股票信息内表 DATA gt_stock TYPE ty_tab_stock_live . DATA gs_stock TYPE ty_stock_live. DATA: gt_stock_pub_list TYPE TABLE OF string. "定义股票信息OOALV相关类 DATA go_table TYPE REF TO cl_salv_table. DATA go_functions TYPE REF TO cl_salv_functions_list. DATA: go_columns TYPE REF TO cl_salv_columns_table. DATA: go_column TYPE REF TO cl_salv_column_table. DATA: go_column_list TYPE REF TO cl_salv_column_list. DATA:go_container TYPE REF TO cl_gui_custom_container. DATA: go_dock TYPE REF TO cl_gui_docking_container, go_picture TYPE REF TO cl_gui_picture. DATA: gv_url TYPE char256, gt_data TYPE STANDARD TABLE OF x255. DATA lt_res TYPE TABLE OF string. DATA l_str TYPE string. DATA l_str_field TYPE string. FIELD-SYMBOLS: <fs_value> TYPE any. FIELD-SYMBOLS: <fs_stock> TYPE ty_stock_live. DATA: ls_color TYPE lvc_s_scol. DATA: BEGIN OF wa_num, num(6) TYPE c, END OF wa_num. DATA: BEGIN OF wa_lin, str TYPE string, END OF wa_lin. DATA: it_num LIKE TABLE OF wa_num, it_restab LIKE TABLE OF wa_num, it_res LIKE TABLE OF wa_lin. DATA ms_stock_id TYPE ty_stock_id . DATA: lo_abap_conv TYPE REF TO cl_abap_conv_in_ce, li_http_client TYPE REF TO if_http_client, lv_stock_pub_url TYPE string VALUE 'http://hq.sinajs.cn/list=', abap_encoding TYPE abap_encoding, * l_str TYPE string, l_xstr TYPE xstring, l_tmp TYPE string, l_url TYPE string. "定义本地类 DATA:it_stock_id TYPE ty_tab_stock_id . DATA: it_output TYPE TABLE OF ty_stock_live, is_output TYPE ty_stock_live, wa_output TYPE ty_stock_live, gt_fieldcat TYPE lvc_t_fcat, gs_fieldcat TYPE lvc_s_fcat, gs_layout TYPE lvc_s_layo. INITIALIZATION. * s_APP_%-TEXT = 'DN号'. START-OF-SELECTION. create object timer. create object receiver. set handler receiver->handle_finished for timer. timer->interval = 1. PERFORM get_data. PERFORM f_read_data. PERFORM process_data. PERFORM display_data. *&---------------------------------------------------------------------* *& FORM GET_DATA *&---------------------------------------------------------------------* * 获取数据 *----------------------------------------------------------------------* FORM get_data. CLEAR:it_res. REFRESH:it_res. l_url = |http://hq.sinajs.cn/list=hf_CHA50CFD|. CALL METHOD cl_http_client=>create_by_url EXPORTING url = l_url IMPORTING client = li_http_client EXCEPTIONS argument_not_found = 1 plugin_not_active = 2 internal_error = 3 OTHERS = 4. CALL METHOD li_http_client->request->set_header_field EXPORTING name = 'Content-Type' value = 'text/html;charset=utf-8'. " utf-8 CALL METHOD li_http_client->send EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2. CALL METHOD li_http_client->receive EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3. l_xstr = li_http_client->response->get_data( ). IF sy-subrc = 0 . li_http_client->close( ). ENDIF. CALL METHOD cl_abap_conv_in_ce=>create EXPORTING input = l_xstr encoding = '8400' replacement = '?' ignore_cerr = abap_true RECEIVING conv = lo_abap_conv. TRY. CALL METHOD lo_abap_conv->read IMPORTING data = l_str. CATCH cx_sy_conversion_codepage. CATCH cx_sy_codepage_converter_init. CATCH cx_parameter_invalid_type. CATCH cx_parameter_invalid_range. ENDTRY. REFRESH mt_stock_pub_list. SPLIT l_str AT cl_abap_char_utilities=>newline INTO TABLE mt_stock_pub_list. DATA gv_stock_id TYPE char6 . DATA mt_stock TYPE ty_tab_stock_live . DATA ms_stock TYPE ty_stock_live . DATA mt_stock_id TYPE ty_tab_stock_id . DATA ms_stock_id TYPE ty_stock_id . LOOP AT mt_stock_pub_list INTO l_str. IF strlen( l_str ) < 30. CONTINUE. ENDIF. SPLIT l_str AT ',' INTO TABLE lt_res. READ TABLE lt_res INDEX 1 INTO l_str_field. ms_stock-sid = l_str_field+13(6). ms_stock-sname = l_str_field+24. idx = 2. WHILE idx < 33. READ TABLE lt_res INDEX idx INTO l_str_field. idx = idx + 1. ASSIGN COMPONENT idx OF STRUCTURE ms_stock TO <fs_value>. <fs_value> = l_str_field. IF idx = 3.. "a50特殊品种 . <fs_value> = ms_stock-sname. ENDIF. ENDWHILE. INSERT ms_stock INTO TABLE mt_stock. ENDLOOP. DATA: l_cellcolor TYPE slis_specialcol_alv, field_style TYPE lvc_s_styl. LOOP AT mt_stock INTO ms_stock. is_output = CORRESPONDING #( ms_stock ). IF is_output-topen >= is_output-sale. l_cellcolor-fieldname = 'TOPEN' . " 要修改颜色的字段名 l_cellcolor-color-col = 6 . " 颜色(1-7) l_cellcolor-color-inv = 1 . " 前景字体(int代表背景颜色) APPEND l_cellcolor TO is_output-cell_color . ELSE. l_cellcolor-fieldname = 'TOPEN' . " 要修改颜色的字段名 l_cellcolor-color-col = 5 . " 颜色(1-7) l_cellcolor-color-inv = 1 . " 前景字体(int代表背景颜色) APPEND l_cellcolor TO is_output-cell_color . ENDIF. APPEND is_output TO it_output.CLEAR is_output. ENDLOOP. ENDFORM. "GET_DATA *&---------------------------------------------------------------------* *& FORM PROCESS_DATA *&---------------------------------------------------------------------* * 处理数据 *----------------------------------------------------------------------* FORM process_data. ENDFORM. "PROCESS_DATA *&---------------------------------------------------------------------* *& FORM DISPLAY_DATA *&---------------------------------------------------------------------* * 显示数据 *----------------------------------------------------------------------* FORM display_data. DATA: lt_event_exit TYPE slis_t_event_exit, ls_event_exit TYPE slis_event_exit. DEFINE m_event_exit. CLEAR ls_event_exit. ls_event_exit-ucomm = &1. ls_event_exit-after = 'X'. APPEND ls_event_exit TO lt_event_exit. END-OF-DEFINITION. m_event_exit '&NTE'. wa_fieldcat-emphasize = 'C610'. "设置字段的颜色 PERFORM set_fieldcat USING 'TOPEN' '现价'. PERFORM set_fieldcat USING 'NUMBER' '开盘价'. PERFORM set_fieldcat USING 'THIGH' '最高价'. PERFORM set_fieldcat USING 'TLOW' '最低价'. PERFORM set_fieldcat USING 'SALE' '收盘价'. gs_layout-cwidth_opt = 'X'. gs_layout-zebra = 'X'. gs_layout-box_fname = 'CBOX'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'FRM_SET_PF_STATUS' i_callback_user_command = 'USER_COMMAND_ALV' " I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_ALV' it_fieldcat_lvc = it_fieldcat is_layout_lvc = gs_layout i_structure_name = 'TY_STOCK_LIVE' i_default = 'X' i_save = 'A' it_event_exit = lt_event_exit TABLES t_outtab = it_output EXCEPTIONS OTHERS = 1. ENDFORM. "DISPLAY_DATA FORM frm_set_pf_status USING pt_extab TYPE slis_t_extab. *--·状态 'STANDARD'是从系统功能组 KKBL GUI状态下的”STANDARD“下右键复制过去的 SET PF-STATUS 'STANDARD' EXCLUDING pt_extab. * SET PF-STATUS 'STANDARD' [OF PROGRAM prog] *--·如果要排除按钮的话,需要在此处加上EXCLUDING PT_EXTAB * SET TITLEBAR 'TITLE'. ENDFORM. "PF_STATUS_ALV *&---------------------------------------------------------------------* *& FORM USER_COMMAND_ALV *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* FORM user_command_alv USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. DATA: l_guid TYPE REF TO cl_gui_alv_grid. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = l_guid. "调用CHECK_CHANGED_DATA可以使被修改的数据自动更新到内表中去 CALL METHOD l_guid->check_changed_data. IF sy-subrc <> 0."调用完函数等之后,检查返回码sy-subrc的值,并做判断处理 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CASE r_ucomm. WHEN '&F03'. *--·设置可编辑 LEAVE TO SCREEN 0. WHEN '&F15'. *--·打开不同版本的prior month LEAVE PROGRAM. WHEN '&IC1'. CASE rs_selfield-fieldname. * DATA l_sort TYPE lvc_t_sort. * CALL METHOD l_guid->get_sort_criteria * IMPORTING * et_sort = l_sort. * * CLEAR l_sort. * CALL METHOD l_guid->set_sort_criteria * EXPORTING * it_sort = l_sort. * * **--·热点事件和双击事件 * CLEAR wa_output. * READ TABLE it_output INTO wa_output INDEX rs_selfield-tabindex. * IF rs_selfield-fieldname = 'MANDT'. ***--· 热点事件 ** CALL TRANSACTION 'SCC4'. "查看集团信息 * ELSEIF rs_selfield-fieldname = 'MATNR'. **--· 双击事件 ** PERFORM frm_doubleclick USING rs_selfield. * ENDIF. WHEN ''. * CHECK RS_SELFIELD-VALUE IS NOT INITIAL. * SET PARAMETER ID 'MBN' FIELD RS_SELFIELD-VALUE. * CALL TRANSACTION 'MB03' AND SKIP FIRST SCREEN. ENDCASE. ENDCASE. ENDFORM. "USER_COMMAND_ALV FORM set_fieldcat USING VALUE(p_0548) VALUE(p_0549). wa_fieldcat-just = 'L'."对其方式,L表示左对齐 wa_fieldcat-fieldname = p_0548 . wa_fieldcat-coltext = p_0549 . wa_fieldcat-seltext = p_0549 . APPEND wa_fieldcat TO it_fieldcat. CLEAR wa_fieldcat. ENDFORM. " SET_FIELDCAT FORM f_read_data. REFRESH gt_user. * Get User's info * CALL FUNCTION 'THUSRINFO' * TABLES * usr_tabl = gt_user. * Wait in a task CALL METHOD timer->run. ENDFORM.