statpan

เรื่องราวการพัฒนาโครงการ LegiNote ตอนที่ 3 - Request ใน Go

สร้าง: 2024-08-26

สร้าง: 2024-08-26 12:41

สวัสดีครับ ผม StatPan

กำลังเขียนเกี่ยวกับการพัฒนา LegiNote ซึ่งเป็นโปรเจกต์ข้างเคียง

สำหรับตอนก่อนหน้า โปรดดูลิงก์ด้านล่างนี้



Worker ตัวที่ 1 worker-bill

ชื่อ bill ดูเหมือนชื่อเพื่อนชาวต่างชาติที่คุ้นเคยใช่มั้ยครับ ผมได้รับแรงบันดาลใจจากความหมายของคำนี้

ก่อนหน้านี้ ผมเคยค้นหาคำศัพท์ภาษาอังกฤษที่เกี่ยวข้องกับโดเมนของสภาเพื่อหาชื่อตัวแปรและชื่อที่เก็บที่ดี ซึ่งผมนำสิ่งที่ค้นพบมาประยุกต์ใช้

เรื่องราวการพัฒนาโครงการ LegiNote ตอนที่ 3 - Request ใน Go

ความหมายของคำว่า bill



สเปก OpenAPI ของแหล่งข้อมูลที่ Worker จะรวบรวมมีดังนี้


พารามิเตอร์อินพุต

เรื่องราวการพัฒนาโครงการ LegiNote ตอนที่ 3 - Request ใน Go

พารามิเตอร์อินพุตของ API การพิจารณาและดำเนินการร่างกฎหมาย


พารามิเตอร์เอาต์พุต

เรื่องราวการพัฒนาโครงการ LegiNote ตอนที่ 3 - Request ใน Go

พารามิเตอร์อินพุตของ API การพิจารณาและดำเนินการร่างกฎหมาย


ดูเหมือนว่าจะให้ข้อมูลค่อนข้างเยอะและสามารถให้บริการข้อมูลรายละเอียดได้มากทีเดียว


สิ่งที่ต้องเตรียมสำหรับ Http Request

ก่อนอื่น มาดูกันว่าเราต้องเตรียมอะไรบ้างสำหรับการส่งคำขอ Http Request ตามพารามิเตอร์อินพุตข้างต้น

URL, วิธีการส่งคำขอ Http request(แม้ว่าจะไม่ได้ระบุไว้ในที่นี้ แต่เป็น Get นะครับ Post ใช้ไม่ได้ㅠ), KEY, Type, pIndex, pSize ครับ

สำหรับ KEY นั้น คล้ายกับ OpenAPI อื่นๆ ที่คุณต้องขอรับ API Key แยกต่างหาก


เนื่องจากนี่คือเรื่องราวการพัฒนา ดังนั้นผมจึงต้องการแนบลิงก์อ้างอิงไว้ด้วย แต่เนื่องจากยังไม่ค่อยมีคนรู้จักเท่าไหร่ จึงไม่มีบทความเกี่ยวกับวิธีขอรับ API Key ใน Google เลย... เอาเป็นว่าตอนนี้ผมจะอธิบายคร่าวๆ พร้อมรูปภาพนะครับ...


เรื่องราวการพัฒนาโครงการ LegiNote ตอนที่ 3 - Request ใน Go

หน้าแรก

คลิกที่ปุ่ม My Page บนหน้าแรก


เรื่องราวการพัฒนาโครงการ LegiNote ตอนที่ 3 - Request ใน Go

หน้า My Page


เรื่องราวการพัฒนาโครงการ LegiNote ตอนที่ 3 - Request ใน Go

หน้าจอการขอรับ API Key

ในส่วนของวัตถุประสงค์การใช้งานหรือเนื้อหา ในกรณีของผม ผมเขียนสั้นๆ ว่าเพื่อการแข่งขันข้อมูลสาธารณะครับ คุณไม่ต้องกังวลกับการกรอกข้อมูลส่วนนี้มากนัก ถ้าไม่ใช่เหตุผลที่ไม่ดี(หรือไม่เหมาะสม) สัก 1-2 บรรทัด ก็ได้รับอนุมัติแล้วล่ะครับ

API Key ที่ได้รับจะใช้เป็น KEY ในคำอธิบาย HTTP ด้านบน


เรื่องราวการพัฒนาโครงการ LegiNote ตอนที่ 3 - Request ใน Go


ลองส่งคำขอไปที่ URL นี้ดูครับ (หวังว่าในการอัปเดตครั้งถัดไป จะมีการระบุเมธอดด้วย)


go

