Tài Liệu API

Trích xuất metadata từ tệp bằng API đơn giản và mạnh mẽ của chúng tôi. Bắt đầu với khóa API của bạn và bắt đầu phân tích tệp theo chương trình.

Xác Thực

Tất cả các yêu cầu API đều yêu cầu khóa API. Bạn có thể cung cấp nó theo hai cách:

1. Trong tiêu đề yêu cầu:

X-API-Key: YOUR_API_KEY_HERE

2. Làm tham số truy vấn:

?key=YOUR_API_KEY_HERE
Yêu Cầu Khóa API Xem Ví Dụ Mã

Trích Xuất Metadata

POST https://exiftools.com/api/v1/extract

Trích xuất metadata từ tệp bằng cách tải tệp trực tiếp hoặc URL. Kết quả được trả về ngay lập tức (xử lý đồng bộ). Endpoint kiểm tra cũng có sẵn để xác minh trạng thái nếu cần.

Tham Số Yêu Cầu

{
  "file": "binary_file_data", // Required if url not provided
  "url": "https://example.com/image.jpg", // Required if file not provided. Can be passed as POST body or query string parameter
}

Phản Hồi Mẫu

{
  "success": true,
  "status": "completed",
  "fileName": "image.jpg",
  "uuid": "123e4567-e89b-12d3-a456-426614174000"
  // ... 
  "metadata": {
    "exif": {
      "Make": "Canon",
      "Model": "EOS R5",
      "DateTimeOriginal": "2024:03:15 10:30:00",
      "ExposureTime": "1/1000",
      "FNumber": "2.8",
      "ISO": "100"
    },
    "iptc": {
      "Creator": "John Doe",
      "Copyright": "© 2024"
    }
    // ... more metadata
  }
}

Phản Hồi Lỗi

400 Bad Request

{
  "success": false,
  "error": "Invalid request parameters"
}

401 Unauthorized

{
  "success": false,
  "error": "Invalid API key"
}

500 Internal Server Error

{
  "success": false,
  "error": "An error occurred while processing your request"
}

Nhận Kết Quả Trích Xuất

GET https://exiftools.com/api/v1/extract/{uuid}

Truy xuất kết quả trích xuất metadata cho UUID cụ thể. Sử dụng endpoint này để kiểm tra trạng thái và nhận kết quả sau khi gửi tệp hoặc URL để xử lý. Khóa API là tùy chọn - nếu được cung cấp, kết quả được lọc theo các trích xuất của người dùng đã xác thực.

Tham Số Yêu Cầu

{
  "uuid": "required", // The UUID returned from the extract endpoint
  "X-API-Key": "optional" // API key in header, or use ?key=YOUR_API_KEY
}

Phản Hồi Mẫu (Hoàn Thành)

{
  "success": true,
  "status": "completed"
  "filename": "image.jpg",
  // ... 
  "metadata": {
    "exif": {
      "Make": "Canon",
      "Model": "EOS R5",
      "DateTimeOriginal": "2024:03:15 10:30:00",
      "ExposureTime": "1/1000",
      "FNumber": "2.8",
      "ISO": "100"
    },
    "iptc": {
      "Creator": "John Doe",
      "Copyright": "© 2024"
    }
    // ... more metadata
  },
}

Phản Hồi Lỗi

401 Unauthorized

{
  "success": false,
  "error": "Invalid API key"
}

Chỉ trả về khi khóa API không hợp lệ được cung cấp

404 Not Found

{
  "success": false,
  "error": "No extraction found with the given UUID."
}

Xóa Siêu Dữ Liệu

POST https://exiftools.com/api/v1/remove

Xóa tất cả siêu dữ liệu khỏi tệp bao gồm dữ liệu EXIF, vị trí GPS, IPTC, XMP và các thông tin nhạy cảm khác. Tải lên tệp trực tiếp hoặc cung cấp URL để xử lý. Nhận phiên bản đã làm sạch không có siêu dữ liệu nhúng. Tệp đã làm sạch có sẵn để tải xuống qua URL được trả về.

Tham Số Yêu Cầu

{
  "file": "binary_file_data", // Required if url not provided
  "url": "https://example.com/image.jpg" // Required if file not provided. Can be passed as POST body or query string parameter
}

Phản Hồi Mẫu

{
  "success": true,
  "status": "completed",
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "downloadUrl": "https://exiftools.com/download-cleaned/123e4567-e89b-12d3-a456-426614174000"
}

DownloadUrl cung cấp liên kết trực tiếp để tải xuống tệp đã làm sạch với tất cả siêu dữ liệu đã bị xóa. Tệp sẽ có sẵn để tải xuống trong 24 giờ.

Phản Hồi Lỗi

500 Internal Server Error

{
  "success": false,
  "error": "An error occurred while processing your request"
}

Ví Dụ Mã

# File Upload - Using header
curl -X POST https://exiftools.com/api/v1/extract \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-F "[email protected]"

# File Upload - Using query parameter
curl -X POST "https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE" \
-F "[email protected]"

# URL Processing - Using header
curl -X POST https://exiftools.com/api/v1/extract \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/image.jpg"}'

# URL Processing - Using query parameter
curl -X POST "https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/image.jpg"}'

# Get results by UUID (no API key required)
curl -X GET https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000

# Response (immediate results)
{
  "success": true,
  "status": "completed",
  "fileName": "image.jpg",
  "uuid": "123e4567-e89b-12d3-a456-426614174000"
  # ...
  "metadata": {
    "exif": {
      "Make": "Canon",
      "Model": "EOS R5",
      "DateTimeOriginal": "2024:03:15 10:30:00",
      "ExposureTime": "1/1000",
      "FNumber": "2.8",
      "ISO": "100"
    },
    "File" : {
      "Name" : "image.jpg",
      "Size" : 123456,
      "Type" : "image/jpeg"
    }
    # ... more metadata
  }
}

# Remove Metadata - File Upload - Using header
curl -X POST https://exiftools.com/api/v1/remove \
  -H "X-API-Key: YOUR_API_KEY_HERE" \
  -F "[email protected]"

# Remove Metadata - File Upload - Using query parameter
curl -X POST "https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE" \
  -F "[email protected]"

# Remove Metadata - URL Processing - Using header
curl -X POST https://exiftools.com/api/v1/remove \
  -H "X-API-Key: YOUR_API_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/image.jpg"}'

# Remove Metadata - URL Processing - Using query parameter
curl -X POST "https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/image.jpg"}'

# Response
{
  "success": true,
  "status": "completed",
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "downloadUrl": "https://exiftools.com/download-cleaned/123e4567-e89b-12d3-a456-426614174000"
}
import requests

# File Upload - Using header
url = "https://exiftools.com/api/v1/extract"
headers = {
    "X-API-Key": "YOUR_API_KEY_HERE"
}
files = {
    "file": open("image.jpg", "rb")
}
response = requests.post(url, headers=headers, files=files)

# File Upload - Using query parameter
url = "https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE"
files = {
    "file": open("image.jpg", "rb")
}
response = requests.post(url, files=files)

# URL Processing - Using header
url = "https://exiftools.com/api/v1/extract"
headers = {
    "X-API-Key": "YOUR_API_KEY_HERE",
    "Content-Type": "application/json"
}
data = {
    "url": "https://example.com/image.jpg"
}
response = requests.post(url, headers=headers, json=data)

# URL Processing - Using query parameter
url = "https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE"
headers = {
    "Content-Type": "application/json"
}
data = {
    "url": "https://example.com/image.jpg"
}
response = requests.post(url, headers=headers, json=data)

# Get results by UUID (no API key required)
response = requests.get('https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000')
metadata = response.json()

# Remove Metadata - File Upload - Using header
url = "https://exiftools.com/api/v1/remove"
headers = {
    "X-API-Key": "YOUR_API_KEY_HERE"
}
files = {
    "file": open("image.jpg", "rb")
}
response = requests.post(url, headers=headers, files=files)
result = response.json()
# Download the cleaned file
download_url = result['downloadUrl']
cleaned_file = requests.get(download_url)
with open("image_cleaned.jpg", "wb") as f:
    f.write(cleaned_file.content)

# Remove Metadata - File Upload - Using query parameter
url = "https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE"
files = {
    "file": open("image.jpg", "rb")
}
response = requests.post(url, files=files)
result = response.json()

# Remove Metadata - URL Processing - Using header
url = "https://exiftools.com/api/v1/remove"
headers = {
    "X-API-Key": "YOUR_API_KEY_HERE",
    "Content-Type": "application/json"
}
data = {
    "url": "https://example.com/image.jpg"
}
response = requests.post(url, headers=headers, json=data)
result = response.json()

# Remove Metadata - URL Processing - Using query parameter
url = "https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE"
headers = {
    "Content-Type": "application/json"
}
data = {
    "url": "https://example.com/image.jpg"
}
response = requests.post(url, headers=headers, json=data)
result = response.json()
// File Upload - Using header
const formData = new FormData();
formData.append('file', fileInput.files[0]);

