httr2: 3 ขั้นตอนในการทำงานกับข้อมูลบนเว็บด้วยภาษา R — ตัวอย่างการทำงานกับ Fake Store API

httr2 (อ่านว่า “hitter 2”) เป็น API (application programming interface) package ในภาษา R เพื่อทำงานกับข้อมูลที่อยู่บนอินเทอร์เน็ต อย่างข้อมูลบนหน้าเว็บไซต์ต่าง ๆ เป็นต้น

ในบทความนี้ เราจะมาลองดูวิธีใช้ httr2 ผ่านการทำงานกับ Fake Store API ซึ่งมีข้อมูลจำลองของร้านค้าออนไลน์กัน

ถ้าพร้อมแล้ว ไปเริ่มกันเลย


  1. 🏪 Install & Load httr2
  2. 💻 Working With API in 3 Steps
  3. ✍️ Step 1. Build Request
  4. 📨 Step 2. Send Request
  5. 🧑‍💻 Step 3. Interact With Response
    1. 📋 Check Content Type
    2. 📥 Get Body
    3. 👀 View Data
  6. 📬 POST, PATCH, DELETE
  7. 😺 GitHub
  8. 📃 References
  9. ✅ R Book for Psychologists: หนังสือภาษา R สำหรับนักจิตวิทยา

🏪 Install & Load httr2

ในการใช้งาน httr2 เราจะต้องไม่ลืมติดตั้งและโหลด package ก่อนแบบนี้:

# Install httr2
install.packages("httr2")

# Library httr2
library(httr2)

💻 Working With API in 3 Steps

การใช้งาน httr2 มีอยู่ 3 ขั้นตอน ได้แก่:

  1. Build request: สร้าง request ที่จะส่ง
  2. Send request: ส่ง request ไปยังปลายทาง
  3. Interact with response: ทำงานกับข้อมูลที่ได้รับ

เราลองไปดูทั้ง 3 ขั้นตอนจากตัวอย่างการดึงข้อมูล products (GET) จาก Fake Store API กัน


✍️ Step 1. Build Request

ในขั้นแรก เราจะสร้าง request ที่เราจะส่งให้กับ Fake Store API:

  1. กำหนด base URL ของ Fake Store API
  2. สร้าง request ด้วย request()
  3. เพิ่ม endpoint ใน URL ด้วย req_url_path_append()
# Define base URL
base_url <- "<https://fakestoreapi.com>"

# Build a request
get_req <- request(base_url) |>
  
  # Add endpoint
  req_url_path_append("products")

ในขั้นนี้ request จะยังไม่ถูกส่งออกไป และเราสามารถทดสอบ request ได้ด้วย req_dry_run():

# Dry run the request
get_req |> req_dry_run()

ผลลัพธ์:

