800 line이 넘는 JSON 코드를 프론트로 보내줄 수 없다…특정 데이터(memo, date, cost)만 뽑아내자
1번 문제의 경우 해결을 위해 공식 문서를 찾아봤지만 못 찾았다.
결국 NAVER CLOUD PLATFORM 고객센터에 전화해서 답변을 받았다.
OCR API는 네이버에서 제공하기 때문에 사용자가 response를 수정 하지 못 하지만, Json Parsing을 찾아보시길 추천드립니다.”
Json Parsing으로 코드 중 일부만 프론트로 넘겨주는 방법을 찾았다.
ocr/views.py에 아래 코드를 추가했다. 효율적인 방법은 아니지만 효과는 확실했다..!
images = response_body['images']
images_receipt = images[0].get("receipt")
receipt_memo = images_receipt['result']['storeInfo']['name']['text']
receipt_date = images_receipt['result']['paymentInfo']['date']['text']
receipt_price = images_receipt['result']['totalPrice']['price']['text']
```python
@api_view(['POST'])
def ocr_receipt(request):
api_url = OCR_API_URL
secret_key = OCR_SECRET_KEY
image_file = request.data['url']
request_json = {
'images': [
{
'format': 'jpg',
'name': 'demo'
}
],
'requestId': str(uuid.uuid4()),
'version': 'V2',
'timestamp': int(round(time.time() * 1000))
}
payload = {'message': json.dumps(request_json).encode('UTF-8')}
files = [
('file', open(image_file, 'rb'))
]
headers = {
'X-OCR-SECRET': secret_key
}
response = requests.request("POST", api_url, headers=headers, data=payload, files=files)
response_body = json.loads(response.text)
images = response_body['images']
images_receipt = images[0].get("receipt")
receipt_memo = images_receipt['result']['storeInfo']['name']['text']
receipt_date = images_receipt['result']['paymentInfo']['date']['text']
receipt_price = images_receipt['result']['totalPrice']['price']['text']
return JsonResponse({"memo": receipt_memo
, "date": receipt_date
, "cost": receipt_price},
safe=False, status=status.HTTP_200_OK)
```
postman에서 테스트 해보니 원하는 값만 나왔다.