SeibroIssucoCustnoParser.cs 1.2 KB

12345678910111213141516171819202122232425262728293031
  1. using System.Globalization;
  2. namespace Infrastructure.StockData;
  3. /// <summary>
  4. /// SEIBro getIssucoCustnoByIsin(발행종목→발행회사번호 조회) 응답 파서 — 순수 C#.
  5. /// 단건 fallback 용 (배치 미사용) — getShotnByMart 스냅샷에 없는 종목의 ISSUCO_CUSTNO 를 ISIN/단축코드로 개별 조회할 때 쓴다.
  6. /// 행 필드: ISSUCO_CUSTNO(발행회사번호, 필수) / REP_SECN_NM(대표종목명, 선택). 회사번호 없는/비숫자 행은 건너뛴다.
  7. /// </summary>
  8. public static class SeibroIssucoCustnoParser
  9. {
  10. /// <summary>발행회사번호 1행</summary>
  11. public sealed record Row(int IssucoCustno, string? RepSecnName);
  12. public static IReadOnlyList<Row> Parse(SeibroXml.Envelope envelope)
  13. {
  14. var rows = new List<Row>();
  15. foreach (var fields in envelope.Rows)
  16. {
  17. if (!int.TryParse(SeibroXml.GetOrNull(fields, "ISSUCO_CUSTNO"), NumberStyles.Integer, CultureInfo.InvariantCulture, out var custno))
  18. {
  19. continue;
  20. }
  21. rows.Add(new Row(custno, SeibroXml.GetOrNull(fields, "REP_SECN_NM")?.Trim()));
  22. }
  23. return rows;
  24. }
  25. }