엑셀 파라미터 파일 업로드 V4

PUT www.hashscraper.com/v4/api/schedules/{schedule_id}/excel_param Content-Type: multipart/form-data

크롤링 봇에 엑셀 파라미터 파일을 업로드합니다.

multipart/form-data로 엑셀 파일을 업로드합니다. 업로드된 파일이 새 활성 파라미터 파일이 되며, 같은 크롤링 봇의 기존 활성 파일은 자동으로 비활성화됩니다(트랜잭션 처리).

허용 확장자는 .xlsx·.xls이며, 확장자 외에 파일 첫 바이트의 매직 시그니처도 검증합니다(xlsx=ZIP, xls=OLE2). 파일 파트의 Content-Type 값은 무시되므로 임의 MIME으로 보내도 됩니다(예: application/octet-stream). 단, 요청 전체는 multipart/form-data여야 합니다.

요청 파라미터

  • Authorization: Header
    해시스크래퍼 API 키. Bearer <api_key> 형식으로 전달합니다.
    예시 Bearer YOUR_API_KEY
  • schedule_id: String (path)
    업로드 대상 크롤링 봇의 ID. URL 경로의 {schedule_id}로 전달합니다. 봇 ID는 봇 상세 페이지의 작업 → 봇 ID 복사하기에서 복사할 수 있습니다.
    예시 8f3a7c1e9b5d24f6
  • excel_file: File (multipart)
    업로드할 엑셀 파일. multipart/form-data의 excel_file 필드로 전송합니다.
    허용값 .xlsx, .xls

응답 필드

  • result: String
    요청 처리 결과.
    허용값 success, error
  • version: String
    API 버전.
    예시 v4
  • request_id: String
    요청 추적용 ID.
    예시 req_5a8c1f1c-...
  • elapsed_sec: Float
    응답 생성에 걸린 시간(초 단위 Float).
    예시 0.0421
  • data: Object
    업로드 결과.
    • id: String
      크롤링 봇의 ID(echo).
    • file_name: String
      업로드된 파일의 원본 파일명.
    • detected_type: String
      검증을 통과한 파일 타입. xlsx 또는 xls.
      허용값 xlsx, xls

에러 응답

  • MISSING_API_KEY
    Authorization 헤더가 없거나 형식이 올바르지 않습니다. Authorization: Bearer <api_key> 형태로 전달하세요. (HTTP 401)
    {
      "result": "error",
      "version": "v4",
      "request_id": "req_5a8c1f1c-...",
      "code": "MISSING_API_KEY",
      "message": "API key is missing.",
      "elapsed_sec": 0.0008,
      "details": { "hint": "Send `Authorization: Bearer <api_key>` header." }
    }
  • INVALID_API_KEY
    전달된 API 키와 일치하는 사용자가 없습니다. (HTTP 401)
    {
      "result": "error",
      "version": "v4",
      "request_id": "req_5a8c1f1c-...",
      "code": "INVALID_API_KEY",
      "message": "API key is invalid.",
      "elapsed_sec": 0.0011
    }
  • SCHEDULE_NOT_FOUND
    전달된 ID로 크롤링 봇을 찾을 수 없거나 접근 권한이 없습니다. (HTTP 404)
    {
      "result": "error",
      "version": "v4",
      "request_id": "req_5a8c1f1c-...",
      "code": "SCHEDULE_NOT_FOUND",
      "message": "Schedule not found.",
      "elapsed_sec": 0.0021,
      "details": { "resource": "schedule", "id": "8f3a7c1e9b5d24f6" }
    }
  • MISSING_PARAM (excel_file)
    excel_file 필드가 비어 있습니다. (HTTP 400)
    {
      "result": "error",
      "version": "v4",
      "request_id": "req_5a8c1f1c-...",
      "code": "MISSING_PARAM",
      "message": "Required parameter is missing.",
      "elapsed_sec": 0.0010,
      "details": { "param_name": "excel_file" }
    }
  • INVALID_PARAM (excel_file)
    확장자가 허용 목록(.xlsx·.xls)이 아니거나 파일 매직 시그니처가 일치하지 않습니다. (HTTP 400)
    {
      "result": "error",
      "version": "v4",
      "request_id": "req_5a8c1f1c-...",
      "code": "INVALID_PARAM",
      "message": "excel_file must be .xlsx or .xls with matching magic bytes.",
      "elapsed_sec": 0.0017,
      "details": { "param_name": "excel_file", "file_name": "report.csv", "allowed_extensions": [".xlsx", ".xls"] }
    }

관련 가이드

요청 예시
  • cURL
  • Ruby
  • Python
  • NodeJS
  • PHP
  • Java
curl -X PUT 'https://www.hashscraper.com/v4/api/schedules/8f3a7c1e9b5d24f6/excel_param' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -F 'excel_file=@/path/to/params.xlsx'
require 'net/http'
require 'json'
require 'uri'

uri = URI('https://www.hashscraper.com/v4/api/schedules/8f3a7c1e9b5d24f6/excel_param')
req = Net::HTTP::Put.new(uri)
req['Authorization'] = 'Bearer YOUR_API_KEY'

File.open('/path/to/params.xlsx', 'rb') do |file|
  req.set_form([['excel_file', file]], 'multipart/form-data')

  res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
    http.request(req)
  end

  puts res.code
  puts JSON.pretty_generate(JSON.parse(res.body))
end
import json
import requests

url = "https://www.hashscraper.com/v4/api/schedules/8f3a7c1e9b5d24f6/excel_param"
headers = {"Authorization": "Bearer YOUR_API_KEY"}

with open("/path/to/params.xlsx", "rb") as f:
    files = {"excel_file": f}
    response = requests.put(url, headers=headers, files=files)

print(response.status_code)
print(json.dumps(response.json(), indent=2, ensure_ascii=False))
응답 예시 200
{
  "result": "success",
  "version": "v4",
  "request_id": "req_5a8c1f1c-9b2d-4e7c-9abf-3f7e0a4d1b21",
  "elapsed_sec": 0.0421,
  "data": {
    "id": "8f3a7c1e9b5d24f6",
    "file_name": "params_2026Q2.xlsx",
    "detected_type": "xlsx"
  }
}