見出し画像

【AWS Glue】Python ShellでWebAPIのxmlレスポンスをS3にcsvで出力する

WebAPIの結果がxmlで返ってきた際にcsvで出力するサンプルコードです

import urllib.request
import xml.etree.ElementTree as XmlET
import boto3
import re
import pandas as pd

OUTPUT_BUCKET_NAME = '出力S3バケット名'
OUTPUT_FILE_PATH = '出力ファイル名'

#APIコール
request_url = {実行するAPIのurlを記載}
response = urllib.request.Request(request_url)

#レスポンスのbodyを取得
with urllib.request.urlopen(response ) as res:
       res_body = res.read().decode(ENCODING)

#各要素を1レコードにしてdataframeに持つ
all_record = []
root = XmlET.fromstring(res_body)
#子要素~ひ孫要素まで取得(名前空間(namespace)がある場合は名前空間も指定する)
for element in root.findall('{http://~/}Element'):
        record = {}
        for child in element:
            #名前空間を除去
            child_tag = child.tag.lstrip('{http://~/}')
            record[child_tag] = child.text
            for g_child in child:
                g_child _tag = g_child.tag.lstrip('{http://~/}')
                record[g_child _tag] = g_child.text
                for great_g_child in g_child:
                    great_g_child_tag = great_g_child.tag.lstrip('{http://~/}')
                    record[great_g_child_tag ] = great_g_child.text
        all_seminer.append(record)

df = pd.DataFrame(all_seminer)
print(df)

#S3にcsvファイルとして出力
s3 = boto3.resource('s3')
output_object = s3.Object(OUTPUT_BUCKET_NAME, OUTPUT_FILE_PATH)
output_object.put(Body=df.to_csv(index = False).encode('utf_8'))




いいなと思ったら応援しよう!