fetch('https://exiftools.com/api/v1/extract', {
    method: 'POST',
    headers: {
        'X-API-Key': 'YOUR_API_KEY_HERE'
    },
    body: formData
})
.then(response => response.json())
.then(data => console.log(data));

// File Upload - Using query parameter
const formData2 = new FormData();
formData2.append('file', fileInput.files[0]);

fetch('https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE', {
    method: 'POST',
    body: formData2
})
.then(response => response.json())
.then(data => console.log(data));

// URL Processing - Using header
fetch('https://exiftools.com/api/v1/extract', {
    method: 'POST',
    headers: {
        'X-API-Key': 'YOUR_API_KEY_HERE',
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        url: 'https://example.com/image.jpg'
    })
})
.then(response => response.json())
.then(data => console.log(data));

// URL Processing - Using query parameter
fetch('https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        url: 'https://example.com/image.jpg'
    })
})
.then(response => response.json())
.then(data => console.log(data));

// Get results by UUID (no API key required)
fetch('https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000')
.then(response => response.json())
.then(data => console.log(data));

// Remove Metadata - File Upload - Using header
const removeFormData = new FormData();
removeFormData.append('file', fileInput.files[0]);

fetch('https://exiftools.com/api/v1/remove', {
    method: 'POST',
    headers: {
        'X-API-Key': 'YOUR_API_KEY_HERE'
    },
    body: removeFormData
})
.then(response => response.json())
.then(data => {
    // Download the cleaned file
    window.location.href = data.downloadUrl;
});

// Remove Metadata - File Upload - Using query parameter
const removeFormData2 = new FormData();
removeFormData2.append('file', fileInput.files[0]);

fetch('https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE', {
    method: 'POST',
    body: removeFormData2
})
.then(response => response.json())
.then(data => console.log(data));

// Remove Metadata - URL Processing - Using header
fetch('https://exiftools.com/api/v1/remove', {
    method: 'POST',
    headers: {
        'X-API-Key': 'YOUR_API_KEY_HERE',
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        url: 'https://example.com/image.jpg'
    })
})
.then(response => response.json())
.then(data => {
    window.location.href = data.downloadUrl;
});

// Remove Metadata - URL Processing - Using query parameter
fetch('https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        url: 'https://example.com/image.jpg'
    })
})
.then(response => response.json())
.then(data => console.log(data));
// File Upload - Using header
$curl = curl_init();
$file = new CURLFile('/path/to/image.jpg', 'image/jpeg', 'image.jpg');

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://exiftools.com/api/v1/extract',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => [
        'file' => $file
    ],
    CURLOPT_HTTPHEADER => [
        'X-API-Key: YOUR_API_KEY_HERE'
    ]
]);

$response = curl_exec($curl);
$metadata = json_decode($response, true);
curl_close($curl);

// File Upload - Using query parameter
$curl = curl_init();
$file = new CURLFile('/path/to/image.jpg', 'image/jpeg', 'image.jpg');

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => [
        'file' => $file
    ]
]);

$response = curl_exec($curl);
$metadata = json_decode($response, true);
curl_close($curl);

// URL Processing - Using header
$curl = curl_init();
$data = json_encode(['url' => 'https://example.com/image.jpg']);

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://exiftools.com/api/v1/extract',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $data,
    CURLOPT_HTTPHEADER => [
        'X-API-Key: YOUR_API_KEY_HERE',
        'Content-Type: application/json'
    ]
]);

$response = curl_exec($curl);
$metadata = json_decode($response, true);
curl_close($curl);

// URL Processing - Using query parameter
$curl = curl_init();
$data = json_encode(['url' => 'https://example.com/image.jpg']);

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $data,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json'
    ]
]);

$response = curl_exec($curl);
$metadata = json_decode($response, true);
curl_close($curl);

// Get results by UUID (no API key required)
$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_URL => 'https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPGET => true
]);

$response = curl_exec($curl);
$metadata = json_decode($response, true);
curl_close($curl);

// Remove Metadata - File Upload - Using header
$curl = curl_init();
$file = new CURLFile('/path/to/image.jpg', 'image/jpeg', 'image.jpg');

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://exiftools.com/api/v1/remove',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => [
        'file' => $file
    ],
    CURLOPT_HTTPHEADER => [
        'X-API-Key: YOUR_API_KEY_HERE'
    ]
]);

$response = curl_exec($curl);
$result = json_decode($response, true);
curl_close($curl);