GET /products HTTP/1.1
accept: */*
accept-encoding: deflate, gzip
host: fakestoreapi.com
user-agent: httr2/1.1.2 r-curl/6.4.0 libcurl/8.14.1

📨 Step 2. Send Request

เมื่อเราพอใจกับผลทดสอบ เราสามารถส่ง request ออกไปได้ด้วย req_perform():

# Perform the request
get_resp <- get_req |> req_perform()

เราสามารถเช็กสถานะของ response ได้ด้วย resp_status():

# View response status
get_resp |> resp_status()

ผลลัพธ์:

200

ซึ่งแสดงให้เห็นว่า request ของเราส่ง response กลับมาได้สำเร็จ


🧑‍💻 Step 3. Interact With Response

ในขั้นสุดท้าย เราจะสำรวจ response ที่ได้กลับมากัน:

  1. Check content type: เช็กประเภทข้อมูล
  2. Get body: ดึงข้อมูลจาก response
  3. View data: ดูตัวอย่างข้อมูล

.

📋 Check Content Type

เราสามารถเช็กประเภทข้อมูลใน response ได้ด้วย resp_content_type():

# Check the response content type
get_resp |> resp_content_type()

ผลลัพธ์:

"application/json"

ซึ่งแสดงให้เห็นว่า สิ่งที่ได้รับกลับมาอยู่ในรูปแบบ JSON

.

📥 Get Body

จากนั้น เราสามารถดึงข้อมูลจาก response ได้ด้วย resp_body_*() เช่น:

  • resp_body_html(): ดึงข้อมูลที่เป็น HTML
  • resp_body_xml(): ดึงข้อมูลที่เป็น XML
  • resp_body_json(): ดึงข้อมูลที่เป็น JSON

อย่างในตัวอย่าง เราจะดึงข้อมูลด้วย resp_body_json() เพราะข้อมูลของเราเป็น JSON:

# Extract the content
products <- get_resp |> resp_body_json()

.

👀 View Data

สุดท้าย เราสามารถดูตัวอย่างข้อมูลได้ด้วย head():

# View the first entry
head(products, n = 1)

ผลลัพธ์:

[[1]]
[[1]]$id
[1] 1

[[1]]$title
[1] "Fjallraven - Foldsack No. 1 Backpack, Fits 15 Laptops"

[[1]]$price
[1] 109.95

[[1]]$description
[1] "Your perfect pack for everyday use and walks in the forest. Stash your laptop (up to 15 inches) in the padded sleeve, your everyday"

[[1]]$category
[1] "men's clothing"

[[1]]$image
[1] "<https://fakestoreapi.com/img/81fPKd-2AYL._AC_SL1500_.jpg>"

[[1]]$rating
[[1]]$rating$rate
[1] 3.9

[[1]]$rating$count
[1] 120

📬 POST, PATCH, DELETE

จากตัวอย่าง เราจะเห็นได้ว่า functions ของ httr2 แบ่งเป็น 2 กลุ่ม ได้แก่:

  1. req_*() ซึ่งใช้กับ request
  2. resp_*() ซึ่งใช้กับ response

นอกจาก functions ที่เราได้เห็นก่อนหน้านี้ httr2 ยังมี functions อื่นที่ให้เรียกใช้งานได้ เช่น:

  • req_method(): เปลี่ยน method ของ request
  • req_body_json(): เปลี่ยน body ของ request

ยกตัวอย่างเช่น เราต้องการเปลี่ยน method เป็น POST เพื่อสร้าง product ใหม่บนหน้าเว็บ เราสามารถใช้ req_method() และ req_body_json() ได้แบบนี้:

# Build a request
post_req <- request(base_url) |>
  
  # Add endpoint
  req_url_path_append("products") |>
  
  # Change method to POST
  req_method("POST") |>
  
  # Add body
  req_body_json(list(
    title = "Summer Sunglasses",
    price = 29.99,
    description = "One pair for all summers.",
    image = "<https://unsplash.com/photos/sunglasses-beside-a-purse-LJqRUWr9V0w>",
    category = "Accessory"
    ))

หรือ PATCH เพื่ออัปเดตข้อมูล product:

# Build a request
patch_req <- request(base_url) |>
  
  # Add endpoint
  req_url_path_append("products/1001") |>
  
  # Change method to PATCH
  req_method("PATCH") |>
  
  # Add body
  req_body_json(list(
    price = 59.99,
    description = "Limited edition: One pair for all summers."
  ))

หรือ DELETE เพื่อลบ product ออก:

# Build a request
delete_req <- request(base_url) |>
  
  # Add endpoint
  req_url_path_append("products/1001") |>
  
  # Change method to DELETE
  req_method("DELETE")

เป็นต้น

สำหรับคนที่สนใจ สามารถศึกษา functions อื่น ๆ ของ httr2 เพิ่มเติมได้ที่ บทความ official ของ httr2


😺 GitHub

ดูตัวอย่าง code ทั้งหมดได้ที่ GitHub


📃 References


✅ R Book for Psychologists: หนังสือภาษา R สำหรับนักจิตวิทยา

📕 ขอฝากหนังสือเล่มแรกในชีวิตด้วยนะครับ 😆

🙋 ใครที่กำลังเรียนจิตวิทยาหรือทำงานสายจิตวิทยา และเบื่อที่ต้องใช้ software ราคาแพงอย่าง SPSS และ Excel เพื่อทำข้อมูล

💪 ผมขอแนะนำ R Book for Psychologists หนังสือสอนใช้ภาษา R เพื่อการวิเคราะห์ข้อมูลทางจิตวิทยา ที่เขียนมาเพื่อนักจิตวิทยาที่ไม่เคยมีประสบการณ์เขียน code มาก่อน

ในหนังสือ เราจะปูพื้นฐานภาษา R และพาไปดูวิธีวิเคราะห์สถิติที่ใช้บ่อยกัน เช่น:

  • Correlation
  • t-tests
  • ANOVA
  • Reliability
  • Factor analysis

🚀 เมื่ออ่านและทำตามตัวอย่างใน R Book for Psychologists ทุกคนจะไม่ต้องพึง SPSS และ Excel ในการทำงานอีกต่อไป และสามารถวิเคราะห์ข้อมูลด้วยตัวเองได้ด้วยความมั่นใจ

แล้วทุกคนจะแปลกใจว่า ทำไมภาษา R ง่ายขนาดนี้ 🙂‍↕️

👉 สนใจดูรายละเอียดหนังสือได้ที่ meb:

Comments

Leave a comment