حوّل قائمة عناوين إلى slugs فريدة لعناوين URL
تحوّل هذه الأداة قائمة مرتبة من عناوين الصفحات أو المقالات أو المنتجات أو غيرها إلى slugs ملائمة لعناوين URL ضمن طلب حتمي واحد.
شغّل الأداة مجانًا
وهي تجعل الأحرف صغيرة، وتحذف علامات النبر اللاتينية الشائعة، وتستبدل المسافات وعلامات الترقيم بشرطات، مع إبقاء الأرقام. وإذا أنشأ عنوانان الأساس نفسه، يحصل الناتج اللاحق على لاحقة رقمية متزايدة. ويظل ترتيب الإدخال محفوظاً، لكي تتمكنوا من مطابقة الناتج بسهولة مع عملية استيراد أو قائمة تحرير أو خطة ترحيل أو مسار نشر.
أنشئوا slug نظيفاً لكل عنوان
أرسلوا العناوين بالترتيب نفسه الذي تريدون ظهور النتائج به. يتحول كل عنوان إلى مكوّن URL موجز: تصبح الأحرف اللاتينية الكبيرة صغيرة، وتُحذف علامات التشكيل اللاتينية الشائعة، وتتحول كل مجموعة من المسافات أو علامات الترقيم إلى شرطة واحدة. وتُزال الفواصل من البداية والنهاية، بينما تبقى الأرقام المفيدة للإصدارات والفصول والسنوات والطبعات. تتطلب العملية سلاسل نصية فعلية، ولا تحوّل الكائنات أو القيم المنطقية أو الأعداد ضمنياً، لأن ذلك قد ينشئ مسارات تبدو صحيحة وهي خاطئة. ويجب أن ينتج كل عنوان بعد التطبيع حرف ASCII واحداً أو رقماً واحداً على الأقل. تتضمن الاستجابة مصفوفة slugs بالترتيب نفسه وعدداً إجمالياً، وبذلك يمكنكم التأكد من وجود نتيجة مقابلة لكل صف. لا تُجلب معلومات خارجية ولا تُخزن أو يعاد ترتيبها أو استنتاجها؛ فالمدخل نفسه يعطي الناتج نفسه دائماً.
عالجوا التعارضات من دون فقدان الترتيب
قد تتحول عناوين مختلفة إلى slug واحد، لأن الفروق في حالة الأحرف والنبر والمسافات المتكررة وعلامات الترقيم تزول أثناء التطبيع. يحتفظ الظهور الأول بالصيغة الأساسية، وتحصل العناصر اللاحقة على -2 ثم -3 ولاحقات متزايدة أخرى. ويُفحص التفرد مقارنة بكل slugs التي أُنتجت سابقاً، لا بمجرد عد النصوص الأصلية المتطابقة. وهذا مهم عندما ينتهي عنوان طبيعي برقم أو تتقارب تهجئات مختلفة في صيغة واحدة. تمنح المعالجة من اليسار إلى اليمين ترتيب الإدخال أولوية واضحة وتجعل إعادة التشغيل قابلة للتكرار. إذا كانت لديكم أولوية تحريرية، فضعوا أولاً العنوان الذي ينبغي أن يحتفظ بالصيغة من دون لاحقة. لا تفحص الأداة موقعكم أو قاعدة بياناتكم، ولذلك لا تعرف المسارات المنشورة مسبقاً. أدرجوا العناوين الحالية ذات الصلة، أو قارنوا الناتج بسجل slugs المحجوزة لديكم قبل حفظ المسارات.
استخدموا الناتج بأمان في مسارات النشر
يناسب الناتج الدفعي المرحلة الفاصلة بين البيانات التحريرية ونظام إدارة المحتوى. احتفظوا بكل slug بجانب صفه الأصلي، ولا تعيدوا ترتيب المصفوفة منفردة؛ فالتطابق بحسب الموضع يسمح لاستيراد جدول أو برنامج ترحيل أو مولّد موقع ثابت بإسناد المسار الصحيح. تحققوا من الطلب كاملاً قبل تثبيت التغييرات، لأن وجود عنوان غير صالح يرفض العملية كلها بدلاً من إرجاع نتيجة جزئية قد تترك الترحيل ناقصاً. تنشئ الخوارزمية مكوّنات URL محافظة بترميز ASCII، لكنها لا تنقل كل أنظمة الكتابة صوتياً، ولا تختار الكلمات المفتاحية، ولا تختصر العناوين، ولا تضمن التفرد أمام سجلات لم تُرسل. في الأتمتة، تبلغ كلفة الطلب $0.002، ويمكن تجربة المنطق الحتمي نفسه في المتصفح. احفظوا العناوين الأصلية مع slugs لتدقيق عمليات إعادة التوجيه مستقبلاً، ولا تعيدوا إنشاء المسارات العامة المستقرة من دون سياسة تحويل جاهزة.
حالات الاستخدام
جهّزوا استيراداً إلى نظام المحتوى
أنشئوا مكوّن مسار فريداً لكل عنوان مرتب قبل إدخال مجموعة من المقالات أو الصفحات.
رحّلوا أرشيفاً من المحتوى
طبّعوا العناوين القديمة وحددوا لاحقات التعارض مع الحفاظ على مطابقة الصفوف مع ملف التصدير الأصلي.
ابنوا مسارات موقع ثابت
أنشئوا أسماء ملفات أو مقاطع مسار حتمية لمجموعة ضمن عملية بناء قابلة للتكرار.
الأسئلة الشائعة
ماذا يحدث عندما ينشئ عنوانان slug نفسه؟
يحتفظ الأول بالصيغة الأساسية، وتحصل التعارضات اللاحقة على لاحقات متزايدة مثل -2 و-3 و-4.
هل يحافظ الناتج على ترتيب الإدخال؟
نعم. يشغل كل slug موضع عنوانه الأصلي نفسه، ويبين العدد مقدار النتائج المنتجة.
ما كلفة الطلب الواحد؟
سعر API هو $0.002 لكل طلب، سواء وُجد تعارض بين العناوين أم لم يوجد.
هل تُفحص slugs المستخدمة في موقعي؟
لا. يُضمن التفرد داخل القائمة المرسلة فقط، ولا يجري الوصول إلى موقعكم أو CMS أو قاعدة بياناتكم.
لماذا رُفض أحد العناوين؟
يجب أن يكون كل عنصر سلسلة نصية وأن ينتج حرف ASCII واحداً أو رقماً واحداً على الأقل بعد التطبيع.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/data/slugify-batch \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"titles":["Getting Started","Getting Started","API Reference"]}'const res = await fetch("https://api.kit.forhosting.com/data/slugify-batch", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"titles": [
"Getting Started",
"Getting Started",
"API Reference"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/slugify-batch",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"titles": [
"Getting Started",
"Getting Started",
"API Reference"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/slugify-batch", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"titles":["Getting Started","Getting Started","API Reference"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"titles":["Getting Started","Getting Started","API Reference"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/slugify-batch", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"titles": [
"Getting Started",
"Getting Started",
"API Reference"
]
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.slugify_batch",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_items | 10000 |
max_chars_per_title | 10000 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |