🦆

官公需情報ポータルサイト 検索APIを使ってみる

に公開

なぜ作成したのか

  • 今日はお手軽に試せそうな官公需情報ポータルサイト 検索APIを使ってみる

技術スタック

お試しする処理のプラン

  • 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を用いた情報付加、洞察をつけるようにして何かしらの価値が出せるといいな
GitHubで編集を提案

Discussion