• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    해결됨

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

23.11.22 13:30 작성 조회수 204

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

질문자

2023.11.22

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