인프런 커뮤니티 질문&답변

MinwooNa님의 프로필 이미지
MinwooNa

작성한 질문수

[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

미세먼지 데이터를 불러오는 과정에서 이슈가 있어 질문 드립니다.

해결된 질문

작성

·

273

0

안녕하세요.

stat_repository.dart 파일 내부에서 API를 불러오는 과정에 이슈가 있어 질문 드립니다.

 

import 'package:dio/dio.dart';
import 'package:dusty_dust/const/data.dart';
import 'package:dusty_dust/model/stat_model.dart';

class StatRepository {
  static Future<List<StatModel>> fetchData() async {
    // final response = await Dio().get(
    //   'http://apis.data.go.kr/B552584/ArpltnStatsSvc/getCtprvnMesureLIst',
    //   queryParameters: {
    //     'serviceKey': serviceKey,
    //     'returnType': 'json',
    //     'numOfRows': 30,
    //     'pageNo': 1,
    //     'itemCode': 'PM10',
    //     'dataGubun': 'HOUR',
    //     'searchCondition': 'WEEK',
    //   },
    // );
    final response = await Dio().get(
      'http://apis.data.go.kr/B552584/ArpltnStatsSvc/getCtprvnMesureLIst'
      '?serviceKey=$serviceKey'
      '&returnType=json'
      '&numOfRows=30'
      '&pageNo=1'
      '&itemCode=PM10'
      '&dataGubun=HOUR'
      '&searchCondition=WEEK',
    );

    return response.data['response']['body']['items']
        .map<StatModel>(
          (item) => StatModel.fromJson(json: item),
        )
        .toList();
  }
}

 

위 코드에서 주석을 처리한 부분대로 API를 호출하면(기존 강의 내용) 다음과 같은 에러가(서비스키가 등록되지 않았다는 내용) 나오고

<OpenAPI_ServiceResponse>
	<cmmMsgHeader>
		<errMsg>SERVICE ERROR</errMsg>
		<returnAuthMsg>SERVICE_KEY_IS_NOT_REGISTERED_ERROR</returnAuthMsg>
		<returnReasonCode>30</returnReasonCode>
	</cmmMsgHeader>
</OpenAPI_ServiceResponse>

 

위 코드에서 엔드포인트 부분에 직접 파라미터를 적으면 정상적으로 데이터가 출력됩니다.

 

관련 이슈들을 구글링 해보니 serviceKey를 받아오는 과정에서 인코딩 과정이 별도로 필요하다는데 만약 내부 설정을 변경 한다면 어떻게 해야 할까요?

답변 2

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

API에서 제공해주는 인코딩된 키를 사용해보셨나요?

감사합니다!

0

MinwooNa님의 프로필 이미지
MinwooNa
질문자

참고로 현재 dio 버전은 5.3.3 입니다!
dio: ^5.3.3

MinwooNa님의 프로필 이미지
MinwooNa

작성한 질문수

질문하기