translation

Teks yang diterjemahkan oleh AI.

statpan

Kisah Pengembangan Proyek LegiNote 3 - Request di Go

  • Bahasa Penulisan: Bahasa Korea
  • Negara Dasar: Semua Negaracountry-flag
  • TI
Gambar Profil

Ringkasan posting oleh durumis AI

  • Selama pengembangan proyek LegiNote, kami melakukan tugas mengambil informasi RUU dari OpenAPI Parlemen.
  • Kami menggunakan bahasa Go untuk mengirimkan HTTP Request guna meminta data, dan kemudian memparse data JSON yang diterima menjadi struktur data.
  • Artikel ini menjelaskan proses penerbitan API key, permintaan data, hingga proses parsing, serta mengeksplorasi potensi pengembangan di masa depan.

Halo, saya StatPan.

Saya sedang menulis tentang pengembangan proyek sampingan LegiNote.

Untuk bagian sebelumnya, silakan lihat tautan berikut.



Worker 1: worker-bill

Nama "bill" terdengar seperti nama teman asing yang akrab, dan inspirasi namanya datang dari arti kata berikut.

Untuk mencari nama variabel dan repositori yang tepat, sebelumnya saya telah mencari berbagai istilah bahasa Inggris yang berkaitan dengan domain parlemen, dan saya menggunakannya kembali.

Kisah Pengembangan Proyek LegiNote 3 - Request di Go

Arti kata bill



Spesifikasi OpenAPI tempat Worker akan mengumpulkan data adalah sebagai berikut:


Parameter Input

Kisah Pengembangan Proyek LegiNote 3 - Request di Go

Parameter Input API Pemeriksaan dan Pengolahan RUU


Parameter Output

Kisah Pengembangan Proyek LegiNote 3 - Request di Go

Parameter Input API Pemeriksaan dan Pengolahan RUU


Data yang disediakan cukup banyak, dan tampaknya dapat memberikan informasi yang cukup detail.


Persiapan Http Request

Pertama-tama, mari kita lihat apa saja yang dibutuhkan untuk permintaan Http Request dengan parameter input di atas.

URL, metode permintaan Http(Meskipun tidak disebutkan di sini, Get ya, Post tidak berfungsi), KEY, Type, pIndex, pSize adalah nilai yang diperlukan.

Untuk nilai KEY, seperti OpenAPI lainnya, Anda perlu mendapatkan kunci autentikasi terpisah.


Karena ini adalah cerita tentang pengembangan, saya ingin menyertakan tautan ke referensi jika ada... Namun, karena masih tergolong minor, sepertinya tidak ada postingan di Google yang menjelaskan cara mendapatkan kunci autentikasi... Untuk saat ini, saya akan menjelaskannya dengan gambar saja...


Kisah Pengembangan Proyek LegiNote 3 - Request di Go

Halaman Utama

Tekan tombol My Page di halaman beranda.


Kisah Pengembangan Proyek LegiNote 3 - Request di Go

Halaman Profil Saya


Kisah Pengembangan Proyek LegiNote 3 - Request di Go

Layar Penerbitan API Key

Pada layar di atas, untuk bagian penggunaan atau konten, dalam kasus saya, saya menulis dengan singkat bahwa itu untuk tujuan kompetisi data publik. Anda tidak perlu terlalu khawatir tentang bagian pengisian konten, saya rasa Anda akan langsung mendapatkan persetujuan selama tidak ada alasan yang tidak pantas (?).

Kunci yang Anda dapatkan akan mengeluarkan KEY yang dibutuhkan dalam penjelasan HTTP di atas.


Kisah Pengembangan Proyek LegiNote 3 - Request di Go


Mari kita coba mengirimkan permintaan ke URL di atas (Semoga di pembaruan berikutnya, metode juga disertakan).


```go

package main

import (
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"net/url"
)
func procErr(e error, msg string) {
if e != nil {
log.Fatal(e, msg)
}
}

func main() {
rawUrl := "https://open.assembly.go.kr/portal/openapi/TVBPMBILL11"
parsedUrl, err := url.Parse(rawUrl)
procErr(err, "err after parsedUrl")
params := url.Values{}
KEY := "your_key" //change this

procErr(err, "err after req, 27")
req.Header.Add("Content-Type", "application/json")
req.Header.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36")
params.Add("KEY", KEY)
params.Add("Type", "json") // JSON 좋.아
params.Add("pIndex", "1") // Ini mengapa ditampilkan sebagai integer, tetapi string
params.Add("pSize", "1")
client := &http.Client{}

reqURL := fmt.Sprintf("%s?%s", rawUrl, params.Encode())

req, err := http.NewRequest(http.MethodGet, reqURL, nil)

res, err := client.Do(req)
procErr(err, "err, after client do")
defer res.Body.Close()
var jsonMap any
response, err := io.ReadAll(res.Body)
procErr(err, "err after read response")
err = json.Unmarshal(response, &jsonMap)
procErr(err, "err after json unmarshal")
fmt.Println(jsonMap)
go

```


Dengan kode seperti di atas, saya dapat memverifikasi operasinya.

Sebagai tips, Anda harus menambahkan Header. Jika Anda ingin menggunakan API ini dengan lancar (ancaman).

Setelah itu, isi param yang diperlukan di Get url.

Untuk nilai pIndex dan pSize, meskipun tertulis integer, Anda tetap dapat menggunakan tipe string. (Tidak mengerti)

Tipe juga dapat menggunakan metode xml, tetapi saya memilih Json.



Nilai Hasil

map[TVBPMBILL11:[map[head:[map[list_total_count:103305] map[RESULT:map[CODE:INFO-000 MESSAGE:Pemrosesan berhasil.]]]] map[row:[map[AGE:22 BILL_ID:PRC_T2U4C0A8B2Z0A1Y3Y5G2H0F0G5E4F4 BILL_NAME:Rancangan Undang-Undang tentang Perubahan Sebagian Undang-Undang tentang Dana Politik 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:Anggota DPR RI, dkk. PROPOSER_KIND:Anggota DPR PROPOSE_DT:2024-08-23 RST_MONA_CD:HS39431V RST_PROPOSER:Anggota DPR RI, dkk.] map[AGE:22 BILL_ID:PRC_O2M4M0L8L2T0R1S3Q5R1P4Q0Y2W2X6 BILL_NAME:Rancangan Undang-Undang tentang Perubahan Sebagian Undang-Undang tentang Partai Politik 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?...


Anda dapat memperoleh nilai hasil seperti di atas.


Secara terpisah, untuk mengontrol objek tersebut secara langsung, saya mendefinisikan semua struct dan mengambil nilainya, dan itu juga melewati banyak proses debugging.


Mengenai Unmarshal nilai tersebut ke dalam struct, karena batasan jumlah karakter, saya rasa saya harus melanjutkannya di bagian selanjutnya.

Satu Request telah menghabiskan satu bagian dari cerita pengembangan ini. Tentu saja, mengingat karakteristik penggunaan OpenAPI ini, saya menghabiskan banyak waktu untuk menggunakan API dan mengatur struktur struct, tetapi saya perlu mencari cara agar orang lain tidak mengalami kesulitan yang sama.


Bagi Anda yang mengalami masalah dengan permintaan di atas atau tidak puas dengan kode saya yang aneh, silakan siapkan rokoknya juga.



statpan
statpan
Python, Typescript, Go, Rust 언어에 관심을 가지고 사용하고 있습니다. 주 업무 분야는 자연어 처리, 데이터 사이언스 영역 입니다.
statpan
Kisah Pengembangan Proyek LegiNote 2 - Stack Teknologi dan WorkerBagian kedua dari kisah pengembangan proyek LegiNote, membahas tentang pengembangan worker menggunakan bahasa Go. Artikel ini mencakup implementasi logika pengumpulan dan pembaruan data, serta cara proyek disusun.

August 20, 2024

Kisah Pengembangan Proyek LegiNote 1 - IdeStatPan memulai proyek LegiNote dengan tujuan meningkatkan aksesibilitas terhadap rancangan undang-undang dan notulen rapat DPR serta meningkatkan efisiensi pembentukan undang-undang dengan memanfaatkan AI.

August 17, 2024

Menerima Hadiah Penulis Top 2022 dari DEV.TOSeorang penulis DEV.to menerima hadiah Penulis Top 2022 berupa stiker setelah awalnya mengira itu adalah hadiah uang sebesar $256.
Jeongho Nam
Jeongho Nam
Jeongho Nam
Jeongho Nam

July 18, 2024

Referensi Pengembangan API Korea Investment & SecuritiesReferensi Pengembangan API Korea Investment & Securities ini memberi Anda informasi dan tips yang dibutuhkan untuk pengembangan API. Mulailah pengembangan Anda dengan merujuk ke situs web resmi, situs web Pengembang KIS, dan repositori github.
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마

April 22, 2024

Welro, Layanan Kebijakan untuk Semua, Mendapatkan Pendanaan Seri AWelro, layanan kebijakan berbasis kecerdasan buatan, mendapatkan pendanaan Seri A dan bersiap untuk ekspansi global. Welro, yang menyediakan informasi kebijakan yang disesuaikan untuk individu dan perusahaan, berencana untuk menargetkan pasar global denga
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)

September 13, 2024

🚀[Starplug] Proyek DEPIN Smart Plug Fisik (Bitcoin/Ethereum/NFT/Airdrop)Starplug adalah proyek DEPIN smart plug IoT yang memungkinkan Anda menambang koin $STAR dengan menyediakan data penggunaan daya. Dapat dibeli seharga $99 dan berbasis jaringan Solana.
팀 세력, SEPOWER
팀 세력, SEPOWER
팀 세력, SEPOWER
팀 세력, SEPOWER

June 7, 2024

Catatan Kesalahan dalam Pengembangan API Korea Investment & SecuritiesArtikel ini mencatat kesalahan dan proses penyelesaian yang dialami selama pengembangan program trading otomatis menggunakan API Korea Investment & Securities. Artikel ini secara jujur membagikan kesulitan dalam penggunaan Websocket, pengaturan metodologi
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마

April 23, 2024

Apa Itu RFP (Request for Proposal)?RFP adalah surat permintaan proposal untuk proyek tertentu, yang digunakan oleh perusahaan atau lembaga untuk menentukan vendor terbaik dengan menetapkan tujuan proyek, persyaratan, dan kriteria evaluasi kepada vendor eksternal.
꿈많은청년들
꿈많은청년들
꿈많은청년들
꿈많은청년들

May 16, 2024