คอมพิวเตอร์และอินเตอร์เน็ต,บรรยายวิชาการ,วิจัย,ศึกษากุรอาน,E-Book

วันอังคารที่ 27 กุมภาพันธ์ พ.ศ. 2567

ApexCharts.js ง่ายสุด

เขียน Chart อย่างง่ายด้วย ApexCharts : Modern & Interactive Open-source Charts
ดังนี้

1.กำหนด library path

<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>

2.กำหนดขนาดด้วย style

<style>   #chart {max-width: 650px; margin: 35px auto; } </style>

3.กำหนดที่สำหรับ render

<div id="chart"></div>

4.กำหนดลักษณะ chart ด้วย javascript

เช่น

<script>

  var options = {

  chart: {   

     type: 'bar'  },

    series: [{

        name: 'sales',

        data: [30,40,45,50,49,60,70,91,125]

  }],

  xaxis: {

    categories: [1991,1992,1993,1994,1995,1996,1997, 1998,1999]

  }

}

var chart = new ApexCharts(document.querySelector("#chart"), options);

chart.render();

</script>


หมาเหตุ : มีตัวอย่างการดึงข้อมูลจาก Api มาแสดงกราฟได้ทันที

                https://apexcharts.com/docs/update-charts-from-json-api-ajax/

ตย.

<html lang="en">

<head>

    <meta charset="UTF-8" />

    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <meta http-equiv="X-UA-Compatible" content="ie=edge" />

    <title>Axios Example </title>

    <style>

        #chart { max-width: 450px; margin: 35px auto; }

    </style>

    <script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.0/axios.min.js"></script>

</head>

<body>

    <div id="chart"></div>

    <script>

        var options = {

          series: [],

          chart: {

          height: 250,

          type: 'bar',

        },

        dataLabels: {

          enabled: false

        },

        title: {

          text: 'Ajax Example',

        },

        noData: {

          text: 'Loading...'

        },

        xaxis: {

          type: 'category',

          tickPlacement: 'on',

          labels: {

            rotate: -45,

            rotateAlways: true

          }

        }

        };

      var chart = new ApexCharts(document.querySelector("#chart"), options);

       chart.render();

      

        // AXIOS for GET DATA ///////////////////

        axios({

        method: 'GET',

        url: 'http://223.27.246.234/poe12-opendata/apexcharts_data/daily_passenger.php',

        })

        .then(function(response) {

            chart.updateSeries([{

            name: 'Passenger-in',

            data: response.data

            }])

        })

        /////////End Axios///////////////////////

    </script>  

</body>

</html>



วันจันทร์ที่ 26 กุมภาพันธ์ พ.ศ. 2567

การเขียนเอกสารประกอบ API

 


การเขียนเอกสารประกอบ API (Application Programing Interface) สำหรับให้ผู้อื่นได้เข้าถึงข้อมูล อย่างมีประสิทธิภาพและปลอดภัย จะต้องเขียนให้ครอบคลุมประเด็นหัวข้อ 5 หัวข้อ ดังนี้

1.URL สำหรับขอ Request 

            ตำแหน่งของ URL endpoint ของ API

2.Method สำหรับการเรียกใช้ API

           จะต้องใช้งานผ่าน HTTP Request ซึ่ง HTTP Request นั้นเป็นการส่งข้อคำขอเพื่อร้องขอข้อมูลกับทางผู้ให้บริการ เช่น การเข้าเว็ปไซต์ต่างๆจะเป็นการส่งคำขอเพื่อรับหน้าเว็ปมาแสดงผล โดย HTTP Request จะต้องระบุ method ที่ใช้งานโดยจากข้อที่แล้ว methed ที่ api กำหนดก็คือ GET

3.Parameter ที่ต้องใช้

        parameter เป็นข้อมูลที่ผู้ให้บริการต้องการใช้ เพื่อการใช้งาน api ตามปกติแล้วจะเป็นการเจาะจงข้อมูลที่ต้องการ เช่น เป็นข้อมูลของวันที่เท่าไหร่ หรือเป็นการใส่ api-key ที่เป็นการกำหนดว่าคนร้องขอเป็นใคร โดยส่วนมากจะต้องสมัครสมาชิกเพื่อรับ api-key ซึ่งจะไม่ซ้ำกับคนอื่น

4.Respond ที่ตอบกลับมา

       เมื่อกดส่งก็จะได้ข้อมูลลักษณะที่เป็นข้อมูลประเภทJSON (รูปแบบข้อมูล String ที่ใช้กันในการส่งข้อมูล) ซึ่งข้อมูลนี้คือผลลัพธ์ที่ทางผู้ให้บริการตอบกลับมาจากข้อมูลทั้งหมดที่ได้ร้องขอ หลังจากนี้คือหน้าที่ของผู้ร้องขอ ว่าจะเอาข้อมูลส่วนไหนไปทำอะไร

5.ข้อกำหนดและข้อตกลง

      เนื่องจาก API เป็นการร้องขอข้อมูลของคนอื่นมาใช้งาน ดังนั้นจึงต้องที่จะทำความเข้าใจในข้อตกลงและปฏิบัติตามอย่างเคร่งครัดด้วย เช่นบางที่อาจให้ใส่ credit หรือห้ามใช้ในเชิงพาณิชย์ เป็นต้น



CR: https://www.borntodev.com/c/webdeveloper/%E0%B8%88%E0%B8%B0%E0%B9%83%E0%B8%8A%E0%B9%89-api-%E0%B8%8A%E0%B8%B2%E0%B8%A7%E0%B8%9A%E0%B9%89%E0%B8%B2%E0%B8%99%E0%B8%95%E0%B9%89%E0%B8%AD%E0%B8%87%E0%B8%94%E0%B8%B9%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3%E0%B8%9A%E0%B9%89%E0%B8%B2%E0%B8%87-5fa4fe4b04367

วันอาทิตย์ที่ 25 กุมภาพันธ์ พ.ศ. 2567

พื้นฐาน Vue.js Study Link Resources

 

BASCI VUE3

https://www.mindphp.com/developer/20-javascript/9721-getting-started-with-vue-js.html


REST API

https://www.youtube.com/watch?v=JmwgD3UOsHA


CODE SNIPPED

https://fontawesomeicons.com/fa/vue-js-post-form-data-to-api-using-axios


ROUTE

https://shouts.dev/articles/vuejs-3-routing-from-scratch-using-cdn-without-cli


CRUD -PHP & MYSQL [API with Axios]

https://github.com/rudSarkar/php-mysql-vue


Multiple Endpoint [API with Axios]

https://blog.logrocket.com/using-axios-all-make-concurrent-requests

ตย.

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <script src='https://cdn.jsdelivr.net/npm/vue/dist/vue.js'></script>

    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

</head>

<body> 

    <div id="app">

        <p>Date : {{todayDate}}</p>

         <!-- <p>{{ vsan }}</p> -->

         <table border="1">

            <thead><tr><th>No</th><th>Office</th><th>T1</th></tr></thead>

            <tbody>

                <!-- index เป็นตัวนับ เริ่มจาก 0 เวลาไปใช้จึงต้อง +1 -->

                <tr v-for="(row, index) in vsan">  <!-- :key="info.user_id" ต้องใส่เสมอ ป้องกันข้อผิดพลาดกรณีแก้ไขข้อมูล-->

                    <td>{{index+1}}</td>

                    <td>{{row.nick_name }}</td>

                    <td>{{row.t1}}</td>

                </tr>

            </tbody>

        </table>

        <!-- //////////////////////////// -->

        <br>

         <!-- <p>{{ qalert }}</p> -->

         <table border="1">

            <thead><tr><th>No</th><th>Office</th><th>C19</th><th>YLF</th></tr></thead>

            <tbody>

                <!-- index เป็นตัวนับ เริ่มจาก 0 เวลาไปใช้จึงต้อง +1 -->

                <tr v-for="(row, index) in qalert">  <!-- :key="info.user_id" ต้องใส่เสมอ ป้องกันข้อผิดพลาดกรณีแก้ไขข้อมูล-->

                    <td>{{index+1}}</td>

                    <td>{{row.nick_name }}</td>

                    <td>{{row.C19}}</td>

                    <td>{{row.YLF}}</td>

                </tr>

            </tbody>

        </table>

         <!-- //////////////////////////// -->

    </div>

    <script>

          new Vue({

                el: '#app',

                data () {

                    return {

                        vsan:null,

                        qalert:null,

                        todayDate: new Date().toLocaleDateString(),

                    }

                },

                mounted () {             

                    let endpoints = [

                        'http://223.27.246.234/poe12-opendata/vsan_t1.php',

                        'http://223.27.246.234/poe12-opendata/qalert.php'

                        ];                      

                        axios.all(endpoints.map((endpoint) => axios.get(endpoint)))

                        .then(

                            axios.spread(({data: vsan}, {data: qalert}) => {                               

                                this.vsan = vsan

                                this.qalert = qalert                               

                                console.log({ vsan, qalert });

                            })

                        );

                }

        })

    </script>

