이번에는 Aladin API
를 활용하여 도서 정보를 가져와 Firestore
에 저장하는 방법에 대해 알아보겠습니다. 이를 통해 Flutter
애플리케이션에서 다양한 도서 정보를 쉽게 활용할 수 있습니다.
책표지, 출판사, 저자, 책소개 등의 정보들을 각 도서에 대해 하나하나 직접 입력하는 것이 아닌, api를 통해서 간편하게 불러오고자 api를 사용하였습니다. 알라딘 api 등록 및 이용 절차는 아래 사진에서 이용안내에 자세하게 나와있습니다.
우선 Aladin API
를 사용하기 위해서는 API 키
가 필요합니다. Aladin
홈페이지에서 API 키
를 발급받아야 합니다. 발급받은 API 키
를 사용하여 API
에 접근할 수 있습니다.
이제 Flutter
앱에서 Aladin API
를 호출하여 도서 정보를 가져오는 함수를 구현해보겠습니다. getAladinBookInfo
함수는 Aladin API
에 책 제목을 전달하여 해당 책의 정보를 가져옵니다. 가져온 정보는 Firestore
에 저장됩니다.
import 'package:http/http.dart' as http;
Dart 프로그램에서 HTTP
요청을 보내기 위해 http
패키지를 임포트 해야합니다. http
패키지는 Dart에서 HTTP
클라이언트를 구현하는 데 사용되며, 웹 서버와 통신하여 데이터를 가져오거나 보낼 때 유용합니다. 패키지 다운로드는 pub.dev
에서 다른 패키지 다운과 동일하게 진행하시면 됩니다.
Future<void> getAladinBookInfo(String query) async {
// Aladin API 키 설정
const apiKey = "여기에_알라딘_API_키_입력";
String apiUrl =
"https://www.aladin.co.kr/ttb/api/ItemSearch.aspx?ttbkey=$apiKey&Query=$query&QueryType=Title&MaxResults=10&start=1&SearchTarget=Book&output=js&Version=20131101";
try {
final response = await http.get(Uri.parse(apiUrl));
if (response.statusCode == 200) {
// 응답이 성공하면 데이터를 파싱하여 Firestore에 저장합니다.
await saveBooksToFirestore(response.body, query);
} else {
throw Exception('Failed to load books: ${response.statusCode}');
}
} catch (e) {
// 네트워크 요청 예외 처리
print('네트워크 요청 실패: $e');
throw e;
}
}
saveBooksToFirestore
함수는 Aladin API
에서 받은 도서 정보를 Firestore
에 저장합니다. 받은 데이터를 파싱하여 필요한 정보만 추출한 뒤, Firestore
의 aladinBooks collection
에서 쿼리를 통해 title
과 같은 값의 id
를 가지는 문서를 찾아 해당 위치에 저장합니다.
Future<void> saveBooksToFirestore(String responseBody, String query) async {
Map<String, dynamic> data = json.decode(responseBody);
AladinApiResponse apiResponse = AladinApiResponse.fromMap(data);
/// api로 받아온 결과에서 title을 query 값인 책 제목으로 수정 (부제 제거 목적)
apiResponse.bookInfo.title = query;
FirebaseFirestore _firestore = FirebaseFirestore.instance;
QuerySnapshot querySnapshot = await _firestore
.collection('aladinBooks')
.where('title', isEqualTo: query)
.limit(1)
.get();
if (querySnapshot.docs.isEmpty) {
await _firestore
.collection("aladinBooks")
.doc(query)
.set(apiResponse.bookInfo.toMap());
}
}
AladinBookInfo
클래스는 Aladin API
에서 받은 도서 정보를 저장하는 모델 클래스입니다. 이 클래스는 도서의 제목, 저자, 출판사, 설명, 이미지 링크 등의 정보를 저장합니다.
import 'package:military_bookstore/data/AladinBookInfo.dart';
class AladinApiResponse {
AladinBookInfo bookInfo;
AladinApiResponse({
required this.bookInfo,
});
factory AladinApiResponse.fromMap(Map<String, dynamic> data) {
return AladinApiResponse(
bookInfo: AladinBookInfo.fromMap(data['item'][0]),
);
}
}
AladinApiResponse
클래스는 Aladin API
의 응답 데이터를 모델링하는 클래스입니다. 이 클래스는 Aladin API
에서 받은 JSON
데이터를 파싱하여 AladinBookInfo
객체로 변환합니다.
생성자에서는 AladinBookInfo
객체를 필수 매개변수로 받습니다. 또한 fromMap
팩토리 메서드를 통해 JSON
데이터를 파싱하여 AladinApiResponse
객체를 생성합니다.
이제 Aladin API
의 응답 데이터를 효율적으로 모델링하여 Flutter
앱에서 활용할 수 있습니다.
이제 Firestore
에 저장된 도서 정보를 활용하여 앱에서 다양한 기능을 구현할 수 있습니다. 도서의 설명, 저자, 출판사, 이미지 등을 가져와 화면에 표시할 수 있습니다.
위와 같이 Aladin API
를 활용하여 Flutter
앱에서 도서 정보를 가져오고 활용하는 방법에 대해 알아보았습니다. 앱에서 도서 정보를 효과적으로 활용하여 사용자에게 더 나은 서비스를 제공할 수 있습니다.