본문 바로가기
C#

재미로 만드는 로또 번호 생성기 #2_로또 API를 이용해서 당첨 번호 조회하기.

by 공부봇 2025. 1. 5.
반응형

로또 당첨 번호 API는 특정 회차의 로또 당첨 정보를 제공하는 REST API입니다. 이 API는 대한민국 동행복권 로또 사이트에서 제공하는 것으로, 특정 회차의 데이터를 JSON 형식으로 반환합니다.


API URL

https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={회차번호}
  • drwNo: 조회하려는 로또 회차 번호를 지정합니다. 예를 들어, 903회차를 조회하려면 drwNo=903을 사용합니다.

응답 데이터 형식

API의 응답은 JSON 형식으로 반환됩니다. 다음은 903회차를 조회했을 때의 예시 응답입니다:

{
  "totSellamnt": 96962255000,
  "returnValue": "success",
  "drwNoDate": "2020-01-25",
  "firstWinamnt": 1928079219,
  "drwtNo6": 41,
  "drwtNo4": 38,
  "firstPrzwnerCo": 12,
  "drwtNo5": 39,
  "bnusNo": 23,
  "firstAccumamnt": 23136950628,
  "drwNo": 903,
  "drwtNo2": 26,
  "drwtNo3": 31,
  "drwtNo1": 16
}

응답 데이터 설명

키 설명

totSellamnt 해당 회차의 총 판매 금액 (원)
returnValue 호출 결과 상태 (success는 성공)
drwNoDate 추첨일 (YYYY-MM-DD 형식)
firstWinamnt 1등 당첨금액 (1인당)
drwtNo1 당첨 번호 1
drwtNo2 당첨 번호 2
drwtNo3 당첨 번호 3
drwtNo4 당첨 번호 4
drwtNo5 당첨 번호 5
drwtNo6 당첨 번호 6
bnusNo 보너스 번호
firstPrzwnerCo 1등 당첨자 수
firstAccumamnt 1등 당첨금 총액 (모든 1등 당첨자 합산 금액)
drwNo 로또 회차 번호

예시 사용 방법

1. 조회

2. 성공 여부 확인

  • 응답의 returnValue 값이 "success"이면 요청이 성공한 것입니다.
  • 다른 값이 반환되면, 요청이 실패했거나 유효하지 않은 회차를 조회했을 가능성이 있습니다.

3. API 호출 주의 사항

  • 너무 빈번한 요청은 서버에서 차단될 수 있으므로, 일정 시간 간격을 두고 호출합니다.

 

추가 정보

  • 최신 로또 당첨 정보를 조회하려면 가장 최근 회차 번호를 사용해야 합니다.
  • 이 API는 공공 API가 아닌 로또 사이트의 내부 API일 수 있으므로, 트래픽을 과도하게 발생시키지 않도록 주의해야 합니다. 😊

 

아래는 C# 7.3 버전에 맞게 정리한 코드입니다. using 블록을 사용해 HttpClient 리소스를 명시적으로 관리하도록 수정했습니다.


C# 7.3 버전 코드

using System;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // API 호출: 903회차 예시
        int drawNumber = 903; // 조회할 회차 번호
        string apiUrl = $"https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={drawNumber}";

        try
        {
            LottoResult lottoResult = await FetchLottoResult(apiUrl);

            if (lottoResult != null && lottoResult.returnValue == "success")
            {
                // 로또 결과 출력
                Console.WriteLine($"회차: {lottoResult.drwNo}");
                Console.WriteLine($"추첨일: {lottoResult.drwNoDate}");
                Console.WriteLine($"1등 당첨금: {lottoResult.firstWinamnt:N0}원");
                Console.WriteLine($"당첨 번호: {lottoResult.drwtNo1}, {lottoResult.drwtNo2}, {lottoResult.drwtNo3}, {lottoResult.drwtNo4}, {lottoResult.drwtNo5}, {lottoResult.drwtNo6}");
                Console.WriteLine($"보너스 번호: {lottoResult.bnusNo}");
            }
            else
            {
                Console.WriteLine("API 호출에 실패했습니다.");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"오류 발생: {ex.Message}");
        }
    }

    // API 호출 및 JSON 데이터 파싱
    static async Task FetchLottoResult(string url)
    {
        // HttpClient 사용을 위해 using 블록 사용
        using (HttpClient client = new HttpClient())
        {
            HttpResponseMessage response = await client.GetAsync(url);

            if (response.IsSuccessStatusCode)
            {
                string jsonResponse = await response.Content.ReadAsStringAsync();

                // JSON 파싱
                return JsonSerializer.Deserialize(jsonResponse, new JsonSerializerOptions
                {
                    PropertyNameCaseInsensitive = true // JSON 키 대소문자 무시
                });
            }

            return null;
        }
    }
}

// LottoResult 클래스 정의 (JSON 매핑)
public class LottoResult
{
    public long totSellamnt { get; set; }       // 총 판매 금액
    public string returnValue { get; set; }    // 호출 성공 여부
    public string drwNoDate { get; set; }      // 추첨일
    public long firstWinamnt { get; set; }     // 1등 당첨금
    public int drwtNo1 { get; set; }           // 당첨 번호 1
    public int drwtNo2 { get; set; }           // 당첨 번호 2
    public int drwtNo3 { get; set; }           // 당첨 번호 3
    public int drwtNo4 { get; set; }           // 당첨 번호 4
    public int drwtNo5 { get; set; }           // 당첨 번호 5
    public int drwtNo6 { get; set; }           // 당첨 번호 6
    public int bnusNo { get; set; }            // 보너스 번호
    public int drwNo { get; set; }             // 회차 번호
}

주요 특징

  1. HttpClient 사용:
    • using (HttpClient client = new HttpClient())로 리소스를 명시적으로 해제합니다.
    • 이는 C# 7.3에서 리소스 누수를 방지하는 권장 방법입니다.
  2. JsonSerializer.Deserialize<T>():
    • System.Text.Json의 Deserialize를 사용해 JSON 응답을 LottoResult 객체로 변환합니다.
    • JSON 키의 대소문자를 무시하도록 PropertyNameCaseInsensitive = true 옵션을 설정합니다.
  3. 클래스 매핑:
    • API에서 반환되는 JSON 데이터를 처리하기 위해 LottoResult 클래스를 작성했습니다.

실행 결과 예시

만약 회차 번호를 903으로 설정하고 실행하면:

회차: 903
추첨일: 2020-01-25
1등 당첨금: 1,928,079,219원
당첨 번호: 16, 26, 31, 38, 39, 41
보너스 번호: 23

이 코드로 C# 7.3 환경에서도 안정적으로 API를 호출하고 데이터를 처리할 수 있습니다! 😊

반응형