Files
lunchpick/test/debug_naver_search_test.dart
JiWoong Sul 85fde36157 feat: 초기 프로젝트 설정 및 LunchPick 앱 구현
LunchPick(오늘 뭐 먹Z?) Flutter 앱의 초기 구현입니다.

주요 기능:
- 네이버 지도 연동 맛집 추가
- 랜덤 메뉴 추천 시스템
- 날씨 기반 거리 조정
- 방문 기록 관리
- Bluetooth 맛집 공유
- 다크모드 지원

기술 스택:
- Flutter 3.8.1+
- Riverpod 상태 관리
- Hive 로컬 DB
- Clean Architecture

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-30 19:03:28 +09:00

110 lines
4.0 KiB
Dart

import 'dart:convert';
import 'package:flutter_test/flutter_test.dart';
import 'package:lunchpick/data/api/naver_api_client.dart';
import 'package:lunchpick/data/datasources/remote/naver_map_parser.dart';
void main() {
test('Debug: 네이버 검색 API 전체 응답 확인', () async {
final parser = NaverMapParser();
final apiClient = NaverApiClient();
try {
print('\n========== 네이버 검색 API 디버깅 시작 ==========\n');
// 테스트 URL
const testUrl = 'https://pcmap.place.naver.com/restaurant/1638379069/home';
const placeId = '1638379069';
// 1. 한글 텍스트 추출
print('1. 한글 텍스트 추출 중...');
final koreanData = await apiClient.fetchKoreanTextsFromPcmap(placeId);
print('\n추출된 한글 텍스트:');
if (koreanData['koreanTexts'] != null) {
final texts = koreanData['koreanTexts'] as List;
for (var i = 0; i < texts.length && i < 10; i++) {
print(' [$i] ${texts[i]}');
}
}
print('\nJSON-LD 상호명: ${koreanData['jsonLdName']}');
print('Apollo State 상호명: ${koreanData['apolloStateName']}');
// 2. 검색할 키워드 결정
String searchQuery = '';
if (koreanData['jsonLdName'] != null) {
searchQuery = koreanData['jsonLdName'] as String;
} else if (koreanData['apolloStateName'] != null) {
searchQuery = koreanData['apolloStateName'] as String;
} else if (koreanData['koreanTexts'] != null && (koreanData['koreanTexts'] as List).isNotEmpty) {
searchQuery = (koreanData['koreanTexts'] as List).first as String;
}
print('\n2. 검색 키워드: "$searchQuery"');
// 3. 네이버 로컬 검색 API 호출
print('\n3. 네이버 검색 API 호출 중...');
final searchResults = await apiClient.searchLocal(
query: searchQuery,
display: 10,
);
print('\n========== 검색 API 전체 응답 (JSON) ==========');
// 각 검색 결과를 자세히 출력
for (var i = 0; i < searchResults.length; i++) {
final result = searchResults[i];
print('\n--- 검색 결과 #$i ---');
print('상호명: ${result.title}');
print('카테고리: ${result.category}');
print('설명: ${result.description}');
print('전화번호: ${result.telephone}');
print('도로명주소: ${result.roadAddress}');
print('지번주소: ${result.address}');
print('링크: ${result.link}');
print('좌표 X (경도): ${result.mapx}');
print('좌표 Y (위도): ${result.mapy}');
// Place ID 추출
final extractedPlaceId = result.extractPlaceId();
print('추출된 Place ID: $extractedPlaceId');
print('타겟 Place ID와 일치?: ${extractedPlaceId == placeId}');
// 좌표 변환
if (result.mapx != null && result.mapy != null) {
final lat = result.mapy! / 10000000.0;
final lng = result.mapx! / 10000000.0;
print('변환된 좌표: $lat, $lng');
}
}
print('\n========== 분석 결과 ==========');
print('총 검색 결과 수: ${searchResults.length}');
// Place ID가 일치하는 결과 찾기
var matchingResults = <int>[];
for (var i = 0; i < searchResults.length; i++) {
final extractedId = searchResults[i].extractPlaceId();
if (extractedId == placeId) {
matchingResults.add(i);
}
}
if (matchingResults.isNotEmpty) {
print('✅ Place ID가 일치하는 결과: ${matchingResults.join(', ')}번째');
} else {
print('❌ Place ID가 일치하는 결과를 찾을 수 없음');
}
print('\n========== 테스트 완료 ==========\n');
} catch (e, stackTrace) {
print('\n❌ 오류 발생: $e');
print('\n스택 트레이스:');
print(stackTrace);
} finally {
parser.dispose();
apiClient.dispose();
}
});
}