```


ผมสามารถทดสอบการทำงานเบื้องต้นได้ด้วยโค้ดข้างต้น

ขอแนะนำเคล็ดลับเล็กน้อย คุณต้องเพิ่ม Header ด้วยนะครับ ถ้าคุณอยากใช้ API นี้ได้อย่างราบรื่น (ขู่เบาๆ)

จากนั้น กรอกพารามิเตอร์ที่จำเป็นลงใน URL ของ Get

ค่าของ pIndex และ pSize ระบุว่าให้ใช้ integer แต่จริงๆ แล้วคุณใช้ string ก็ได้นะครับ (งงมาก)

สามารถใช้รูปแบบ xml ได้ด้วย แต่ผมเลือกใช้ Json



ผลลัพธ์

map[TVBPMBILL11:[map[head:[map[list_total_count:103305] map[RESULT:map[CODE:INFO-000 MESSAGE:정상 처리되었습니다.]]]] map[row:[map[AGE:22 BILL_ID:PRC_T2U4C0A8B2Z0A1Y3Y5G2H0F0G5E4F4 BILL_NAME:정치자금법 일부개정법률안 BILL_NO:2203179 CMT_PRESENT_DT: CMT_PROC_DT: CMT_PROC_RESULT_CD: COMMITTEE_DT: COMMITTEE_PROC_DT: CURR_COMMITTEE: CURR_COMMITTEE_ID: LAW_PRESENT_DT: LAW_PROC_DT: LAW_PROC_RESULT_CD: LAW_SUBMIT_DT: LINK_URL:https://likms.assembly.go.kr/bill/billDetail.do?billId=PRC_T2U4C0A8B2Z0A1Y3Y5G2H0F0G5E4F4 PROC_DT: PROC_RESULT_CD: PROPOSER:고동진의원 등 10인 PROPOSER_KIND:의원 PROPOSE_DT:2024-08-23 RST_MONA_CD:HS39431V RST_PROPOSER:고동진] map[AGE:22 BILL_ID:PRC_O2M4M0L8L2T0R1S3Q5R1P4Q0Y2W2X6 BILL_NAME:정당법 일부개정법률안 BILL_NO:2203178 CMT_PRESENT_DT: CMT_PROC_DT: CMT_PROC_RESULT_CD: COMMITTEE_DT: COMMITTEE_PROC_DT: CURR_COMMITTEE: CURR_COMMITTEE_ID: LAW_PRESENT_DT: LAW_PROC_DT: LAW_PROC_RESULT_CD: LAW_SUBMIT_DT: LINK_URL:https://likms.assembly.go.kr/bill/billDetail.do?...


จะได้ผลลัพธ์ตามที่แสดงด้านบน


ผมนิยามโครงสร้าง struct ทั้งหมดเพื่อควบคุมวัตถุนั้นๆ โดยตรง ซึ่งใช้เวลาในการดีบักค่อนข้างเยอะเหมือนกัน


เนื่องจากข้อจำกัดจำนวนอักขระ คงต้องมาอธิบายเรื่องการ Unmarshal ค่าเหล่านี้เป็น struct ในตอนถัดไป

แค่ Request เดียวก็กินเนื้อที่ไปเยอะแล้วในบทความนี้ แน่นอนว่าการใช้ OpenAPI นี้ต้องใช้เวลาในการเรียนรู้การใช้งานและโครงสร้าง struct ค่อนข้างมาก แต่ก็ต้องหาทางให้คนอื่นๆ ไม่ต้องเจอกับความทุกข์ทรมานแบบเดียวกัน


สำหรับใครที่พบว่าคำขอข้างต้นไม่ทำงานตามที่ควรจะเป็นหรือไม่พอใจกับโค้ดแปลกๆ ของผม ก็ขอให้ช่วยเตรียมบุหรี่มาด้วยนะครับ



ความคิดเห็น0

คู่มือการพัฒนา API ของบริษัทหลักทรัพย์ Korea Investment & Securitiesคู่มือการพัฒนา API ของบริษัทหลักทรัพย์ Korea Investment & Securities ช่วยให้คุณเข้าถึงข้อมูลและเคล็ดลับที่จำเป็นสำหรับการพัฒนา API ดูข้อมูลเพิ่มเติมได้จากเว็บไซต์อย่างเป็นทางการ เว็บไซต์ KIS Developer และ GitHub Repository เพื่อเริ่มต้นการพัฒนาของคุณ
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마

April 22, 2024

2024-11-18 สิ่งที่สนใจอย่างหลากหลายในชีวิต : ฉันใช้เวลาว่างทำอะไรบ้าง?บทความบล็อกที่เขียนเมื่อวันที่ 18 พฤศจิกายน 2024 บทความนี้กล่าวถึงงานอดิเรก การลงทุน การเรียนรู้ และกิจวัตรประจำวันต่างๆ ของผู้เขียน รวมถึงความกังวลเกี่ยวกับการเพิ่มประสิทธิภาพการทำงานผ่านระบบอัตโนมัติ
Charles Lee
Charles Lee
Charles Lee
Charles Lee

November 19, 2024

JWT (JSON Web Token) คืออะไร?JWT เป็นมาตรฐานแบบเปิดที่ใช้ JSON object ในการส่งข้อมูลอย่างปลอดภัย ประกอบด้วยส่วนหัว ส่วน payload และลายเซ็น โดยลายเซ็นจะช่วยรับประกันความสมบูรณ์ของข้อมูลและความปลอดภัย ไม่จำเป็นต้องใช้การรักษาสถานะเซสชันฝั่งเซิร์ฟเวอร์ ทำให้มีความสามารถในการปรับขนาดสูง
Seize the day
Seize the day
Seize the day
Seize the day

March 4, 2024

[ออบเจกต์] บทที่ 2 การเขียนโปรแกรมเชิงวัตถุแนวคิดการเขียนโปรแกรมเชิงวัตถุและการสร้างระบบจองตั๋วหนังเพื่ออธิบายเกี่ยวกับ ออบเจกต์ คลาส การทำงานร่วมกัน การสืบทอด และพหุรูปแบบ
제이온
제이온
제이온
제이온

April 28, 2024