KT้ช่APIไฝฟ็จๆๆกฃ
็ฎไป
KT้ช่APIๆไพไบไธ็งๅฎๅ จใ้ซๆ็ๆนๅผๆฅ่ฎฟ้ฎๆไปฌ็ไบงๅๆฐๆฎๅบใ้่ฟ่ฟไธชAPI๏ผๆจๅฏไปฅๆฅ่ฏขๆไปฌ็้ช่ไบงๅ็ฎๅฝ๏ผ่ทๅ่ฏฆ็ป็ไบงๅไฟกๆฏ๏ผๅนถๆ นๆฎๅค็งๆกไปถ่ฟ่ก็ญ้ใ
่ฎค่ฏ
ๆๆAPI่ฏทๆฑ้ฝ้่ฆไฝฟ็จAPIๅฏ้ฅ่ฟ่ก่ฎค่ฏใ่ฏท่็ณปๆไปฌ่ทๅๆจ็ไธ็จAPIๅฏ้ฅใ
่ฎค่ฏๆนๅผ
ๅจๆๆAPI่ฏทๆฑ็ๅคด้จๆทปๅ X-API-Keyๅญๆฎต๏ผ
X-API-Key: ๆจ็APIๅฏ้ฅ
ๅผๅงไฝฟ็จ
็ฌฌไธๆญฅ๏ผไบ่งฃๆไปฌ็ไบงๅ็ปๆ
ๅจๅผๅงไฝฟ็จAPIไนๅ๏ผไบ่งฃๆไปฌไบงๅๆฐๆฎ็็ปๆๅพ้่ฆใๆฏไธชไบงๅๅ ๅซไปฅไธไธป่ฆๅญๆฎต๏ผ
| ๅญๆฎตๅ | ๆ่ฟฐ | ็คบไพ |
|---|---|---|
| id | ไบงๅๅฏไธID | "1" |
| sku | ไบงๅ็ผๅท | "537-001" |
| product_title | ไบงๅๅ็งฐ | "537ๆ็ฌฌๆ (20ๆฏ/็)" |
| product_category | ไบงๅ็ฑปๅซ | "Non-Cuban ้ๅค" ๆ "Cuban ๅคๅทด" |
| brand | ๅ็ | "537" ๆ "ๅคงๅซๆๅคซ DAVIDOFF" |
| main_photo | ไธปๅพ็URL | "/wp-content/uploads/2024/05/01_743.jpg" |
| recommended_retail_price | ๅปบ่ฎฎ้ถๅฎไปท | 0 |
| is_featured | ๆฏๅฆ็น่ฒไบงๅ | true ๆ false |
็ฌฌไบๆญฅ๏ผ่ทๅไบงๅๅ็ฑปๅๅ็ๅ่กจ
ๅๆฌกไฝฟ็จๆถ๏ผๅปบ่ฎฎๅ ่ทๅๆๆๅฏ็จ็ไบงๅๅ็ฑปๅๅ็ๅ่กจ๏ผไปฅไพฟไบ่งฃๆไปฌ็ไบงๅ็ป็ป็ปๆใ
่ทๅๆๆไบงๅๅ็ฑป
GET https://ktcigar.com/wp-json/xyz-api/v1/categories
่ทๅๆๆๅ็
GET https://ktcigar.com/wp-json/xyz-api/v1/brands
ไปฅไธ่ฏทๆฑๅฐ่ฟๅๆๆๅฏ็จ็ๅ็ฑปๅๅ็๏ผไปฅๅๆฏไธชๅ็ฑปๆๅ็ไธ็ไบงๅๆฐ้ใ่ฟๆๅฉไบๆจไบ่งฃๆไปฌ็ไบงๅ็ปๆ๏ผๅนถ้ๆฉๅ้็็ญ้ๆกไปถใ
็ฌฌไธๆญฅ๏ผ่ทๅไบงๅๅ่กจ
ๆๅค็งๆนๅผๅฏไปฅ่ทๅไบงๅๅ่กจ๏ผ
่ทๅๆๆไบงๅ๏ผๅ้กต๏ผ
GET https://ktcigar.com/wp-json/xyz-api/v1/products?page=1&per_page=20
ๅๆฐ่ฏดๆ๏ผ
page๏ผ้กต็ ๏ผไป1ๅผๅงper_page๏ผๆฏ้กตไบงๅๆฐ้๏ผ้ป่ฎค20๏ผๆๅคง100
ๆไบงๅๅ็ฑป่ทๅไบงๅ
GET https://ktcigar.com/wp-json/xyz-api/v1/products/by-category?category=Cuban ๅคๅทด&page=1&per_page=20
ๆๅ็่ทๅไบงๅ
GET https://ktcigar.com/wp-json/xyz-api/v1/products/by-brand?brand=ๅคงๅซๆๅคซ DAVIDOFF&page=1&per_page=20
็ฌฌๅๆญฅ๏ผ่ทๅๅไธชไบงๅ่ฏฆๆ
ๅฝๆจ็ฅ้ไบงๅIDๅ๏ผๅฏไปฅ่ทๅๅไธชไบงๅ็่ฏฆ็ปไฟกๆฏ๏ผ
GET https://ktcigar.com/wp-json/xyz-api/v1/products/1
ๅ
ถไธญ1ๆฏไบงๅIDใ
้ซ็บง็ญ้้้กน
ๆไปฌ็APIๆฏๆๅค็ง้ซ็บง็ญ้้้กน๏ผๅธฎๅฉๆจ็ฒพ็กฎๅฎไฝๆ้ไบงๅ๏ผ
ๅญๆฎต็ญ้
ๆจๅฏไปฅๆๅฎๅช่ฟๅ็นๅฎๅญๆฎต๏ผๅๅฐไธๅฟ ่ฆ็ๆฐๆฎไผ ่พ๏ผ
GET https://ktcigar.com/wp-json/xyz-api/v1/products?fields=id,sku,product_title,brand,recommended_retail_price
ๆ็ดขๅ่ฝ
ๆจๅฏไปฅ้่ฟๅ ณ้ฎ่ฏๆ็ดขไบงๅๆ ้ขใSKUๆๅ็๏ผ
GET https://ktcigar.com/wp-json/xyz-api/v1/products?search=้ช่
็น่ฒไบงๅ็ญ้
ๆฅๆพ็น่ฒไบงๅ๏ผ
GET https://ktcigar.com/wp-json/xyz-api/v1/products?featured=1
ไปทๆ ผ่ๅด็ญ้
ๆไปทๆ ผ่ๅด็ญ้ไบงๅ๏ผ
GET https://ktcigar.com/wp-json/xyz-api/v1/products?min_price=10&max_price=100
ๆๅบ้้กน
ๆจๅฏไปฅๆๅฎๆๅบๅญๆฎตๅๆนๅ๏ผ
GET https://ktcigar.com/wp-json/xyz-api/v1/products?sort_by=product_title&sort_dir=asc
ๅฏ็จๆๅบๅญๆฎต๏ผid, product_title, brand, product_category, recommended_retail_price
ๅ้กตไธๅๅบๅคด
ๆๆๅ่กจๅๅบ้ฝๆฏๆๅ้กต๏ผๅนถๅจHTTPๅๅบๅคดไธญๅ ๅซๅ้กตไฟกๆฏ๏ผ
X-WP-Total๏ผๆป้กน็ฎๆฐX-WP-TotalPages๏ผๆป้กตๆฐ
ๅฎๆดPythonๆฐๆฎ่ทๅ็คบไพ
ไปฅไธๆฏไธไธชๅฎๆด็Python่ๆฌ๏ผๆผ็คบๅฆไฝ่ทๅๆๆไบงๅๆฐๆฎๅนถไฟๅญๅฐๆฌๅฐ๏ผ
# encoding: utf-8
"""
KT้ช่APIๆฐๆฎ็ฌๅ็คบไพ่ๆฌ
ๆญค่ๆฌๆผ็คบๅฆไฝ่ทๅๆๆไบงๅๆฐๆฎๅนถไฟๅญๅฐๆฌๅฐๆฐๆฎๅบๆๆไปถ
"""
import requests
import json
import time
import pandas as pd
import sys
import os
from datetime import datetime
# ้
็ฝฎไฟกๆฏ
API_BASE_URL = "https://ktcigar.com/wp-json/xyz-api/v1"
API_KEY = "ๆจ็APIๅฏ้ฅ" # ๆฟๆขไธบๆจ็ๅฎ้
APIๅฏ้ฅ
SAVE_DIRECTORY = "kt_cigar_data" # ๆฐๆฎไฟๅญ็ฎๅฝ
# ไธบๆๆ่ฏทๆฑ่ฎพ็ฝฎ่ฏทๆฑๅคด
HEADERS = {
"X-API-Key": API_KEY,
"User-Agent": "KT-Cigar-API-Client/1.0"
}
# ็กฎไฟๆฐๆฎ็ฎๅฝๅญๅจ
if not os.path.exists(SAVE_DIRECTORY):
os.makedirs(SAVE_DIRECTORY)
def make_request(endpoint, params=None):
"""ๅAPIๅ้่ฏทๆฑๅนถ่ฟๅๅๅบ"""
url = f"{API_BASE_URL}/{endpoint}"
try:
response = requests.get(url, headers=HEADERS, params=params, timeout=10)
# ๆฃๆฅๆฏๅฆ่ฏทๆฑๆๅ
if response.ok:
return response.json(), response.headers
else:
print(f"่ฏทๆฑๅคฑ่ดฅ: {url}")
print(f"็ถๆ็ : {response.status_code}")
print(f"้่ฏฏ: {response.text}")
return None, None
except Exception as e:
print(f"่ฏทๆฑๅผๅธธ: {url}")
print(f"้่ฏฏ: {str(e)}")
return None, None
def get_all_categories():
"""่ทๅๆๆไบงๅๅ็ฑป"""
print("ๆญฃๅจ่ทๅๆๆไบงๅๅ็ฑป...")
data, _ = make_request("categories")
if data:
# ไฟๅญๅ็ฑปๆฐๆฎๅฐๆไปถ
filename = os.path.join(SAVE_DIRECTORY, "categories.json")
with open(filename, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print(f"ๆๅ่ทๅ {len(data)} ไธชไบงๅๅ็ฑป๏ผๅทฒไฟๅญๅฐ {filename}")
return data
else:
print("่ทๅไบงๅๅ็ฑปๅคฑ่ดฅ")
return []
def get_all_brands():
"""่ทๅๆๆๅ็"""
print("ๆญฃๅจ่ทๅๆๆๅ็...")
data, _ = make_request("brands")
if data:
# ไฟๅญๅ็ๆฐๆฎๅฐๆไปถ
filename = os.path.join(SAVE_DIRECTORY, "brands.json")
with open(filename, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print(f"ๆๅ่ทๅ {len(data)} ไธชๅ็๏ผๅทฒไฟๅญๅฐ {filename}")
return data
else:
print("่ทๅๅ็ๅคฑ่ดฅ")
return []
def get_products_by_category(category):
"""่ทๅๆๅฎๅ็ฑปไธ็ๆๆไบงๅ"""
print(f"ๆญฃๅจ่ทๅๅ็ฑป '{category}' ไธ็ไบงๅ...")
all_products = []
page = 1
total_pages = 1
while page <= total_pages:
# ่ทๅๅฝๅ้กต็ไบงๅๆฐๆฎ
params = {
"category": category,
"page": page,
"per_page": 100 # ๆฏ้กต่ทๅๆๅคงๆฐ้็ไบงๅ
}
data, headers = make_request("products", params)
if data and isinstance(data, list):
all_products.extend(data)
# ่ทๅๆป้กตๆฐ
if 'X-WP-TotalPages' in headers:
total_pages = int(headers['X-WP-TotalPages'])
print(f"ๅทฒ่ทๅ็ฌฌ {page}/{total_pages} ้กต๏ผๆฌ้กตๆ {len(data)} ไธชไบงๅ")
page += 1
# ๆทปๅ ๅฐๅปถ่ฟ๏ผ้ฟๅ
่ฏทๆฑ่ฟไบ้ข็น
time.sleep(0.5)
else:
print(f"่ทๅๅ็ฑป '{category}' ็ไบงๅๅคฑ่ดฅๆ่ฏฅๅ็ฑปไธๆ ไบงๅ")
break
# ไฟๅญๆญคๅ็ฑปไธ็ไบงๅๅฐๆไปถ
if all_products:
safe_category = category.replace(" ", "_").replace("/", "_")
filename = os.path.join(SAVE_DIRECTORY, f"products_category_{safe_category}.json")
with open(filename, 'w', encoding='utf-8') as f:
json.dump(all_products, f, ensure_ascii=False, indent=2)
print(f"ๆๅ่ทๅๅ็ฑป '{category}' ไธ็ {len(all_products)} ไธชไบงๅ๏ผๅทฒไฟๅญๅฐ {filename}")
return all_products
def get_products_by_brand(brand):
"""่ทๅๆๅฎๅ็็ๆๆไบงๅ"""
print(f"ๆญฃๅจ่ทๅๅ็ '{brand}' ็ไบงๅ...")
all_products = []
page = 1
total_pages = 1
while page <= total_pages:
# ่ทๅๅฝๅ้กต็ไบงๅๆฐๆฎ
params = {
"brand": brand,
"page": page,
"per_page": 100 # ๆฏ้กต่ทๅๆๅคงๆฐ้็ไบงๅ
}
data, headers = make_request("products", params)
if data and isinstance(data, list):
all_products.extend(data)
# ่ทๅๆป้กตๆฐ
if 'X-WP-TotalPages' in headers:
total_pages = int(headers['X-WP-TotalPages'])
print(f"ๅทฒ่ทๅ็ฌฌ {page}/{total_pages} ้กต๏ผๆฌ้กตๆ {len(data)} ไธชไบงๅ")
page += 1
# ๆทปๅ ๅฐๅปถ่ฟ๏ผ้ฟๅ
่ฏทๆฑ่ฟไบ้ข็น
time.sleep(0.5)
else:
print(f"่ทๅๅ็ '{brand}' ็ไบงๅๅคฑ่ดฅๆ่ฏฅๅ็ไธๆ ไบงๅ")
break
# ไฟๅญๆญคๅ็ไธ็ไบงๅๅฐๆไปถ
if all_products:
safe_brand = brand.replace(" ", "_").replace("/", "_")
filename = os.path.join(SAVE_DIRECTORY, f"products_brand_{safe_brand}.json")
with open(filename, 'w', encoding='utf-8') as f:
json.dump(all_products, f, ensure_ascii=False, indent=2)
print(f"ๆๅ่ทๅๅ็ '{brand}' ็ {len(all_products)} ไธชไบงๅ๏ผๅทฒไฟๅญๅฐ {filename}")
return all_products
def get_all_products():
"""่ทๅๆๆไบงๅ๏ผๅ้กต่ทๅ๏ผ"""
print("ๆญฃๅจ่ทๅๆๆไบงๅ...")
all_products = []
page = 1
total_pages = 1
while page <= total_pages:
params = {
"page": page,
"per_page": 100 # ๆฏ้กต่ทๅๆๅคงๆฐ้็ไบงๅ
}
data, headers = make_request("products", params)
if data and isinstance(data, list):
all_products.extend(data)
# ่ทๅๆป้กตๆฐ
if 'X-WP-TotalPages' in headers:
total_pages = int(headers['X-WP-TotalPages'])
print(f"ๅทฒ่ทๅ็ฌฌ {page}/{total_pages} ้กต๏ผๆฌ้กตๆ {len(data)} ไธชไบงๅ")
page += 1
# ๆทปๅ ๅฐๅปถ่ฟ๏ผ้ฟๅ
่ฏทๆฑ่ฟไบ้ข็น
time.sleep(0.5)
else:
print("่ทๅไบงๅๅคฑ่ดฅ")
break
# ไฟๅญๆๆไบงๅๅฐๆไปถ
if all_products:
# ไฟๅญไธบJSONๆ ผๅผ
json_filename = os.path.join(SAVE_DIRECTORY, "all_products.json")
with open(json_filename, 'w', encoding='utf-8') as f:
json.dump(all_products, f, ensure_ascii=False, indent=2)
# ไฟๅญไธบCSVๆ ผๅผ๏ผไพฟไบๅจExcelไธญๆฅ็
csv_filename = os.path.join(SAVE_DIRECTORY, "all_products.csv")
df = pd.DataFrame(all_products)
df.to_csv(csv_filename, index=False, encoding='utf-8-sig') # ไฝฟ็จutf-8-sig็ผ็ ไปฅๆฏๆExcelไธญ็ไธญๆ
print(f"ๆๅ่ทๅๆๆ {len(all_products)} ไธชไบงๅ")
print(f"ๅทฒไฟๅญๅฐ {json_filename} ๅ {csv_filename}")
return all_products
def main():
"""ไธปๅฝๆฐ๏ผๆง่กๅฎๆด็ๆฐๆฎ็ฌๅ่ฟ็จ"""
print("======= KT้ช่APIๆฐๆฎ็ฌๅ =======")
print(f"ๅผๅงๆถ้ด: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
# ็ฌฌไธๆญฅ๏ผ่ทๅๆๆๅ็ฑปๅๅ็
categories = get_all_categories()
brands = get_all_brands()
# ็ฌฌไบๆญฅ๏ผ่ทๅๆๆไบงๅ
all_products = get_all_products()
# ็ฌฌไธๆญฅ๏ผๅฏ้๏ผ๏ผๆๅ็ฑป่ทๅไบงๅ
for category in categories:
category_name = category['name']
# ๆฅ็ๅ็ฑปไธไบงๅๆฐ้๏ผๅฆๆ่พๅคๅ่ทๅ
if category['product_count'] > 0:
products = get_products_by_category(category_name)
# ็ฌฌๅๆญฅ๏ผๅฏ้๏ผ๏ผ่ทๅ้จๅๅคงๅ็็ไบงๅ
# ๆ นๆฎไบงๅๆฐ้ๆๅบ๏ผ่ทๅๆๅคไบงๅ็ๅ5ไธชๅ็
top_brands = sorted(brands, key=lambda x: x['product_count'], reverse=True)[:5]
for brand in top_brands:
brand_name = brand['name']
products = get_products_by_brand(brand_name)
print(f"็ปๆๆถ้ด: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print(f"ๆๆๆฐๆฎๅทฒไฟๅญๅฐ็ฎๅฝ: {os.path.abspath(SAVE_DIRECTORY)}")
print("======= ๆฐๆฎ็ฌๅๅฎๆ =======")
if __name__ == "__main__":
main()
่ๆฌ่ฏดๆ
ไธ่ฟฐPython่ๆฌๅฏไปฅ๏ผ
- ่ทๅๆๆไบงๅๅ็ฑปๅๅ็ไฟกๆฏ
- ๅ้กต่ทๅๆๆไบงๅๆฐๆฎ๏ผๅ ฑ4000ๅคๆก๏ผ
- ๆๅ็ฑปๅๅ็ๅๅซ่ทๅไบงๅ
- ๅฐๆฐๆฎไฟๅญไธบJSONๅCSVๆ ผๅผ๏ผไพฟไบๅ็ปญไฝฟ็จ
- ๅค็่ฏทๆฑ้่ฏฏๅ้ๅถ่ฏทๆฑ้ข็๏ผ้ฟๅ ๅฏนๆๅกๅจ้ ๆ่ฟๅคงๅๅ
ไฝฟ็จๆญค่ๆฌๅ๏ผ่ฏท็กฎไฟๅฎ่ฃ ไปฅไธPythonๅ ๏ผ
pip install requests pandas
ๅ ถไป็ผ็จ่ฏญ่จ็คบไพ
PHP็คบไพ
<?php
// ่ทๅไบงๅๅ่กจ
$api_key = "ๆจ็APIๅฏ้ฅ";
$response = wp_remote_get(
'https://ktcigar.com/wp-json/xyz-api/v1/products?per_page=10&page=1',
array(
'headers' => array(
'X-API-Key' => $api_key
)
)
);
if (!is_wp_error($response)) {
$products = json_decode(wp_remote_retrieve_body($response), true);
// ๅค็ไบงๅๆฐๆฎ...
}
?>
JavaScript็คบไพ
// ่ทๅไบงๅๅ่กจ
const apiKey = "ๆจ็APIๅฏ้ฅ";
fetch("https://ktcigar.com/wp-json/xyz-api/v1/products?per_page=10&page=1", {
headers: {
"X-API-Key": apiKey
}
})
.then(response => response.json())
.then(products => {
// ๅค็ไบงๅๆฐๆฎ...
})
.catch(error => console.error('Error:', error));
ๅธธ่ง้ฎ้ข่งฃ็ญ
ๅฆไฝ่ทๅAPIๅฏ้ฅ๏ผ
่ฏท่็ณปๆไปฌ็ๅฎขๆทๆๅกๅข้่ทๅๆจ็ไธ็จAPIๅฏ้ฅใ
ๆไฝฟ็จ้ๅถๅ๏ผ
ๆฏไธชAPIๅฏ้ฅๆๆฏๅ้่ฏทๆฑๆฌกๆฐ้ๅถ๏ผ่ฏทๅ็ไฝฟ็จใ
ๅฆไฝ่ทๅๆๆไบงๅๆฐๆฎ๏ผ
็ฑไบๆไปฌๆๅคง้ไบงๅ๏ผๅปบ่ฎฎไฝฟ็จๅ้กตๅ่ฝ้ๆญฅ่ทๅ๏ผๆๆๅ็ฑป/ๅ็่ทๅ็นๅฎไบงๅใ่ฏทๅ่ไธ้ข็Python็คบไพไปฃ็ ใ
API่ฟๅ็้่ฏฏ็ ๆๅชไบ๏ผ
ๅธธ่ง้่ฏฏ็ ๅ ๆฌ๏ผ
- 401๏ผๆ ๆๆ็ผบๅฐAPIๅฏ้ฅ
- 404๏ผๆชๆพๅฐ่ฏทๆฑ็่ตๆบ
- 429๏ผ่ถ ่ฟ้็้ๅถ
่็ณปๆไปฌ
ๅฆๆไปปไฝๅ ณไบAPIไฝฟ็จ็้ฎ้ข๏ผ่ฏท่็ณปๆไปฌ็ๆๆฏๆฏๆๅข้ใ
ๆณจๆ๏ผๆฌAPIไป ไพๆๆ็จๆทไฝฟ็จ๏ผๆช็ป่ฎธๅฏไธๅพๅไบซAPIๅฏ้ฅๆๆปฅ็จAPIๆๅกใ