translation

Testo tradotto dall'IA.

statpan

LegiNote Progetto di Sviluppo - Storia 3 - Richiesta in Go

Immagine del profilo

Riepilogo del post generato dall'IA di durumis

  • Durante lo sviluppo del progetto LegiNote, abbiamo lavorato all'estrazione di informazioni su progetti di legge utilizzando la OpenAPI del Parlamento.
  • Abbiamo utilizzato il linguaggio Go per inviare richieste HTTP e recuperare i dati, quindi abbiamo eseguito il parsing dei dati JSON ricevuti in strutture dati.
  • Spieghiamo il processo dall'ottenimento della chiave API alla richiesta e al parsing dei dati, esplorando le possibili direzioni di miglioramento future.

Ciao, sono StatPan.

Sto scrivendo la cronistoria dello sviluppo del progetto LegiNote.

Per la parte precedente, consultare il seguente link.



Worker 1: worker-bill

Il nome "bill" mi sembra familiare, come quello di un amico straniero, e l'ispirazione deriva dal significato di questa parola.

Per trovare nomi di variabili e repository appropriati, in passato ho cercato diverse parole inglesi relative al dominio del Parlamento, e ho applicato quelle trovate in quel momento.

LegiNote Progetto di Sviluppo - Storia 3 - Richiesta in Go

Significato della parola 'bill'



La specifica OpenAPI del punto in cui il Worker raccoglierà i dati di destinazione è la seguente.


Parametri di input

LegiNote Progetto di Sviluppo - Storia 3 - Richiesta in Go

Parametri di input dell'API di esame e trattamento dei progetti di legge


Parametri di output

LegiNote Progetto di Sviluppo - Storia 3 - Richiesta in Go

Parametri di input dell'API di esame e trattamento dei progetti di legge


Sembra che fornisca molti dati e che sia possibile fornire informazioni piuttosto dettagliate.


Elementi necessari per la richiesta HTTP

Innanzitutto, vediamo cosa è necessario per la richiesta HTTP dei parametri di input sopra descritti.

URL, metodo di richiesta HTTP(non specificato qui, ma è Get, non Post purtroppo), KEY, Type, pIndex, pSize sono i valori.

Per quanto riguarda il valore KEY, come per altre OpenAPI, è necessario ottenere una chiave di autenticazione separata.


Poiché si tratta di una storia di sviluppo, volevo inserire un link di riferimento, ma a quanto pare è ancora poco diffuso, quindi non riesco a trovare su Google un articolo che spieghi come ottenere la chiave di autenticazione... Per ora, vorrei spiegare brevemente con immagini...


LegiNote Progetto di Sviluppo - Storia 3 - Richiesta in Go

Schermata iniziale

Nella schermata iniziale, premere il pulsante "My Page".


LegiNote Progetto di Sviluppo - Storia 3 - Richiesta in Go

Mia pagina


LegiNote Progetto di Sviluppo - Storia 3 - Richiesta in Go

Schermata di rilascio della chiave API

Nella schermata sopra, per quanto riguarda lo scopo o il contenuto dell'utilizzo, nel mio caso ho semplicemente scritto "scopo di partecipazione a una competizione di dati pubblici". Non c'è bisogno di preoccuparsi troppo della compilazione di questa parte, penso che verrà approvata subito, a meno che non si inserisca qualcosa di inappropriato in 1-2 righe...

La chiave ottenuta in questo modo rilascerà la KEY necessaria per la spiegazione HTTP sopra.


LegiNote Progetto di Sviluppo - Storia 3 - Richiesta in Go


Proviamo a inviare una richiesta all'URL sopra indicato (spero che nella prossima versione venga inclusa anche il metodo).


```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") // this is why it is an integer, I don't know
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

```


Con il codice sopra, sono riuscito a verificare il funzionamento.

Un consiglio: è necessario aggiungere l'intestazione (Header). Se si desidera utilizzare questa API senza problemi (minaccia velata).

Successivamente, si completano i parametri obbligatori nell'URL Get.

I valori di pIndex e pSize sono indicati come interi, ma funzionano anche se si applica il tipo string. (Incomprensibile)

È possibile utilizzare anche il formato XML per il tipo, ma io ho scelto JSON.



Valore di ritorno

