freee API를 사용하여 영수증 이미지를 함께 업로드
소개
만나서 반갑습니다, 특정 비영리 활동 법인 뉴 크리에이터 오르그에서 이사장을하고 있습니다, yoshi (@ Yoshi 1125 Hisa)입니다.
이사장이라고 해도, 적은 멤버로 운영하고 있는 NPO 법인이므로, 경비 관리로부터 엔지니어링 등 폭넓은 업무를 실시하고 있습니다.
자, 본제에 들어갑니다.
freee API를 사용해 거래 데이터를 정리해 등록한다~ 같은 기사는 잘 보입니다만, 영수증을 정리해! 라는 것은 별로 없었던 것 같은 (간과할지도 모릅니다만) 생각합니다.
영수증의 파일이 정리되어 있는 폴더를 API를 사용해 정리해 업로드할 수 있으면 좋겠다~, 라고 생각했으므로, 이번은 freee API를 사용해 영수증의 화상 데이터를 정리해 업한다고 하는 것을 목표에 freee API와 node.js를 사용하여 바삭 바삭한 코드를 작성해 보았습니다.
환경
바로 써보자
요청 방법 확인
회계 API 참조 Version: 2020-06-15에서 요청 방법을 확인합니다.
이번에는 영수증 업로드를 원하므로 끝점은
/api/1/receipts
네요.
또한,
request body에는 이러한 요소가 필요합니다.
company_id
는 사업장 ID, API 토큰을 취득할 때 확인할 수 있는 것을.curl 등으로 API에 액세스하는 방법은
curl -X POST "https://api.freee.co.jp/api/1/receipts" -H "X-Api-Version: 2020-06-15" -H "accept: application/json" -H "Authorization: Bearer <API_TOKEN>" -H "Content-Type: multipart/form-data" -F "company_id=<COMPANY_ID>" -F "description=<FILE_NAME>" -F "issue_date=" -F "receipt=@<FILE_NAME>;type=image/<FILE_TYPE>"
이런 형태가 될 것입니다.
주의해야 할 곳으로 API 버전이 새로워지면 요청 헤더에
X-Api-Version: 2020-06-15
를 추가해야 합니다.구현
1) 작업을 위한 디렉토리 준비
$ mkdir freee-receipt-uploader
$ cd freee-receipt-uploader
2) yarn에서 필요한 패키지 설치
$ yarn init
그 후,
$ yarn add form-data axios dotenv
에서 패키지를 다운로드하십시오.
각각
위와 같이 할 수 있는 패키지입니다.
코드 작성
index.js
const fs = require("fs");
const path = require("path");
const FormData = require("form-data");
const axios = require("axios");
require("dotenv").config();
const auth_token = process.env.AUTH_TOKEN;
const company_id = process.env.COMPANY_ID;
const dirPath = path.resolve(__dirname, "img");
const list = fs.readdirSync(dirPath);
console.log(list)
const URL = `https://api.freee.co.jp/api/1/receipts`;
for (let i = 0; i < list.length; i++){
const imagePath = './img/' + list[i]
const file = fs.createReadStream(imagePath);
const form = new FormData();
form.append("receipt", file);
form.append("company_id", company_id);
const config = {
headers: {
accept: "application/json",
"X-Api-Version": "2020-06-15",
Authorization: "Bearer " + auth_token,
"Content-Type": "multipart/form-data",
...form.getHeaders(),
},
};
axios
.post(URL, form, config)
.then((res) => console.log(res.data))
.catch((err) => console.log(err));
}
이렇게 설명합니다. 또, 이것에 대응하는
.env
(을)를 써야 합니다만, 형식은 이러한 형태입니다..env
COMPANY_ID=XXX
AUTH_TOKEN=XXXX
AUTH_TOKEN
는 응용 프로그램을 제작 한 후맨 아래에 나오는 URL을 연 후 인가하는 액세스 토큰입니다.
COMPANY_ID
는 shell입니다.curl -i -X GET \
-H "Authorization:Bearer (さっきのアクセストークン)" \
-H "Content-Type:application/json" \
'https://api.freee.co.jp/api/1/companies'
를 실행했을 때 나오는 ID입니다.
실행하다
이것을 실행해 아래와 같이
confirmed
가 되면 완료입니다!{
receipt: {
id: XXXXXXXX,
status: 'confirmed',
description: null,
issue_date: '2020-12-25',
created_at: '2020-12-25T00:30:09+09:00',
mime_type: 'image/jpeg',
origin: 'public_api',
file_src: 'https://secure.freee.co.jp/api/p/receipts/revisions/XXXXXXX/download',
user: { id: XXXXXXX, email: '[email protected]', display_name: null }
}
}
무사히 영수증이 등록되었습니다!
주의
getHeaders
함수로 header를 보내기 위해 생성합니다 FormData
에 추가 할 때 요소 이름을 반드시 receipt
로 지정해야합니다 결론
이런 식으로 폴더의 이미지를 함께 freeee에 업로드 할 수있었습니다.
모은 영수증의 데이터도 커맨드 하나로 편하게 업로드할 수 있으므로 필요한지 모르겠지만, 꼭 사용해 보세요.
끝까지 읽어 주셔서 감사합니다.
리포지토리
Reference
이 문제에 관하여(freee API를 사용하여 영수증 이미지를 함께 업로드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yoshi1125hisa/items/0a158c5eb69b284f3b1c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)