translation

AI által fordított szöveg.

statpan

LegiNote projektfejlesztési történet 3. rész - Kérések Go nyelven

  • Írás nyelve: Koreai
  • Referenciaország: Minden országcountry-flag
  • Informatika
Profilkép

A bejegyzés durumis AI által generált összefoglalója

  • A LegiNote projekt fejlesztése során elvégeztük a jogszabálytervezetek adatainak beszerzését a Parlament nyílt API-ja segítségével.
  • Go nyelvet használtunk az adatok HTTP kéréssel történő lekéréséhez, majd a kapott JSON adatok struktúrákká alakításához.
  • Bemutatjuk a folyamatot az API kulcs beszerzésétől az adatlekérésen és -feldolgozáson át, és vázoljuk a jövőbeni fejlesztési irányokat.

Üdvözlet, StatPan vagyok.

A LegiNote mellékprojekt fejlesztési naplóját írom.

Az előző részt a következő linken találja:



1. munkás: worker-bill

A "bill" név valahogy ismerősen hangzik, mintha egy külföldi barát neve lenne, és a következő szó jelentéséből merítettem ihletet.

A megfelelő változónév és adattárnév keresése során korábban már keresgéltem néhány angol szót a parlamenti domainnel kapcsolatban, és most ezt használtam fel.

LegiNote projektfejlesztési történet 3. rész - Kérések Go nyelven

a bill szó jelentése



A munkás által célzott adatokat gyűjtő OpenAPI specifikációja a következő:


Bemeneti paraméterek

LegiNote projektfejlesztési történet 3. rész - Kérések Go nyelven

Jogi aktusok vizsgálata és feldolgozása API bemeneti paraméterek


Kimeneti paraméterek

LegiNote projektfejlesztési történet 3. rész - Kérések Go nyelven

Jogi aktusok vizsgálata és feldolgozása API bemeneti paraméterek


Sok adatot biztosít, és úgy tűnik, elég részletes információkat tud szolgáltatni.


HTTP kérés előkészítése

Először nézzük meg, mire van szükségünk a fenti bemeneti paraméterekkel rendelkező HTTP kérés elküldéséhez:

URL, HTTP kérés metódus(bár itt nem szerepel, Get metódust kell használni, Post nem működik), KEY, Type, pIndex, pSize értékek.

A KEY érték esetében, más OpenAPI-khoz hasonlóan, külön engedélyezési kulcsot kell kérni.


Mivel fejlesztési naplóról van szó, szerettem volna hivatkozást is megadni… de mivel még viszonylag új, nincs róla információ a Google-ben az engedélyezési kulcs kéréséről… Szóval, most itt egy pár képpel illusztrálom a folyamatot…


LegiNote projektfejlesztési történet 3. rész - Kérések Go nyelven

Kezdőképernyő

A kezdőképernyőn kattintson a "Saját oldal" gombra.


LegiNote projektfejlesztési történet 3. rész - Kérések Go nyelven

Saját oldal


LegiNote projektfejlesztési történet 3. rész - Kérések Go nyelven

API kulcs kiadás képernyő

A fenti képen a "Felhasználási cél" és a "Tartalom" mezőkbe én egyszerűen annyit írtam, hogy "Nyilvános adatverseny céljára". A tartalom kitöltésével kapcsolatban nem kell nagyon aggódni, 1-2 sornyi szöveg elég, hacsak nem valami kellemetlen okból kéred a kulcsot.

A kapott kulcs lesz az a KEY, amire a fenti HTTP leírásban szükség van.


LegiNote projektfejlesztési történet 3. rész - Kérések Go nyelven


A fenti URL-re (a következő frissítésben remélem a metódust is feltüntetik) küldjünk el egy kérést.


```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") // 이건 왜 integer로 표시했는지 모르겠지만 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

```


A fenti kóddal sikerült ellenőrizni a működést.

Egy kis tipp: feltétlenül adjon hozzá fejlécet, ha zökkenőmentesen szeretné használni az API-t. (Félig-meddig fenyegetés)

Ezután töltse ki a Get URL kötelező paramétereit.

A pIndex és a pSize értékeknél integer típus szerepel, de string típus használatával is működik. (Érthetetlen)

