【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'))