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 ปัจจุบันออกมาซะ

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

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

ผมเองก็ดูข้อมูลตามที่บอกในคู่มือ ในส่วนของ 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
วิธีใช้ Power Query ดึงข้อมูล EMS Tracking จากไปรษณีย์ไทย ผ่าน Web API 2

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

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

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

พอเราได้ 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 ตามต้องการ เช่น

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

จากนั้นเราก็แค่เอา 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 ได้ง่ายเลย!!

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

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

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

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

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