A Type paraméterben XML formátumot is használhat, én a JSON-t választottam.



Eredmény

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?...


A fenti eredményt kapjuk.


Én külön definiáltam az összes struktúrát, hogy közvetlenül kezelhessem az objektumokat, de ehhez rengeteg hibakeresésre volt szükség.


A struktúrába történő Unmarshal műveletet valószínűleg a következő részben folytatom, mert a karakterkorlát miatt nem fér bele.

Egyetlen kérés elfoglalta a fejlesztési napló egy részét. Persze, az API használata és a struktúra kialakítása sok időt vett igénybe. Ennek a problémának a megoldását meg kell találnom, hogy másoknak ne kelljen ugyanezt a kínlódást átélniük.


Ha a fenti kérés nem működik a várt módon, vagy nem tetszik a kódom, akkor kérlek, hozz egy doboz cigit is.



statpan
statpan
Python, Typescript, Go, Rust 언어에 관심을 가지고 사용하고 있습니다. 주 업무 분야는 자연어 처리, 데이터 사이언스 영역 입니다.
statpan
LegiNote projektfejlesztési történet 2. rész - Tech stack és workerA LegiNote projektfejlesztési történetének második része, amely a Go nyelven fejlesztett worker fejlesztésével foglalkozik. Bemutatja az adatgyűjtési és frissítési logika megvalósítását, valamint a projekt felépítését.

August 20, 2024

LegiNote projektfejlesztési történet 1. – ÖtletA StatPan elindította a LegiNote projektet, melynek célja a parlamenti jogszabálytervezetek és jegyzőkönyvek hozzáférhetőségének növelése, valamint a mesterséges intelligencia felhasználásával történő jogalkotási hatékonyság javítása.

August 17, 2024

Korea Investment & Securities API fejlesztési referenciaA Korea Investment & Securities API fejlesztési referenciáján keresztül hozzáférhet az API fejlesztéséhez szükséges információkhoz és tippekhez. Kezdje el a fejlesztést a hivatalos weboldal, a KIS fejlesztői weboldal és a github adattár segítségével.
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마

April 22, 2024

한국투자증권 API fejlesztési buktatókrólEz a bejegyzés a Korea Investment & Securities (한국투자증권) API-jának használatával létrehozott automatikus kereskedési program fejlesztése során tapasztalt buktatókat és azok megoldásait tartalmazza. Őszintén megosztjuk a websocket használatával és a kereske
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마

April 23, 2024

A Kukon API-kat kínál a távfelügyeletes ügyfélazonosítási folyamatok megvalósításáhozA Kukon távfelügyeletes azonosítási API-kat kínál, amelyekkel egyszerűsíthető a személyazonosító okmányok ellenőrzése, a gyors azonosítás és a bankszámla-hitelesítés, miközben fokozott pénzügyi biztonságot biztosítanak.
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)

May 9, 2024

[Objektumok] 2. fejezet: Objektumorientált programozásAz objektumorientált programozás fogalmainak bemutatása és egy filmszemle rendszer megvalósítása, amelyben tárgyaljuk az objektumokat, osztályokat, együttműködést, öröklődést és polimorfizmust.
제이온
제이온
제이온
제이온

April 28, 2024

Meghatalmazás ingyenes formanyomtatványIngyenes meghatalmazási formanyomtatványt biztosítunk vállalatok vagy magánszemélyek közötti meghatalmazáshoz, amelyet letölthet a Google Drive-ból, szerkeszthet, majd használhat.
여행가고싶은블로거지만여행에대해다루진않을수있어요
여행가고싶은블로거지만여행에대해다루진않을수있어요
여행가고싶은블로거지만여행에대해다루진않을수있어요
여행가고싶은블로거지만여행에대해다루진않을수있어요

March 11, 2024

Nehézségek a Korea Investment & Securities API fejlesztése soránEz a blogbejegyzés dokumentálja a Korea Investment & Securities API fejlesztése során tapasztalt nehézségeket és azok megoldási folyamatát. Többek között a számlanyitás, az ISA-számlák áthelyezése, a demószámlák hiánya és a websocket használat problémái
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마

April 23, 2024