반응형
로또 당첨 번호 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. 조회
- 특정 회차 데이터를 조회하려면 drwNo 값을 변경해 요청을 보냅니다.
- 예: https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=903
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; } // 회차 번호
}
주요 특징
- HttpClient 사용:
- using (HttpClient client = new HttpClient())로 리소스를 명시적으로 해제합니다.
- 이는 C# 7.3에서 리소스 누수를 방지하는 권장 방법입니다.
- JsonSerializer.Deserialize<T>():
- System.Text.Json의 Deserialize를 사용해 JSON 응답을 LottoResult 객체로 변환합니다.
- JSON 키의 대소문자를 무시하도록 PropertyNameCaseInsensitive = true 옵션을 설정합니다.
- 클래스 매핑:
- API에서 반환되는 JSON 데이터를 처리하기 위해 LottoResult 클래스를 작성했습니다.
실행 결과 예시
만약 회차 번호를 903으로 설정하고 실행하면:
회차: 903
추첨일: 2020-01-25
1등 당첨금: 1,928,079,219원
당첨 번호: 16, 26, 31, 38, 39, 41
보너스 번호: 23
이 코드로 C# 7.3 환경에서도 안정적으로 API를 호출하고 데이터를 처리할 수 있습니다! 😊
반응형
'C#' 카테고리의 다른 글
C# LINQ: 데이터 쿼리를 간결하고 강력하게 다루는 방법 (0) | 2025.01.13 |
---|---|
SocketException: '각 소켓 주소는 하나만 사용할 수 있습니다' 에러 원인 및 해결법 (1) | 2025.01.10 |
C# internal: 어셈블리 내 접근 제한자 (0) | 2025.01.10 |
C# Struct vs Class: 차이점과 최적 사용 사례 (0) | 2025.01.06 |
재미로 만드는 로또 번호 생성기 #1_중복 없는 번호 생성 (1) | 2025.01.04 |
C#의 Garbage Collection (GC) 개념 (5) | 2025.01.03 |
C#로 특정 폴더 내 파일 이름 변경 (1) | 2025.01.03 |
WNetUseConnection 함수의 리턴값과 오류 코드 목록 (2) | 2025.01.03 |