Pythonからfreee APIを叩いてファイルボックスに証憑画像をアップロードする処理を書いていた時に、微妙に躓いたのでメモを残します。
freeeのAPIドキュメントはこちら
ローカルファイルから画像を取得する場合
import requests
# freeeの事業所ID
company_id = 123456789
# OAuth認証で取得したfreeeのアクセストークン
access_token = "**************************************************"
# ローカルファイルから画像を取得する
with open("local_image_path", "rb") as f:
binary_image = f.read()
headers = {
"accept": "application/json",
"X-Api-Version": "2020-06-15",
"Authorization": f"Bearer {access_token}",
}
files = {"receipt": binary_image}
data = {"company_id": company_id}
response = requests.post(
"https://api.freee.co.jp/api/1/receipts",
headers=headers,
files=files,
data=data,
)
binary_image
はバイナリ形式の画像データなら何でも良いので、他の方法で取得したものでも大丈夫です。以下は別例になります。
ローカルファイルから画像を取得する場合(PIL版)
import io
from PIL import Image
# ローカルファイルから画像を取得する(PIL版)
image = Image.open("local_image_path")
output = io.BytesIO()
image.save(output, format="JPEG")
binary_image = output.getvalue()
URLから画像を取得する場合
from urllib.request import urlopen
# URLから画像を取得する
url = "https://sample_image.jpg"
binary_image = urlopen(url).read()
S3から画像を取得する場合
import boto3
# S3から画像を取得する
s3 = boto3.resource("s3", region_name="ap-northeast-1")
bucket = s3.Bucket("your_bucket_name")
object = bucket.Object("your_object_key")
binary_image = object.get()["Body"].read()