우선 Kakao API
를 사용하기 위해서는 API 키가 필요합니다. Kakao 개발자 센터에서 API 키를 발급받아야 합니다. 발급받은 API 키를 사용하여 API에 접근할 수 있습니다.
Kakao 책 검색 API를 사용하여 도서 정보를 가져오는 getBookInfo
함수를 정의합니다. 이 함수는 주어진 검색어를 기반으로 Kakao API
를 호출하고, 응답을 처리하여 Firestore
에 저장합니다.
import 'package:http/http.dart' as http;
Dart 프로그램에서 HTTP 요청을 보내기 위해 http 패키지를 임포트 해야합니다. http 패키지는 Dart에서 HTTP 클라이언트를 구현하는 데 사용되며, 웹 서버와 통신하여 데이터를 가져오거나 보낼 때 유용합니다. 패키지 다운로드는 pub.dev에서 다른 패키지 다운과 동일하게 진행하시면 됩니다.
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:military_bookstore/data/BookInfo.dart';
import 'package:military_bookstore/restAPI/ApiResponse.dart';
Future<void> getBookInfo(String query) async {
const apiUrl = "https://dapi.kakao.com/v3/search/book";
const apiKey = "여기에_카카오_API_키_입력";
final response = await http.get(
Uri.parse('$apiUrl?query=$query'),
headers: {
'Authorization': 'KakaoAK $apiKey',
},
);
if (response.statusCode == 200) {
Map<String, dynamic> data = json.decode(response.body);
ApiResponse apiResponse = ApiResponse.fromMap(data);
/// api로 받아온 결과에서 title을 query 값인 책 제목으로 수정 (부제 제거 목적)
apiResponse.bookInfo.title = query;
FirebaseFirestore _firestore = FirebaseFirestore.instance;
QuerySnapshot querySnapshot = await _firestore
.collection('bookInfos')
.where('title', isEqualTo: query)
.limit(1)
.get();
if (querySnapshot.docs.isEmpty) {
await _firestore
.collection("bookInfos")
.doc(query)
.set(apiResponse.bookInfo.toMap());
}
} else {
throw Exception('Failed to load books');
}
}
위 코드는 Kakao API
를 통해 도서 정보를 가져오는 함수인 getBookInfo
를 구현한 것입니다. 이 함수는 Kakao API
에 책 제목을 전달하여 해당 책의 정보를 가져옵니다. 가져온 정보는 Firestore
에 저장됩니다.
해당 코드에서는 http 패키지를 사용하여 HTTP 요청을 보내고, Kakao API
에 접근합니다. API에 대한 응답은 JSON 형식으로 반환되며, 이를 파싱하여 필요한 정보를 추출한 뒤, Firestore
의 bookInfos
collection에서 쿼리를 통해 title
과 같은 값의 id
를 가지는 문서를 찾아 해당 위치에 저장합니다.
BookInfo
클래스는 Kakao API
에서 받은 도서 정보를 저장하는 모델 클래스입니다. 이 클래스는 도서의 제목, 저자, 출판사, 설명, 이미지 링크 등의 정보를 저장합니다.
import 'package:military_bookstore/data/BookInfo.dart';
class ApiResponse {
Meta meta;
BookInfo bookInfo;
ApiResponse({
required this.meta,
required this.bookInfo,
});
factory ApiResponse.fromMap(Map<String, dynamic> data) {
return ApiResponse(
meta: Meta.fromJson(data['meta']),
bookInfo: BookInfo.fromMap(data['documents'][0]),
);
}
}
ApiResponse
클래스는 Kakao API
의 응답 데이터를 모델링하는 클래스입니다. 이 클래스는 API에서 받은 JSON 데이터를 파싱하여 BookInfo
객체로 변환합니다.
생성자에서는 BookInfo
객체를 필수 매개변수로 받습니다. 또한 fromMap
팩토리 메서드를 통해 JSON 데이터를 파싱하여 ApiResponse
객체를 생성합니다.
위와 같이 Kakao API
를 활용하여 Flutter
앱에서 도서 정보를 가져오고 활용하는 방법에 대해 알아보았습니다. 앱에서 API를 통해 도서 정보를 효과적으로 활용하여 사용자에게 더 나은 서비스를 제공할 수 있습니다.