新浪数据获取

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.
View Code
原文地址:https://www.cnblogs.com/ckstock/p/15272878.html