2020.04.01 【ABAP隨筆】- 通過api獲取新冠數據


今天是個娛樂的節日,學點新東西,如下:

突發奇想想要使用abap去獲取個網站上公布的api,然后顯示一下

就當最近學習NEPTUNE的小練習吧

blob.png

百度一下獲取疫情的網站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

blob.png

blob.png

對於NEWSLIST每一行都是一個結構對象

blob.png

雙擊進入,可以看到獲取了美國新冠疫情的最新數據,每一行都是一個國家

blob.png

按照上面的結構,我們可以創建全局變量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 .

 

將獲取到的數據顯示在手機/平板端:

blob.png

可以點擊右上方的圖標,獲取累計確診排名前20名的國家柱狀圖:

可以看到我們查詢的時候,米國的確診人數已經到達了

blob.png

就是做了一個簡單的數據table 和 chart來學習一下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM