إنشاء وسم اكتشاف لخلاصات RSS وAtom وJSON Feed
يكون اكتشاف الخلاصات أكثر موثوقية عندما تشير الصفحة بوضوح إلى مورد النشر الموجّه للمتصفحات وقارئات الخلاصات وبرامج الزحف.
شغّل الأداة مجانًا
تستقبل هذه الأداة نوع الخلاصة وعنوان URL مطلقاً، ثم تختار نوع الوسائط المناسب، وتهرّب المحارف التي قد تفسد سمة HTML، وتعيد عنصر link rel alternate كاملاً وجاهزاً لقسم head. وهي تدعم RSS وAtom وJSON Feed، وترفض التنسيقات غير المعروفة وعناوين URL غير الصالحة أو غير المخصصة للويب.
اختر التنسيق المطابق للمستند المنشور
لا يفيد وسم الاكتشاف إلا إذا كانت سمة type تصف المورد الموجود عند عنوان URL وصفاً صحيحاً. اختر rss لمستند RSS بتنسيق XML، أو atom لمستند Atom بتنسيق XML، أو json-feed لمستند JSON Feed. تربط الأداة هذه الخيارات بالأنواع application/rss+xml وapplication/atom+xml وapplication/feed+json على الترتيب. لا تفحص الأداة الوجهة ولا تنزّل محتواها، ولذلك يجب أن يطابق اختيارك ما يرسله الخادم فعلياً. يساعد التصريح الدقيق قارئ الخلاصات على تحديد قدرته على معالجة المورد قبل جلبه أو تحليله. كما يمنع أخطاء النسخ الشائعة، مثل الإعلان عن نقطة Atom بنوع RSS أو عرض JSON Feed على أنه JSON عام. ترفض الأداة الأسماء غير المعروفة بدلاً من تخمينها، لأن النوع الذي يبدو معقولاً وهو خاطئ يجعل تشخيص مشكلة الاكتشاف أصعب. إذا كان موقعك يوفر أكثر من تنسيق، فشغّل الأداة لكل نقطة وصول وضع جميع العناصر الناتجة في head. عندئذ يمثل كل وسم بديلاً حقيقياً يستطيع العميل المتوافق اختياره.
أدخل العنوان العام والأساسي للخلاصة
أدخل عنوان URL مطلقاً ببروتوكول HTTP أو HTTPS يمكن لقارئ الخلاصات لدى الزائر الوصول إليه، مثل https://example.com/feed.xml. تُفضّل العناوين المطلقة في بيانات الاكتشاف لأن الصفحات المنسوخة والمستندات المخزنة مؤقتاً والعملاء الذين يعالجون العنوان الأساسي بطرق مختلفة سيصلون إلى نقطة الوصول نفسها. تزيل الأداة المسافات المحيطة، وتتحقق من إمكان تحليل القيمة كعنوان URL، وترفض المخططات مثل file وdata وjavascript. وتحافظ على عنوان الويب المقدم بدلاً من إعادة كتابة المسار أو الاستعلام أو الجزء أو صيغة الهروب أو حالة الأحرف دون إشعار. تُرمّز المحارف ذات المعنى الخاص داخل سمة HTML في الوسم الناتج، فيصبح رمز العطف في الاستعلام آمناً من دون تغيير حقل url المعاد. يؤكد هذا التحقق الشكل والمخطط فقط، ولا يثبت الملكية أو التوافر أو نوع المحتوى أو عمليات إعادة التوجيه أو إعداد TLS. اختبر نقطة الوصول المنشورة بصورة مستقلة وتأكد من أنها تعيد الخلاصة المقصودة بنجاح. وعند نقل الخلاصة، حدّث إعادة التوجيه وهذا الوسم معاً.
ضع العنصر الناتج وتحقق منه
انسخ الوسم المعاد إلى قسم head في صفحة HTML التي تريد إتاحة اكتشاف خلاصتها. تستخدم النتيجة rel="alternate" ونوع الوسائط الخاص بالتنسيق وعنوان الخلاصة المهرّب في href. يُحذف title عمداً لأن المدخلات لا تتضمن سوى التنسيق والعنوان؛ فاختلاق وصف أقل فائدة من ترك اختيار اللغة والصياغة المناسبة لك داخل قالب الموقع. إذا كان الموقع يضم خلاصات متعددة، مثل خلاصة رئيسية وخلاصات للموضوعات، فأنشئ عنصراً لكل عنوان وأضف عناوين واضحة في تطبيقك عندما يحتاج المستخدمون إلى التمييز بينها. راجع المصدر الذي يصل فعلياً بعد النشر، فقد يغيّر محرك القوالب أو مستوى الحماية الوسم حتى لو كانت القيمة المولدة صحيحة. ثم جرّب الاكتشاف بواسطة قارئ خلاصات واحد على الأقل وافحص ترويسات استجابة نقطة الوصول. تشغّل أداة المتصفح وAPI الدالة الحتمية نفسها، لذلك تنتج المدخلات المتطابقة الحقول والوسم نفسيهما. يمكن لعمليات البناء الآلية استدعاء API مقابل $0.002 لكل طلب، بينما يجري الاستخدام التفاعلي محلياً داخل المتصفح.
حالات الاستخدام
إضافة اكتشاف RSS إلى موقع نشر
أنشئ عنصر head لنقطة RSS في مدونة أو موقع أخبار من دون الحاجة إلى حفظ نوع الوسائط.
الإعلان عن بديل بتنسيق Atom
أنشئ وسماً متسقاً لاكتشاف خلاصة Atom المقدمة إلى جانب تنسيقات نشر أخرى.
نشر بيانات JSON Feed الوصفية
استخدم نوع الوسائط المسجل لـ JSON Feed داخل عنصر alternate ذي هروب صحيح.
الأسئلة الشائعة
ما أنواع الخلاصات المدعومة؟
القيم المقبولة هي rss وatom وjson-feed. تؤدي أي قيمة أخرى إلى خطأ إدخال غير صالح.
ما تكلفة طلب API؟
تكلفة كل طلب API هي $0.002. تعمل نسخة المتصفح محلياً مجاناً.
هل تتحقق الأداة من وجود الخلاصة؟
لا. تتحقق من المدخلات وتبني الوسم من دون إجراء أي طلب شبكي.
لماذا يجب أن يكون عنوان URL مطلقاً؟
يبقى عنوان HTTP أو HTTPS المطلق واضحاً لقارئات الخلاصات بصرف النظر عن الصفحة أو العنوان الأساسي الذي اكتشفته منه.
هل تُعالج المحارف الخاصة في العنوان بأمان؟
نعم. تُهرّب المحارف ذات المعنى الخاص في سمات HTML داخل الوسم، بينما يحتفظ حقل url المنفصل بالمدخل بعد إزالة المسافات المحيطة.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/web/link-rel-alternate-build \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"feed_type":"rss","url":"https://example.com/feed.xml"}'const res = await fetch("https://api.kit.forhosting.com/web/link-rel-alternate-build", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"feed_type": "rss",
"url": "https://example.com/feed.xml"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/link-rel-alternate-build",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"feed_type": "rss",
"url": "https://example.com/feed.xml"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/link-rel-alternate-build", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"feed_type":"rss","url":"https://example.com/feed.xml"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"feed_type":"rss","url":"https://example.com/feed.xml"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/link-rel-alternate-build", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"feed_type": "rss",
"url": "https://example.com/feed.xml"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.link_rel_alternate_build",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
timeout_sec | 30 |
max_crawl_pages | 25 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |