---
title: "วิธีใช้ Power Query ดึงข้อมูลจาก Web API : ตอนที่ 2"
url: https://www.thepexcel.com/power-query-web-api-2/
type: post
date: 2021-05-25
updated: 2025-12-22
author: Sira Ekabut
categories: [Power Query]
tags: [power query, web scraping, api, Json.Document, Json.FromValue, Web.Contents]
---

# วิธีใช้ Power Query ดึงข้อมูลจาก Web API : ตอนที่ 2

ใน[ตอนที่แล้ว เราได้เรียนรู้การใช้ API แบบ GET Request](https://www.thepexcel.com/power-query-web-api-1/) ไปแล้ว ซึ่งจะเห็นว่าแค่ใส่ URL ให้ถูกต้องพร้อมกับ Query String ที่ต้องการ แค่นั้นก็จบได้ แต่สำหรับการใช้ API แบบ POST จะมีความยุ่งยากกว่าพอสมควร เพราะเราต้องส่งข้อมูลในส่วนของ Body กลับไปให้ Server ด้วย และในบทความนี้ก็จะสอนว่าต้องทำอย่างไร

 

เว็บที่ผมจะนำมาทดสอบกับตัวอย่างนี้คืออันนี้ [https://jsonplaceholder.typicode.com/](https://jsonplaceholder.typicode.com/) ซึ่งเป็นเว็บที่เปิดให้ทดสอบการใช้ API ได้ฟรีๆ จะได้ไม่ต้องมีปัญหาเรื่อง Limit การใช้งานอีก (อย่างไรก็ตาม การใช้ POST API กับเว็บนี้ไม่ได้มีการสร้าง Content ใน Server จริงๆ เค้าแค่จะให้ Response หลอกๆ มาว่ามัน Post สำเร็จเฉยๆ)

 

หลักการคือ เราจะส่ง API ไปที่ URL นี้ https://jsonplaceholder.typicode.com/posts   
โดยจะส่งแบบ POST และจะใส่ Content ไป 3 อย่าง เช่น

 
- **title**: ThepExcel 1
- **body**: ทดสอบ Post API
- **userid**: 1

 

โดยที่เราจะต้องระบุ Content-type ว่าเป็น application/json โดยมี charset เป็น UTF-8 นะครับ

 

## ทดสอบการ POST API แบบเดี่ยวๆ ก่อน

 

ให้เราสั่ง Get Data From Web แล้วใส่ URL นี้เข้าไป https://jsonplaceholder.typicode.com/posts แล้วระบุพวก Content type ลงไป

 ![1](https://www.thepexcel.com/wp-content/uploads/2021/05/post-api-002.png) 

ถ้ากด Connect แล้วเข้าไปดูใน Advance Editor จะเห็นแบบนี้

 

```
let
     Source = Json.Document(Web.Contents("https://jsonplaceholder.typicode.com/posts", 
     [Headers=[#"Content-Type"="application/json; charset=UTF-8"]]))
 in
     Source
```

 

ทีนี้ปกติการสั่ง Get Data form Web จะเป็นแบบ GET โดย Default ซึ่งคราวนี้เราจะต้องระบุ Content เข้าไป มันจะได้รู้ว่าเป็นการ POST ไม่ใช่ GET ซึ่งจะต้องมีการแก้ M Code ใน Advanced Editor นี้นิดหน่อยครับ

 

```
let
     Source = Json.Document(Web.Contents("https://jsonplaceholder.typicode.com/posts", 
     [Headers=[#"Content-Type"="application/json; charset=UTF-8"],
      
      Content=ใส่Contentลงไปตรงนี้
     
     ]))
 in
     Source
```

 

แต่วิธีใส่ Content ให้ง่าย เราจะใส่เป็น Record ก่อนนะครับ ผมก็จะเอาไว้ในตัวแปรว่า MyRecord

 

```
MyRecord=[title="ThepExcel 1",body="ทดสอบ Post API",userid=1]
```

 

จากนั้นให้แปลง Record เป็น JSON ด้วย**ฟังก์ชัน Json.FromValue** แล้วเอาค่าที่ได้ระบุไว้หลัง Content=

 

```markdown
let
     MyRecord=[title="ThepExcel 1",body="ทดสอบ Post API",userid=1],
     Source = Json.Document(Web.Contents("https://jsonplaceholder.typicode.com/posts", 
     [Headers=[#"Content-Type"="application/json; charset=UTF-8"],
     Content=Json.FromValue(MyRecord)
     ]))
 in
     Source
```

 

พอกด ok ก็จะพบว่า จะได้ id ของ post (หลอกๆ) กลับมาจาก server แสดงว่ามันสามารถ Run ได้แล้วล่ะ

 ![2](https://www.thepexcel.com/wp-content/uploads/2021/05/post-api-003-1024x282.png) 

## สร้างฟังก์ชันที่จะ Post API

 

ทีนี้เพื่อให้สามารถ Post ได้หลายๆ ครั้ง เราจะเปลี่ยน MyRecord ให้เป็น Input ของฟังก์ชันซะ โดยทำเป็นแบบนี้แทน (บทความนี้ผมเขียนฟังก์ชันเองโดยไม่กด Create Function… แบบตอนที่แล้วนะ แต่ก็ทำได้เช่นกัน)

 

```markdown
(MyRecord)=>
 let
     //MyRecord=[title="ThepExcel 1",body="ทดสอบ Post API",userid=1],
     Source = Json.Document(Web.Contents("https://jsonplaceholder.typicode.com/posts", 
     [Headers=[#"Content-Type"="application/json; charset=UTF-8"],
     Content=Json.FromValue(MyRecord)
     ]))
 in
     Source
```

 

เราก็จะได้ Query ที่กลายเป็นฟังก์ชันที่รับ input เป็น Record แล้ว จากนั้นแก้ชื่อ Query เป็น PostAPIfx ซะ

 ![3](https://www.thepexcel.com/wp-content/uploads/2021/05/post-api-004-1024x243.png) 

## เตรียม POST ข้อมูลหลายๆ Record

 

เตรียมข้อมูลที่จะส่งไป POST จาก Excel แล้วเอาเข้า Power Query ซะ (ผมตั้งชื่อตารางว่า MyContent)

 ![4](https://www.thepexcel.com/wp-content/uploads/2021/05/post-api-001-1024x339.png) 

เนื่องจาก Function PostAPIfx ของเรานั้นรับค่าเป็น Record ดังนั้นเราจะเตรียมข้อมูลแต่ละบรรทัดให้เป็น Record ซะก่อน ซึ่งทำได้โดยการ Add Custom Column โดยใส่สูตรว่า =_ ดังนี้

 ![5](https://www.thepexcel.com/wp-content/uploads/2021/05/post-api-005-1024x474.png) 

ผลลัพธ์จะได้เป็น Record แบบนี้

 ![6](https://www.thepexcel.com/wp-content/uploads/2021/05/post-api-006-1024x358.png) 

คราวนี้เราก็ Invoke Custom Function ได้เลย

 ![7](https://www.thepexcel.com/wp-content/uploads/2021/05/post-api-007-1024x610.png) 

พอกด ok ก็จะได้ผลลัพธ์ของ API กลับมา

 ![8](https://www.thepexcel.com/wp-content/uploads/2021/05/post-api-008-1024x339.png) 

เราก็สามารถ Expand API Result ออกมาได้เลย จบแล้ว

 ![9](https://www.thepexcel.com/wp-content/uploads/2021/05/post-api-009-1024x273.png) 

## ตัวอย่างเพิ่มเติม

 

[วิธีใช้ Power Query ดึงข้อมูล EMS Tracking จากไปรษณีย์ไทย ผ่าน Web API](https://www.thepexcel.com/power-query-ems-tracking-api/)

  

> [วิธีใช้ Power Query ดึงข้อมูล EMS Tracking จากไปรษณีย์ไทย ผ่าน Web API](https://www.thepexcel.com/power-query-ems-tracking-api/)

  

## ตอนต่อไป

 

ในตอนต่อไป เราจะมาเรียนรู้[วิธีใช้ Google Chrome เพื่อค้นหา API ในเว็บ](https://www.thepexcel.com/power-query-web-api-3/) กรณีที่เค้าไม่ได้บอกออกมาแบบชัดๆ เพื่อให้สามารถดึงข้อมูลจากเว็บได้ดีขึ้นครับ ใครสนใจก็รอติดตามได้เลย

---

_Source: [https://www.thepexcel.com/power-query-web-api-2/](https://www.thepexcel.com/power-query-web-api-2/)_
