今天是個娛樂的節日,學點新東西,如下:
突發奇想想要使用abap去獲取個網站上公布的api,然后顯示一下
就當最近學習NEPTUNE的小練習吧
百度一下獲取疫情的網站API,也可以自己去tianapi申請,
METHOD init. url = 'http://api.tianapi.com/txapi/ncovabroad/index?key=****************************'. "創建http客戶端 CALL METHOD cl_http_client=>create_by_url EXPORTING url = url IMPORTING client = http_client EXCEPTIONS argument_not_found = 1 plugin_not_active = 2 internal_error = 3 OTHERS = 4. "設置http method 為Get * 設定傳輸請求內容格式以及編碼格式 http_client->request->set_content_type( content_type = 'application/json; charset=utf-8' ). * 設定調用服務 http_client->request->set_method( if_http_request=>co_request_method_get ). "發送 CALL METHOD http_client->send EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 http_invalid_timeout = 4 OTHERS = 5. "接收 CALL METHOD http_client->receive EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3. "獲取接口返回的數據 DATA(json_result) = http_client->response->get_cdata( ). DATA lr_data TYPE REF TO data. DATA lr_data_t TYPE REF TO data."table FIELD-SYMBOLS: <table> TYPE STANDARD TABLE, <result> TYPE STANDARD TABLE, <data> TYPE data, <struct> TYPE any, <field> TYPE any. DATA lr_struct TYPE REF TO cl_abap_structdescr. DATA lt_comps_wa TYPE abap_compdescr_tab. "通過/UI2/CL_JSON=>generate() 來通過JSON來轉化出內表 lr_data = /ui2/cl_json=>generate( json = json_result ). ASSIGN lr_data->* TO <data>. ASSIGN COMPONENT 'CODE' OF STRUCTURE <data> TO FIELD-SYMBOL(<code_ref>). ASSIGN <code_ref>->* TO FIELD-SYMBOL(<code>). IF <code> NE 200."調用api消息失敗, "輸出消息 CLEAR wa_message. wa_message-type = 'E'. wa_message-id = 'ZJXZHU'. wa_message-number = 003. wa_message-message_v1 = <code>. ASSIGN COMPONENT 'MSG' OF STRUCTURE <data> TO FIELD-SYMBOL(<msg_ref>). ASSIGN <msg_ref>->* TO FIELD-SYMBOL(<msg>). wa_message-message_v2 = <msg>. CALL METHOD server->api_message_create EXPORTING message = wa_message. RETURN. ENDIF. *轉化 , code = 200 表示接收成功 ASSIGN COMPONENT 'NEWSLIST' OF STRUCTURE <data> TO FIELD-SYMBOL(<list>). IF sy-subrc EQ 0. lr_data = <list>. ASSIGN lr_data->* TO <table>. READ TABLE <table> INTO lr_data INDEX 1. IF sy-subrc EQ 0. LOOP AT <table> ASSIGNING FIELD-SYMBOL(<table_line>). ASSIGN <table_line>->* TO <data>. APPEND INITIAL LINE TO gt_data ASSIGNING FIELD-SYMBOL(<fs_data>). "獲取typeof lr_struct ?= cl_abap_typedescr=>describe_by_data( <data> ). lt_comps_wa = lr_struct->components. LOOP AT lt_comps_wa INTO DATA(ls_comps_wa). ASSIGN COMPONENT ls_comps_wa-name OF STRUCTURE <fs_data> TO <field>. IF sy-subrc EQ 0. ASSIGN COMPONENT ls_comps_wa-name OF STRUCTURE <data> TO FIELD-SYMBOL(<value_ref>). IF sy-subrc EQ 0. ASSIGN <value_ref>->* TO FIELD-SYMBOL(<value>). IF sy-subrc EQ 0. <field> = <value>. ENDIF. ENDIF. ENDIF. ENDLOOP. ENDLOOP. ENDIF. ENDIF. ENDMETHOD.
在調用這個類執行中可以發現:LR_DATA->CODE->* = 200
LR_DATA->MSG->* = success
對於NEWSLIST每一行都是一個結構對象
雙擊進入,可以看到獲取了美國新冠疫情的最新數據,每一行都是一個國家
按照上面的結構,我們可以創建全局變量GT_DATA
DATA: BEGIN OF gs_data, confirmedcount TYPE i, "確診人數 confirmedcountrank TYPE i, "確診人數排名 continents TYPE string, "大洲 countryshortcode TYPE string, "國家代碼 curedcount TYPE i, "治愈人數 currentconfirmedcount TYPE i, "當前確診人數 deadcount TYPE i, "死亡人數 deadcountrank TYPE i, "死亡人數排名 deadrate TYPE string, "死亡率 deadraterank TYPE i, "死亡率排名 locationid TYPE i, "地址位置 modifytime TYPE i, "更新時間 provincename TYPE string, "國家名稱 END OF gs_data . DATA: gt_data LIKE TABLE OF gs_data .
將獲取到的數據顯示在手機/平板端:
可以點擊右上方的圖標,獲取累計確診排名前20名的國家柱狀圖:
可以看到我們查詢的時候,米國的確診人數已經到達了
就是做了一個簡單的數據table 和 chart來學習一下