ems-tracking power query

วิธีใช้ Power Query ดึงข้อมูล EMS Tracking จากไปรษณีย์ไทย ผ่าน Web API

ก่อนหน้านี้ผมได้เคยเขียนบทความวิธีใช้ Power Query ดึงข้อมูลจาก Web API ไปแล้ว 3 ตอน ถ้าใครยังไม่เคยเข้าไปอ่านก็สามารถเข้าไปอ่านดูก่อนได้นะครับ (ไม่อ่านก็ยังสามารถทำตามในบทความนี้ได้อยู่)

ซึ่งบทความในวันนี้เนื้อหาจะคล้ายกับตอนที่ 2 ของเดิมมากๆ คือเป็น Web API แบบ Post แต่จะเป็นกรณีตัวอย่างการใช้กับ EMS Tracking ของไปรษณีย์ไทยโดยเฉพาะ ซึ่งหลายๆ คนน่าจะอยากใช้งานอยู่ ซึ่งวิธีทำนี้จะใช้ใน Excel หรือ Power BI ก็ได้นะครับ (พอดีมีลูกค้าที่เรียน Power BI กับผมถามมา เลยเอามาเขียนเป็นบทความเผื่อเพื่อนๆ คนอื่นด้วยเลยดีกว่า)

เพื่อไม่ให้เสียเวลา เรามาเริ่มดูขั้นตอนกันเลยละกัน

สมัครสมาชิกแล้วเอา Token มาก่อน

ขั้นตอนแรกที่จำเป็นเลยคือเข้าไปในเว็บ https://track.thailandpost.co.th/ จากนั้นสมัครสมาชิกแล้วเข้าสู่ระบบให้เรียบร้อย (ขอไม่ลงรายละเอียดวิธีสมัครนะ)

จากนั้นให้เข้าหน้า Dashboard ในส่วนของ <>สำหรับนักพัฒนา แล้วกด Create Token จากนั้น Copy Token ปัจจุบันออกมาซะ

ศึกษาคู่มือซักหน่อย

ผมเองก็ดูข้อมูลตามที่บอกในคู่มือ ในส่วนของ API REST แล้วก็ทำตามได้ดังนี้ (คู่มือมีจุดที่เขียนแล้วสับสนตรง Token ให้ดูตัวอย่างผมแทนได้)

GetToken สำหรับการรับส่งข้อมูล

โดย Token รับส่งข้อมูลนี้เป้นคนละตัวกับ Token จากการสมัครสมาชิกนะ… และจะมีการกำหนดวันหมดอายุ 1 เดือน

ให้เรา Get Data from Web แบบ Advanced แล้วใส่ดังนี้

  • URL Parts : https://trackapi.thailandpost.co.th/post/api/v1/authenticate/token
  • HTTP Request Header
    • Authorization : คำว่า Token ตามด้วยเว้นวรรค 1 ที ตามด้วย Token ในหน้าสมาชิก
    • Content-Type : application/json

จากนั้นกด ok แล้วกด Connect

มันก็จะทำการเข้าสู่ Power Query Editor แล้วได้ผลลัพธ์มาเป็น Token รับส่งข้อมูล ซึ่งจะยาวกว่า Token ในหน้าสมาชิกมากๆ ให้เรา Copy เก็บเอาไว้ใช้ได้ (Token รับส่งข้อมูลหมดอายุใน 1 เดือน)

พอเราได้ Token รับส่งข้อมูลแล้ว คราวนี้เราถึงสามารถทำการค้นหาตามพวกรหัส EMS ได้ซักที

สร้าง Query ดึงข้อมูลจากรหัส Tracking

ให้เราสร้าง Blank Query (Get Data -> From Other Source -> Blank Query) ขึ้นมาแล้วเปลี่ยน Code ใน Advanced Editor ให้เป็นดังนี้