</body>

</html>

Vue.js & Axios.js Best Practis

 


ครั้งแรกเริ่มทำด้วย vue.js และ Axios.js


<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <script src='https://cdn.jsdelivr.net/npm/vue/dist/vue.js'></script>

    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

</head>

<body>

  <div id="app">

    <p>{{today}}</p> <p>{{formattedDate}}</p>

    <br>

    {{info}}

    <br>

    <!-- {{info.channel_mode}} -->

    <!-- <p>{{info.person_results[0].id}}</p> -->

    <p>บัตร ปชช. {{info.person_results[0].citizen_no}}</p>

    <p>ชื่อ-สกุล {{info.person_results[0].pre_name}} {{info.person_results[0].f_name}}&nbsp;&nbsp;{{info.person_results[0].l_name}}

    <p>วดป.เกิด {{info.person_results[0].birth_date}}</p>

    <p>ที่อยู่ปัจจุบัน {{info.person_results[0].present_address}}</p>

    <!-- <p>{{info.person_results[0].vaccines[0].vacc_disease}}</p> -->

    ประวัติการได้รับวัคซีน 

    <!-- vaccine have more record, so will loop -->

    <table border="1">

    <tr><td>No.</td><td>Vaccine Name</td><td>Date</td><td>Service place</td></tr>

    <tr v-for="(rowvac, index) in info.person_results[0].vaccines">  

      <td>{{index+1}}</td>

      <td>{{rowvac.vacc_disease }}</td>

      <td>{{rowvac.vacc_date }}</td>

      <td>{{rowvac.authorize_workplace_name }}</td>

    </tr>  

    </table>  

  </div>

<!-- ////////////////////////////////////////////////////////////////////////////// -->

<script>

      new Vue({

          el: '#app',

          data () {

              return {

                  today: new Date().toLocaleDateString(),

                  info: null,

                  date: new Date()

              }

          },

          mounted () {

              const targetURL ='http://223.27.246.234/hujat-info/vaccination/api_intervac.php?p=3960400280121'

              axios.get(targetURL)

              .then(response => (this.info = response.data))

              .then(response =>console.log(response))

          },

          computed: {

                formattedDate() {

                  const day = this.date.getDate().toString().padStart(2, "0");

                  const month = (this.date.getMonth() + 1)

                    .toString()

                    .padStart(2, "0");

                  const year = this.date.getFullYear().toString();

                  const th_year = this.date.getFullYear()+543;

                  return `${day}/${month}/${th_year}`;

                }

          }

 })           

</script>   

</body>

</html>


หมายเหตุ

-การดึง API จาก enpoint ที่ติดปัญหาเรื่อง CORS

ให้แก้ด้วยการดึงด้วย PHP (ใช้ CURL) แล้วให้ส่งค่า Response เพื่อให้ Axios ดึงมาอีกที

(เพราะ PHP เป็น Server side Rendering อยู่แล้ว ไม่มีปัญหาเรื่อง CORS)