[Flutter] Aladin API를 활용한 도서 정보 가져오기

StudipU·2024년 3월 9일
0

이번에는 Aladin API를 활용하여 도서 정보를 가져와 Firestore에 저장하는 방법에 대해 알아보겠습니다. 이를 통해 Flutter 애플리케이션에서 다양한 도서 정보를 쉽게 활용할 수 있습니다.

Aladin API 소개 ✨

책표지, 출판사, 저자, 책소개 등의 정보들을 각 도서에 대해 하나하나 직접 입력하는 것이 아닌, api를 통해서 간편하게 불러오고자 api를 사용하였습니다. 알라딘 api 등록 및 이용 절차는 아래 사진에서 이용안내에 자세하게 나와있습니다.

주요 기능과 코드 분석 🎭

1. Aladin API 키 발급

우선 Aladin API를 사용하기 위해서는 API 키가 필요합니다. Aladin 홈페이지에서 API 키를 발급받아야 합니다. 발급받은 API 키를 사용하여 API에 접근할 수 있습니다.

2. 앱에서 도서 정보 가져오기

이제 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;
  }
}

3. 도서 정보 Firestore에 저장하기

saveBooksToFirestore 함수는 Aladin API에서 받은 도서 정보를 Firestore에 저장합니다. 받은 데이터를 파싱하여 필요한 정보만 추출한 뒤, FirestorealadinBooks 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 앱에서 활용할 수 있습니다.

4. 앱에서 도서 정보 활용하기

이제 Firestore에 저장된 도서 정보를 활용하여 앱에서 다양한 기능을 구현할 수 있습니다. 도서의 설명, 저자, 출판사, 이미지 등을 가져와 화면에 표시할 수 있습니다.

위와 같이 Aladin API를 활용하여 Flutter 앱에서 도서 정보를 가져오고 활용하는 방법에 대해 알아보았습니다. 앱에서 도서 정보를 효과적으로 활용하여 사용자에게 더 나은 서비스를 제공할 수 있습니다.

profile
컴공 대학생이 군대에서 작성하는 앱 개발 블로그

0개의 댓글