xRoad API Usage
Overview
This runbook documents how to access the xROAD API to retrieve bridge inspection data, including facility files and inspection reports.
Authentication
All API requests require an API key in the headers:
headers = {'API-key': 'tcmTCkB5rmbgBoBlPGebXyNDUHxpJwboJuV9z9Is'}
Retrieving Facility File Lists
Endpoint
GET https://road-structures-db-bridge.mlit.go.jp/xROAD/api/v1/bridges/otherFileList
Parameters
kanri_kubun: 管理区分 (e.g., "1")seibikyoku: 整備局 (e.g., "81")rosen_bango: 路線番号 (e.g., "0001")jimusho: 事務所 (e.g., "811100")
Example Code
import requests
import json
url = "https://road-structures-db-bridge.mlit.go.jp/xROAD/api/v1/bridges/otherFileList"
headers = {'API-key': 'tcmTCkB5rmbgBoBlPGebXyNDUHxpJwboJuV9z9Is'}
params = {
'kanri_kubun': "1",
'seibikyoku': "81",
'rosen_bango': "0001",
'jimusho': "811100"
}
response = requests.get(url, params=params, headers=headers)
data = response.json()
Response Format
The API returns a JSON object with:
resultset: Metadata including count, limit, offset, and error statusresult: Array of file objects with:file_id: Unique file identifierfile_name: Original filenameshisetsu_id: Facility IDshisetsu_meisyou: Facility name
Downloading Files
Endpoint
GET https://road-structures-db-bridge.mlit.go.jp/xROAD/api/v1/bridges/otherFile/{file_id}
Example Code
url = "https://road-structures-db-bridge.mlit.go.com/xROAD/api/v1/bridges/otherFile"
file_id = "QlIwLTAxMDAwNi0wMDA0MV8yMDIyXzE"
url = url + "/" + file_id
headers = {'API-key': 'tcmTCkB5rmbgBoBlPGebXyNDUHxpJwboJuV9z9Is'}
response = requests.get(url, headers=headers)
# Save to file
file_name = "./岩見沢月形線_9号橋.xlsx"
with open(file_name, 'wb') as f:
f.write(response.content)
Searching Inspection Data
Endpoint
POST https://road-structures-db-bridge.mlit.go.jp/xROAD/api/v1/bridges/tenken/list/{year}
Example Code
url = "https://road-structures-db-bridge.mlit.go.jp"
path = "/xROAD/api/v1/bridges/tenken/list/2020"
headers = {
'API-key': 'tcmTCkB5rmbgBoBlPGebXyNDUHxpJwboJuV9z9Is',
'Content-Type': 'application/json'
}
params = {
"querys": [
{
"key": "area_value",
"value": "北海道開発局",
"op": 1
}
],
"limit": 100,
"offset": 0
}
enc_data = json.dumps(params)
res = requests.post(url+path, headers=headers, data=enc_data)
Retrieving Inspection Images
Endpoints
- Report data:
GET /xROAD/api/v1/bridges/tenken/report/{year}/{bridge_id}/{chapter} - Image files:
GET /xROAD/api/v1/bridges/tenken/image/{year}/{bridge_id}/{chapter}/{filename}
Example Code
import os
url = "https://road-structures-db-bridge.mlit.go.jp/xROAD/api/v1/bridges/tenken/report"
url2 = "https://road-structures-db-bridge.mlit.go.jp/xROAD/api/v1/bridges/tenken/image"
headers = {
'API-key': 'tcmTCkB5rmbgBoBlPGebXyNDUHxpJwboJuV9z9Is',
'Content-Type': 'application/json'
}
def my_makedirs(path):
if not os.path.isdir(path):
os.makedirs(path)
picture_list = []
for i in range(len(df_xroad_tenken_list)):
bridge_id = df_xroad_tenken_list['bridge_id'][i]
tenken_nendo = df_xroad_tenken_list['nendo'][i]
path1 = url + '/' + tenken_nendo + '/' + bridge_id + '/' + '3'
path2 = url2 + '/' + tenken_nendo + '/' + bridge_id + '/' + '3'
response1 = requests.get(path1, headers=headers)
data3 = json.loads(response1.text)
folder_name = "image/" + bridge_id + '/' + tenken_nendo
my_makedirs(folder_name)
for j in range(len(data3['result'][0]['c3'][0]['local_figs'])):
file_name = data3['result'][0]['c3'][0]['local_figs'][j]['file_name']
file_memo = data3['result'][0]['c3'][0]['local_figs'][j]['memo']
path3 = path2 + '/' + file_name
response3 = requests.get(path3, headers=headers)
picture_list.append([folder_name, file_memo])
with open(folder_name + '/' + file_name, 'wb') as f:
f.write(response3.content)
import pandas as pd
df_xroad_picture_list = pd.DataFrame(picture_list, columns=["pic_path", "pic_memo"])
df_xroad_picture_list.to_excel('df_xroad_picture_list.xlsx', sheet_name='new_sheet_name')
Notes
- API responses include pagination via
limitandoffsetparameters - File IDs are base64-encoded strings
- Image retrieval requires iterating through report chapters to get file lists
- Directory structure for saved files:
image/{bridge_id}/{year}/{filename}