Publié le :
ETL EXTERNE

Extraction et Parsing de Données Fiscales Coréennes via API

Ce code est également disponible en : Deutsch English Español
En attente de validation
Ce script configure une bibliothèque locale et définit une macro '%json' pour extraire des données. Il itère sur une plage d'années et de pages, effectue des requêtes POST via PROC HTTP vers 'openapi.openfiscaldata.go.kr', et enregistre la réponse brute. Le parsing du JSON est effectué de manière non standard via un DATA step utilisant des délimiteurs spécifiques et une transposition. Enfin, une étape de post-traitement applique des étiquettes en coréen et filtre les variables.
Analyse des données

Type : EXTERNE


Données récupérées dynamiquement via l'API 'openapi.openfiscaldata.go.kr' (Open Fiscal Data) au format JSON.

1 Bloc de code
DATA STEP
Explication :
Initialisation des variables globales (chemin, clé API) et définition de la bibliothèque de sortie.
Copié !
1%let dir=C:\json\;
2%let lib=json;
3%let String01=WBQMR1000052520180323030651FWHGU;/*apiKey*/
4 
5LIBNAME &lib "&dir";
2 Bloc de code
PROC HTTP Data
Explication :
Construction dynamique de l'URL avec les paramètres d'année et de pagination, puis exécution d'une requête POST pour télécharger les données brutes dans un fichier texte.
Copié !
1%macro json(data_final, String05, date_s, date_e);
2 /* ... boucle date ... */
3 %let url=&string05?FSCL_YY=&date_want&key=&string01&type=json&pindex=&string02&psize=1000;
4 
5 filename out "&dir.SeriesDataOut.txt" recfm=v lrecl=999999999;
6 PROC HTTP out=out url="&url" method="post" ct="application/json";
7 RUN;
3 Bloc de code
DATA STEP Data
Explication :
Importation et parsing manuel du fichier JSON (traité comme texte délimité). La logique de 'merge' avec décalage (firstobs=2) sert probablement à associer les clés et les valeurs JSON.
Copié !
1 DATA raw;
2 INFILE "&dir.SeriesDataOut.txt" dsd lrecl=999999999 dlm='{}[]:,';
3 INPUT raw : $2000. /* ... */;
4 RUN;
5 
6 DATA temp;
7 MERGE raw raw(firstobs=2 rename=(raw=_raw));
8 IF mod(_n_,2) eq 0;
9 RUN;
10 /* ... logique de groupe ... */
4 Bloc de code
PROC TRANSPOSE Data
Explication :
Pivote les données parsées pour transformer les paires clé-valeur (lignes) en colonnes structurées, puis ajoute ces données à la table finale cumulative.
Copié !
1 PROC TRANSPOSE DATA=temp out=data_one(drop=_:);
2 BY group;
3 id raw;
4 var _raw;
5 RUN;
6 
7 DATA &lib..&data_final;
8 SET &lib..&data_final data_one;
9 RUN;
5 Bloc de code
DATA STEP Data
Explication :
Nettoyage final de la table : suppression des lignes vides, application des étiquettes de colonnes (en coréen) pour la documentation métier, et conservation uniquement des variables d'intérêt définies dans &var_want.
Copié !
1/*변수명, 변수 형태 변경_start*/
2DATA &lib .longdata_002;
3SET &lib .longdata_002;
4IF FSCL_YY="" THEN delete;
5label FSCL_YY=회계연도;
6/* ... autres labels ... */
7label NRC_AMT =미수납액(원);
8keep &var_want;
9RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« Ce script illustre un défi récurrent pour le Data Engineer : l'ingestion de données publiques massives via des services web REST, là où les connecteurs standards peuvent faire défaut. La stratégie employée ici combine la puissance de PROC HTTP avec une technique de parsing manuel ingénieuse pour traiter les flux de l'Open Data fiscal coréen.

Cette méthode de parsing manuel est extrêmement performante pour les fichiers JSON "plats" ou répétitifs issus des portails Open Data. Toutefois, assurez-vous que les caractères de délimitation choisis ne sont pas présents à l'intérieur des valeurs textuelles coréennes, sous peine de décaler les colonnes lors de la transposition. »