🦆
官公需情報ポータルサイト 検索APIを使ってみる
なぜ作成したのか
- 今日はお手軽に試せそうな官公需情報ポータルサイト 検索APIを使ってみる
技術スタック
- Google Spreadsheet
- Gemin API
- 官公需情報ポータルサイト 検索API(PDF)
お試しする処理のプラン
- GAS で官公需情報ポータルサイト 検索APIを呼び出して、その日に公開された入札情報リストを取得する
- 生成した情報をSpreadsheetに追加する
実際に実装した内容
function fetchProcurementData() {
const scriptProperties = PropertiesService.getScriptProperties();
const apiUrl = scriptProperties.getProperty('API_URL');
const query = scriptProperties.getProperty('QUERY');
const spreadsheetId = scriptProperties.getProperty('SPREADSHEET_ID');
const today = new Date();
const formattedDate = Utilities.formatDate(today, 'JST', 'yyyy-MM-dd');
const params = {
method: 'get',
// payload: {
// Query: query,
// CFT_Issue_Date: `${formattedDate}/`
// }
};
const xquery = apiUrl + '?Query=' + query + '&CFT_Issue_Date=' + formattedDate;
//const response = UrlFetchApp.fetch(apiUrl + '?' + new URLSearchParams(params.payload), params);
const response = UrlFetchApp.fetch(xquery, params);
const xml = response.getContentText();
const document = XmlService.parse(xml);
const root = document.getRootElement();
const searchResults = root.getChild('SearchResults');
const searchResult = searchResults.getChildren('SearchResult');
const sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName('ProcurementData') ||
SpreadsheetApp.openById(spreadsheetId).insertSheet('ProcurementData');
// ヘッダーのセット
if (sheet.getLastRow() === 0) {
sheet.appendRow(['案件名', '機関名', '公告日', '納入期限日', 'URL']);
}
// データの挿入
searchResult.forEach(item => {
const projectName = item.getChildText('ProjectName');
const organizationName = item.getChildText('OrganizationName');
const cftIssueDate = item.getChildText('CftIssueDate');
const periodEndTime = item.getChildText('PeriodEndTime');
const externalDocumentURI = item.getChildText('ExternalDocumentURI');
sheet.appendRow([projectName, organizationName, cftIssueDate, periodEndTime, externalDocumentURI]);
});
Logger.log('データ取得が完了しました。');
}
実行結果
- 返り値はXML
- 日を指定した情報取得は意図通りに動作
- 毎日トリガー実行することで積み上げできる
所感
- ただ情報を積み上げるだけなら、サイトから直接情報参照すればよい尾だけなので、毎日情報を取得することで生成AIを用いた情報付加、洞察をつけるようにして何かしらの価値が出せるといいな
Discussion