Django

JSON 파싱

JSON 파싱

  • 저번 토픽에서는 cURL을 이용하여 닉네임과 프로필 사진을 얻어올 수 있었습니다.
  • 그 전에 'access_token'을 사용하였는데, 이 'access_token'은 JSON 데이터 형태로 되어 있었습니다.
    cURL에서 활용하기 위해 단지 그 값을 복사하였지만 앞으로는 코드로 구현해야되는데 어떻게 해야될까요?

 

  • 물론 한번 'access_token' 값을 복사한 뒤에 코드 상에서 붙여넣기 한 후 구현할 수는 있습니다.
  • 하지만 이 'access_token'은 카카오 정책에 의해 12시간 또는 24시간 동안만 유효하다고 나와 있습니다.
    'refresh token'을 이용하여 'access_token'을 갱신할 수 있다고도 나와있지만 어쨌거나 'access_token' 값이 변경됩니다.

 

 

  • 이전에 테스트를 하시다보면 'code' 값을 읽어올 때 처음 접근할 때에는 'access_token'을 얻어올 수 있었지만, 두 번째 접근부터는 'invalid_'와 같은 문구가 뜨면서 접근이 제한되는 것을 보신 적이 있었습니다.
    이는 카카오 측에서 보안을 위해 코드 값을 얻는 것을 한번만 접근하도록 제한해둔 것이라고 생각됩니다.
    하지만 'access_token' 값을 얻게 되면 'code' 값을 모르더라도 사용자의 닉네임과 프로필 사진을 12시간 또는 24시간 내에는 얻을 수 있고 여러번 접근하더라도 이는 제한이 걸려있지 않은 것 같습니다.
     
  • 어쨌든 우리는 댓글을 입력하면 로그인 과정을 거쳐 유효한 'code' 값을 읽어온 뒤 최종 uri로 접근할 것이고 그렇게 되면 'access_token' 값은 계속 변화하게 됩니다.
    이 말은 JSON 데이터 형태로 표시된 값인 'access_token' 값을 자동으로 불러 들여야 된다는 의미입니다.
     
  • 이번 토픽에서는 JSON 데이터를 파싱하는 방법에 대해 알아보도록 합니다.

 

 

 

 

 

파싱(parsing)이란?

  • 위에서 파싱이라는 용어를 사용했는데 파싱이 무엇인지에 대해 간단하게 설명하고 넘어가도록 하겠습니다.

 

 

언어학에서 구문 분석(構文分析, 문화어: 구문해석, 문장해석)은 문장을 그것을 이루고 있는 구성 성분으로 분해하고 그들 사이의 위계 관계를 분석하여 문장의 구조를 결정하는 것을 말한다.
 
컴퓨터 과학에서 파싱((syntactic) parsing)은 일련의 문자열을 의미있는 토큰(token)으로 분해하고 이들로 이루어진 파스 트리(parse tree)를 만드는 과정을 말한다.

 

 

  • 위키백과에 나와있는 파싱의 정의입니다.
  • 즉, 간단하게 말하면 컴퓨터 분야에서 JSON, XML, HTML 등으로 구성된 데이터를 분석하여 내가 원하는 부분만 추출하고자 하는 것을 말합니다.
     
  • 참고)
    https://ko.wikipedia.org/wiki/구문_분석
    https://www.scienceall.com/파싱parsing/

     
  • 파싱을 잘 활용하면 어렵지 않은 작업이지만 굉장히 효율적인 기능을 구현할 수 있게 되므로 파싱에 대해서는 여기에 서술된 것 외에 스스로 공부하는 것을 추천합니다.

     
  • 어쨌든 이번 토픽에서 우리는 JSON 데이터를 파싱하여 'access_token'을 얻기 위해 간단한 파싱 작업을 할 것입니다.

 

 

 

requests 패키지 

  • 파이썬에서 JSON 데이터를 파싱하는 방법은 여러가지가 있습니다.
    저는 그 중에서 'requests'라는 패키지를 설치하여 활용해보도록 하겠습니다.
  • 터미널을 열고 다음 명령어를 입력합니다.
pip install requests

 

 

  • 다음과 같이 설치됩니다.

 

  • [views.py]를 열고 'requests'를 추가로 import합니다.
import requests

 

 

 

 

 

oauth() 수정

  • import한 'requests' 패키지를 이용하여 json 데이터를 파싱하는 코드를 다음과 같이 작성합니다.
access_token_request_uri_data = requests.get(access_token_request_uri)
json_data = access_token_request_uri_data.json()
access_token = json_data['access_token']
print(access_token)

 

  • 'requests'의 'get()' 함수를 통해 URI의 주소를 가져와서 데이터 형태로 변환합니다.
    => 'access_token_request_uri_data'
  • 그 데이터를 json() 함수를 통해 파이썬의 딕셔너리 형태로 변환합니다. => 'json_data'
  • 딕셔너리에서 'access_token' 값을 가져오고 'access_token' 변수에 대입합니다.

 

 

 

 

적용 확인

  • 이제 서버를 구동하고 정상적으로 'access_token' 값을 출력하는지 확인해봅니다.

 

  • 맨 밑에 'access_token' 값이 print() 되어 나오는 것을 볼 수 있습니다.

 

 

 

 

 

댓글

댓글 본문
  1. Vanillatic
    requests.get 인데 request.get 적어서 또 삽질...ㅠㅠ