map[TVBPMBILL11:[map[head:[map[list_total_count:103305] map[RESULT:map[CODE:INFO-000 MESSAGE:Elaborazione completata correttamente.]]]] map[row:[map[AGE:22 BILL_ID:PRC_T2U4C0A8B2Z0A1Y3Y5G2H0F0G5E4F4 BILL_NAME:Progetto di legge recante modifiche parziali alla legge sui finanziamenti politici 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:On. Go Dong-jin e altri 10 PROPOSER_KIND:Membro del Parlamento PROPOSE_DT:2024-08-23 RST_MONA_CD:HS39431V RST_PROPOSER:Go Dong-jin] map[AGE:22 BILL_ID:PRC_O2M4M0L8L2T0R1S3Q5R1P4Q0Y2W2X6 BILL_NAME:Progetto di legge recante modifiche parziali alla legge sui partiti politici 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?...


Si ottiene il valore di ritorno sopra indicato.


Per controllare direttamente l'oggetto, ho definito tutte le strutture e ho ottenuto i valori, ma anche questo ha richiesto molti debug.


A causa del limite di caratteri, penso che dovrei continuare la descrizione di come eseguire l'unmarshalling in una struttura nella prossima puntata.

Una singola richiesta ha occupato un intero capitolo dello sviluppo. Certo, a causa delle caratteristiche di questa OpenAPI, ho impiegato molto tempo per utilizzare l'API e costruire la struttura della struttura, ma devo trovare un modo per evitare che altri debbano affrontare le stesse difficoltà.


Se durante lo sviluppo si verificano problemi di funzionamento o se non si è soddisfatti del mio codice bizzarro, si prega di fornire anche una sigaretta.



statpan
statpan
Python, Typescript, Go, Rust 언어에 관심을 가지고 사용하고 있습니다. 주 업무 분야는 자연어 처리, 데이터 사이언스 영역 입니다.
statpan
Storie di sviluppo del progetto LegiNote 2 - Stack tecnologico e workerIl secondo capitolo della storia dello sviluppo del progetto LegiNote, che tratta dello sviluppo di worker utilizzando il linguaggio Go. Viene presentato il modo in cui è stata implementata la logica di raccolta e aggiornamento dei dati e la struttura del

August 20, 2024

LegiNote Progetto di Sviluppo - Storia 1 - IdeaStatPan ha avviato il progetto LegiNote con l'obiettivo di migliorare l'accessibilità alle leggi e ai verbali parlamentari e di aumentare l'efficienza legislativa tramite l'intelligenza artificiale.

August 17, 2024

Riferimenti per lo Sviluppo dell'API di Korea Investment SecuritiesI riferimenti per lo sviluppo dell'API di Korea Investment Securities ti permettono di ottenere informazioni e suggerimenti necessari per lo sviluppo dell'API. Fai riferimento al sito ufficiale, al sito per sviluppatori KIS e al repository Github per iniz
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마

April 22, 2024

Creare un Power Blog con Choi Bong-hyeok - Analisi Keyword di Ricerca in Ascesa, Massimi Storici, Impennate e Crolli, Posizionamento in AltoChoi Bong-hyeok condivide i risultati dell'analisi dei keyword di blog di settembre, presentando le ultime tendenze come iPhone 16, AI e strumenti no-code.
NEWS FDN (다큐)
NEWS FDN (다큐)
NEWS FDN (다큐)
NEWS FDN (다큐)

September 18, 2024

Ho ricevuto il regalo per i migliori autori del 2022 da DEV.TOUn autore di DEV.to ha ricevuto un regalo per i migliori autori del 2022, un set di adesivi, dopo aver inizialmente pensato che fosse un premio di $ 256.
Jeongho Nam
Jeongho Nam
Jeongho Nam
Jeongho Nam

July 18, 2024

AI Full Stack con Open SourcePresentiamo una varietà di strumenti LLM, strumenti di inferenza e serving, framework e soluzioni di monitoraggio per la costruzione di un AI full stack open source. Scopri come sviluppare applicazioni AI utilizzando LangChain, LlamaIndex e altri strument
RevFactory
RevFactory
RevFactory
RevFactory

February 5, 2024

Mobizen, ingresso nel mercato dell'IA generativa con tecnologia di estensione dei metadati attivi basata su piattaforma datiMobizen starebbe preparando il suo ingresso nel mercato dell'IA generativa, lavorando allo sviluppo di un progetto di ricerca che riguarda lo sviluppo di una tecnologia di estensione dati attiva basata su metadati attivi per l'utilizzo di dati di terze pa
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)

May 17, 2024

Wello, il servizio di politiche per tutti, ottiene finanziamenti di serie AWello, il servizio di politiche basato sull'intelligenza artificiale, ottiene finanziamenti di serie A e si prepara all'espansione globale. Wello, che fornisce informazioni sulle politiche personalizzate per privati ​​e aziende, prevede di conquistare il
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)

September 13, 2024