let

    BarCodeList={"EDXXXXXXXX","RLXXXXXXXX","EDXXXXXXXX"}, //List เก็บรหัส Track
    DataToken="xxxxxxx",  //Token รับส่งข้อมูลยาวๆ 
    MyRecord=[status="all",language="TH",barcode=BarCodeList], //Record ที่จะ Post เข้า API

    Source = Json.Document(Web.Contents("https://trackapi.thailandpost.co.th/post/api/v1/track", 
    [
        Headers=
            [
            Authorization="Token "&DataToken,
            #"Content-Type"="application/json"
            ],
        Content=Json.FromValue(MyRecord)                  
    ] 

    ))
in
    Source

จากนั้นเปลี่ยนสิ่งที่ระบุใน BarCodeList และ DataToken ตามต้องการ เช่น

จากนั้นพอ Run Query จะได้ดังนี้ แสดงว่าสำเร็จ

ดูข้อมูลที่ Response กลับมา

จากนั้นเราก็กดเข้าไปใน Record ที่ response กลับมา 1 ที แล้วกด Record ที่ items อีกที แล้วค่อยกด Convert เป็น Table

จากนั้นให้ Expand List ออกมาเป็นหลายๆแถว

จากนั้นค่อย Expand Record ออกมาโดยเลือกเอาเฉพาะคอลัมน์ที่ต้องการได้เลย

แล้วเราก็จะได้ Data ที่ต้องการแบบละเอียดทุกขั้นตอนเลย เย้!

ทำยังไงให้เพิ่ม List รหัสง่ายๆ

ที่นี้ถ้าอยากให้ Dynamic มากขึ้น แทนที่เราจะพิมพ์ List ของรหัส EMS ที่ต้องการ Track เข้าไปเอง เราก็ดึง List นั้นมาจาก Table ของ Excel ได้ เช่น ผมสร้าง Table ชื่อ TrackTable แล้วมีคอลัมน์ TrackNumber เอาไว้ (เอาจริงๆ จะเป็น Data Source อะไรก็ได้อ่ะนะ)

จากนั้น Get Data เข้า Power Query ซะ

จากนั้นคลิ๊กขวาในคอลัมน์ที่ต้องการแล้ว DrillDown เราก็จะได้ List แล้ว

เนี่ยได้ List แล้ว ซึ่ง List นี้ชื่อว่า TrackTable

จากนั้นเราก็แค่เอา TrackTable ไปใส่ใน Code เดิมของเรา ก็จบ ง่ายขึ้นอีกเยอะ!!

let

    BarCodeList=TrackTable, //List เก็บรหัส Track
    DataToken="xxxxxxx",  //Token รับส่งข้อมูลยาวๆ 
    MyRecord=[status="all",language="TH",barcode=BarCodeList], //Record ที่จะ Post เข้า API

    Source = Json.Document(Web.Contents("https://trackapi.thailandpost.co.th/post/api/v1/track", 
    [
        Headers=
            [
            Authorization="Token "&DataToken,
            #"Content-Type"="application/json"
            ],
        Content=Json.FromValue(MyRecord)                  
    ] 

    ))
in
    Source

เนี่ย ทุกอย่างยังทำงานได้เหมือนเดิม แต่เจ๋งกว่าเดิมตรงแก้รหัสที่จะ Track ได้ง่ายเลย!!

และนี่คือผลลัพธ์ที่เราได้ครับ แจ่มมากๆ

ข้อควรระวัง ที่เขียนไว้ในระบบ คือ  สามารถใช้งาน API ได้สูงสุด 1,000 หมายเลขต่อการ Post 1 ครั้ง โดยสามารถใช้งานได้ 15 ครั้ง ต่อ 3 วินาที กรณีมีการใช้งานเกิน 15 ครั้ง ต่อ 3 วินาที ระบบจะทำการปิดกั้นการใช้งานชั่วคราว เป็นระยะเวลา 30 วินาที

ดังนั้นอย่าส่งเยอะและถี่เกินไปนะครับ ^^


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *