- LegiNote प्रोजेक्ट विकास की कहानी 2 - तकनीकी ढाँचा और वर्कर
- LegiNote प्रोजेक्ट विकास की कहानी के दूसरे भाग में, Go भाषा का उपयोग करके विकसित वर्कर के बारे में बताया गया है। डेटा संग्रह और अपडेट तर्क कार्यान्वयन और प्रोजेक्ट संरचना पद्धति का परिचय दिया गया है।
यह AI द्वारा अनुवादित पोस्ट है।
durumis AI द्वारा सारांशित पोस्ट
- लेगिनोट प्रोजेक्ट के विकास के दौरान, संसद ओपनएपीआई का उपयोग करके विधेयक जानकारी प्राप्त करने का कार्य किया गया था।
- गो भाषा का उपयोग करके HTTP अनुरोध के माध्यम से डेटा का अनुरोध किया गया था और प्राप्त JSON डेटा को संरचना में पार्स किया गया था।
- API कुंजी जारी करने से लेकर डेटा अनुरोध और पार्सिंग तक की प्रक्रिया को समझाया गया है, और भविष्य में सुधार की दिशा तलाशी जा रही है।
नमस्ते स्टेटपैन हूँ।
लेगिनोट साइड प्रोजेक्ट के डेवलपमेंट स्टोरी को लिख रहा हूँ।
पिछले भाग के लिए कृपया निम्नलिखित लिंक देखें।
वर्कर 1 वर्कर-बिल
बिल नाम किसी विदेशी मित्र का नाम जैसा परिचित लगता है, इसे निम्नलिखित शब्द के अर्थ से प्रेरणा मिली है।
उपयुक्त वेरिएबल नाम, रेपो नाम खोजने के लिए पहले संसद डोमेन से संबंधित अंग्रेजी शब्दों को ढूंढा था, उस समय खोजी गई चीजों को लागू किया है।
बिल शब्द का अर्थ
वर्कर द्वारा लक्षित डेटा को इकट्ठा करने के लिए ओपनएपीआई स्पेसिफिकेशन इस प्रकार है।
इनपुट पैरामीटर
विधेयक की जांच और प्रसंस्करण API इनपुट पैरामीटर
आउटपुट पैरामीटर
विधेयक की जांच और प्रसंस्करण API इनपुट पैरामीटर
यह काफी सारे डेटा प्रदान करता है और काफी विस्तृत जानकारी दे सकता है।
HTTP रिक्वेस्ट के लिए आवश्यक सामग्री
सबसे पहले, ऊपर दिए गए इनपुट पैरामीटर HTTP रिक्वेस्ट के लिए आवश्यक चीजें देखें तो
**URL**, **HTTP रिक्वेस्ट मेथड**(यहाँ नहीं दिया गया है, लेकिन **Get**है, पोस्ट नहीं ㅠ), **KEY**, **Type**, **pIndex**, **pSize**मान है।
KEY मान के लिए, अन्य ओपनएपीआई की तरह, आपको एक अलग प्रमाणीकरण कुंजी प्राप्त करनी होगी।
चूँकि यह डेवलपमेंट स्टोरी है, इसलिए मैं रेफरेंस के साथ लिंक देना चाहता था, लेकिन अभी यह इतना प्रसिद्ध नहीं है कि गूगल पर प्रमाणीकरण कुंजी प्राप्त करने के तरीके का कोई लेख मिले... अभी के लिए, मैं यहाँ चित्रों के माध्यम से समझाता हूँ...
होम स्क्रीन
होम स्क्रीन पर, माय पेज बटन दबाएँ।
माई पेज
प्रमाणीकरण कुंजी जारी करने की स्क्रीन
ऊपर दी गई स्क्रीन में, उपयोग के उद्देश्य या सामग्री के लिए, मैंने इसे सार्वजनिक डेटा प्रतियोगिता के उद्देश्य के लिए लिखा है। इस भाग को भरने के बारे में ज्यादा चिंता न करें, 1-2 पंक्तियों में यदि आपका उद्देश्य गलत नहीं है, तो यह स्वीकृत हो जाएगा।
इस प्रकार प्राप्त कुंजी ही ऊपर बताए गए HTTP विवरण में आवश्यक KEY प्रदान करेगी।
ऊपर दिए गए URL पर रिक्वेस्ट भेजते हैं (अगली बार अपडेट करते समय, कृपया मेथड भी शामिल करें)
go```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)
```
इस कोड का उपयोग करके, मैंने पहले काम की जाँच की।
एक टिप यह है कि आपको हेडर को जरूर जोड़ना होगा। यदि आप इस API का उपयोग करना चाहते हैं (धमकी)।
इसके बाद, Get URL में आवश्यक पैरामीटर डालते हैं।
pIndex और pSize के मान को इंटीजर में लिखना होता है, लेकिन आप स्ट्रिंग टाइप का इस्तेमाल कर सकते हैं। (समझ में नहीं आ रहा है)
Type में 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?...
इस तरह का परिणाम मिलता है।
मैं इस ऑब्जेक्ट को सीधे नियंत्रित करने के लिए सभी स्ट्रक्चर को परिभाषित करके मान प्राप्त करता हूँ, और इस पर बहुत सारे डिबगिंग किए हैं।
इस मान को स्ट्रक्चर में अनमार्शल करना शायद अगले भाग में करना होगा, क्योंकि वर्णों की सीमा है।
एक रिक्वेस्ट ने डेवलपमेंट स्टोरी का एक भाग ले लिया है। बेशक, इस ओपनएपीआई के उपयोग के कारण, API का उपयोग और स्ट्रक्चर बनाने में काफी समय लगा है। मुझे इस हिस्से के लिए ऐसा तरीका खोजना होगा जिससे दूसरों को ऐसी परेशानी न हो।
यदि ऊपर दिए गए रिक्वेस्ट में कोई समस्या है या मेरे कोड से आप असंतुष्ट हैं, तो कृपया मुझे सिगरेट भी दें।