البداية السريعة
قدّم طلبك الأول إلى واجهة برمجة الكلمات العربية في أقل من 5 دقائق.
1. أنشئ حساباً واحصل على مفتاح API الخاص بك
توجّه إلى لوحة تحكم كلمات وأنشئ حساباً مجانياً. بعد تسجيل الدخول، انتقل إلى لوحة التحكم ← مفاتيح API وانقر على "إنشاء مفتاح API".
انسخ مفتاحك فوراً
يُعرض مفتاح API مرة واحدة فقط. خزّنه في مدير كلمات المرور أو ملف .env فوراً.
سيبدو مفتاحك هكذا: klmt_live_••••••••••••••••••••
2. ثبّت SDK
ثبّت حزمة kalimalab الرسمية. تعمل في Node.js وDeno وBun وأي بيئة تشغيل JavaScript حديثة.
npm install kalimalabpnpm add kalimalabyarn add kalimalabbun add kalimalabيتطلب SDK استخدام Node.js 18+ أو أي بيئة تشغيل تدعم fetch نشطاً.
3. قدّم طلبك الأول
أضف مفتاح API إلى متغيرات البيئة، ثم اكتب سكريبتك الأولى:
KALIMALAB_API_KEY=klmt_live_your_key_hereimport { KalimaLab } from 'kalimalab'const client = new KalimaLab({ apiKey: process.env.KALIMALAB_API_KEY! })// Get today's word of the day (0 DP if cached)const word = await client.words.daily()console.log(word.lemma) // كَتَبَconsole.log(word.primaryGloss) // "to write"console.log(word.primaryPos) // "verb"console.log(word.pattern) // "فَعَلَ"// Search for 5-letter nounsconst results = await client.words.search({ letters: 5, pos: 'noun', limit: 10 })console.log(`Found ${results.meta.total} lemmas`)results.data.forEach((w) => console.log(w.lemma))ℹتستخدم REST API مباشرةً؟
4. استكشف الاستجابة
هكذا تبدو استجابة الكلمة النموذجية. كل كائن كلمة يتضمن بيانات لغوية وصفية:
{ "data": { "lemma": "كَتَبَ", "primaryPos": "verb", "primaryGloss": "to write", "root": "كتب", "pattern": "فَعَلَ", "transliteration": "kataba", "frequencyRank": 143 }, "error": null, "meta": { "requestId": "req_01j9xyz...", "responseTimeMs": 8 }}lemmaالكلمة بتشكيل كامل.primaryPosتصنيف الكلام: فعل، اسم، صفة، أو حرف.rootالجذر العربي — الأساس الثلاثي أو الرباعي.patternالوزن الصرفي (وزن) بصيغة فعل.transliterationالتحويل الصوتي وفق ALA-LC.frequencyRankرتبة تردد الاستخدام (1 = الأكثر تردداً).استجابة البحث المُصفّى
عند تصفية الكلمات — مثلاً بعدد الأحرف أو الجذر — يُعيد API قائمة مرقّمة. هذا هو الشكل الكامل لاستجابة GET /v1/words?letters=3&root=كتب:
{ "data": [ { "lemma": "كَتَبَ", "primaryPos": "verb", "primaryGloss": "to write", "root": "كتب", "pattern": "فَعَلَ", "transliteration": "kataba", "frequencyRank": 47 } ], "error": null, "meta": { "requestId": "req_abc123", "responseTimeMs": 12, "page": 1, "limit": 20, "total": 47, "totalPages": 3 }}meta.pageرقم الصفحة الحالية (يبدأ من 1).meta.limitعدد النتائج في الصفحة (حتى 100).meta.totalإجمالي عدد الكلمات المطابقة عبر جميع الصفحات.meta.totalPagesإجمالي الصفحات المتاحة لهذا الاستعلام.meta.responseTimeMsوقت المعالجة من جانب الخادم بالمللي ثانية.معالجة الأخطاء
تحقق دائماً من نجاح الاستجابة قبل استخدام البيانات. أكثر خطأين شائعين هما 401 Unauthorized (مفتاح خاطئ أو مفقود) و429 Too Many Requests (استنفاد ميزانية النقاط).
import { KalimaLab, AuthError, RateLimitError } from 'kalimalab'const client = new KalimaLab({ apiKey: process.env.KALIMALAB_API_KEY! })async function safeSearch(letters: number, root: string) { try { const results = await client.words.search({ letters, root, limit: 20 }) return results.data } catch (err) { if (err instanceof AuthError) { // 401 — key is missing, invalid, or revoked console.error('Check your KALIMALAB_API_KEY environment variable.') throw err } if (err instanceof RateLimitError) { // 429 — too many requests; wait until the limit resets const waitMs = err.resetAt.getTime() - Date.now() console.warn(`Rate limited. Retrying in ${Math.ceil(waitMs / 1000)}s.`) await new Promise((r) => setTimeout(r, waitMs)) return safeSearch(letters, root) // retry once } throw err // unexpected error — let it bubble up }}const words = await safeSearch(3, 'كتب')console.log(words)ℹمرجع الأخطاء الكامل
5. الخطوات التالية
أنت مستعد! إذا واجهت أي مشاكل، تواصل مع الدعم.