// Download the cleaned file
$downloadUrl = $result['downloadUrl'];
$cleanedContent = file_get_contents($downloadUrl);
file_put_contents('image_cleaned.jpg', $cleanedContent);

// Remove Metadata - File Upload - Using query parameter
$curl = curl_init();
$file = new CURLFile('/path/to/image.jpg', 'image/jpeg', 'image.jpg');

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => [
        'file' => $file
    ]
]);

$response = curl_exec($curl);
$result = json_decode($response, true);
curl_close($curl);

// Remove Metadata - URL Processing - Using header
$curl = curl_init();
$data = json_encode(['url' => 'https://example.com/image.jpg']);

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://exiftools.com/api/v1/remove',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $data,
    CURLOPT_HTTPHEADER => [
        'X-API-Key: YOUR_API_KEY_HERE',
        'Content-Type: application/json'
    ]
]);

$response = curl_exec($curl);
$result = json_decode($response, true);
curl_close($curl);

// Remove Metadata - URL Processing - Using query parameter
$curl = curl_init();
$data = json_encode(['url' => 'https://example.com/image.jpg']);

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $data,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json'
    ]
]);

$response = curl_exec($curl);
$result = json_decode($response, true);
curl_close($curl);
require 'net/http'
require 'json'
require 'uri'

# File Upload - Using header
uri = URI('https://exiftools.com/api/v1/extract')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request['X-API-Key'] = 'YOUR_API_KEY_HERE'

# Create multipart form data
form_data = [['file', File.open('image.jpg', 'rb')]]
request.set_form(form_data, 'multipart/form-data')

response = http.request(request)
metadata = JSON.parse(response.body)

# File Upload - Using query parameter
uri = URI('https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
form_data = [['file', File.open('image.jpg', 'rb')]]
request.set_form(form_data, 'multipart/form-data')

response = http.request(request)
metadata = JSON.parse(response.body)

# URL Processing - Using header
uri = URI('https://exiftools.com/api/v1/extract')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request['X-API-Key'] = 'YOUR_API_KEY_HERE'
request['Content-Type'] = 'application/json'
request.body = { url: 'https://example.com/image.jpg' }.to_json

response = http.request(request)
metadata = JSON.parse(response.body)

# URL Processing - Using query parameter
uri = URI('https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request.body = { url: 'https://example.com/image.jpg' }.to_json

response = http.request(request)
metadata = JSON.parse(response.body)

# Alternative using HTTParty gem (if available)
# require 'httparty'
# 
# # File Upload
# response = HTTParty.post('https://exiftools.com/api/v1/extract',
#   headers: { 'X-API-Key' => 'YOUR_API_KEY_HERE' },
#   body: { file: File.open('image.jpg', 'rb') }
# )
# 
# # URL Processing
# response = HTTParty.post('https://exiftools.com/api/v1/extract',
#   headers: { 
#     'X-API-Key' => 'YOUR_API_KEY_HERE',
#     'Content-Type' => 'application/json'
#   },
#   body: { url: 'https://example.com/image.jpg' }.to_json
# )

# Get results by UUID (no API key required)
uri = URI('https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Get.new(uri)
response = http.request(request)
metadata = JSON.parse(response.body)

# Remove Metadata - File Upload - Using header
uri = URI('https://exiftools.com/api/v1/remove')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request['X-API-Key'] = 'YOUR_API_KEY_HERE'

# Create multipart form data
form_data = [['file', File.open('image.jpg', 'rb')]]
request.set_form(form_data, 'multipart/form-data')

response = http.request(request)
result = JSON.parse(response.body)

# Download the cleaned file
download_uri = URI(result['downloadUrl'])
cleaned_file = Net::HTTP.get(download_uri)
File.write('image_cleaned.jpg', cleaned_file)

# Remove Metadata - File Upload - Using query parameter
uri = URI('https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
form_data = [['file', File.open('image.jpg', 'rb')]]
request.set_form(form_data, 'multipart/form-data')

response = http.request(request)
result = JSON.parse(response.body)

# Remove Metadata - URL Processing - Using header
uri = URI('https://exiftools.com/api/v1/remove')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request['X-API-Key'] = 'YOUR_API_KEY_HERE'
request['Content-Type'] = 'application/json'
request.body = { url: 'https://example.com/image.jpg' }.to_json

response = http.request(request)
result = JSON.parse(response.body)

# Remove Metadata - URL Processing - Using query parameter
uri = URI('https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request.body = { url: 'https://example.com/image.jpg' }.to_json

response = http.request(request)
result = JSON.parse(response.body)