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

StudipU·2024년 3월 10일
0

Kakao API 소개 ✨

주요 기능과 코드 분석 🎭

1. Kakao API 키 발급

우선 Kakao API를 사용하기 위해서는 API 키가 필요합니다. Kakao 개발자 센터에서 API 키를 발급받아야 합니다. 발급받은 API 키를 사용하여 API에 접근할 수 있습니다.

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

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 형식으로 반환되며, 이를 파싱하여 필요한 정보를 추출한 뒤, FirestorebookInfos 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를 통해 도서 정보를 효과적으로 활용하여 사용자에게 더 나은 서비스를 제공할 수 있습니다.

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

0개의 댓글