كيفية استخدام Murf AI API

Herve Kom

29 يناير 2026

كيفية استخدام Murf AI API

يحول Murf AI النص إلى كلام طبيعي المظهر مع تعليقات صوتية بجودة استوديو. يدمج المطورون واجهة برمجة تطبيقات Murf AI لبناء تطبيقات تروي المحتوى، وتنشئ إصدارات صوتية من المقالات، وتشغل المساعدين الافتراضيين، وتولد تعليقات صوتية على نطاق واسع.

💡
قبل الغوص في البرمجة المعقدة، يمكنك توفير وقت تطوير كبير باستخدام Apidog لاختبار وتصحيح أخطاء Murf AI API. Apidog هي أداة تطوير API شاملة ومجانية تتيح لك فحص نقاط النهاية بصريًا، وإنشاء كود العميل بأي لغة، والتحقق من مخرجات تحويل النص إلى كلام (TTS) على الفور دون كتابة سطر واحد من الكود النموذجي.
زر

ما هي واجهة برمجة تطبيقات Murf AI؟

Murf AI يوفر خدمة تحويل النص إلى كلام سحابية تحول المحتوى المكتوب إلى صوت واقعي يشبه صوت الإنسان. على عكس محركات TTS التي تبدو روبوتية، يستخدم Murf تخليق الصوت المدعوم بالذكاء الاصطناعي لإنتاج تنغيم طبيعي، وتأكيد مناسب، وتعبير عاطفي أصيل.

لوحة تحكم Murf AI
لوحة تحكم Murf AI

تعرض واجهة برمجة التطبيقات هذه الوظيفة للمطورين. تشمل الإمكانيات الرئيسية ما يلي:

يستخدم المطورون واجهة برمجة تطبيقات Murf AI لسرد الفيديو، وإنتاج البودكاست، وأنظمة الرد الصوتي التفاعلي (IVR)، وتوليد الكتب الصوتية، وميزات إمكانية الوصول. تتعامل واجهة برمجة التطبيقات مع المقتطفات القصيرة والمحتوى الطويل، مما يجعلها مناسبة لمجموعة متنوعة من حالات الاستخدام.

البدء باستخدام واجهة برمجة تطبيقات Murf AI

قبل إجراء استدعاءات API، تحتاج إلى إعداد المصادقة. يستخدم Murf AI مفاتيح API للترخيص، باتباع اصطلاحات REST القياسية.

الخطوة 1: إنشاء حساب Murf AI

قم بزيارة murf.ai واشترك للحصول على حساب. يقدم Murf طبقة مجانية مع رصيد محدود، وهو ما يعمل بشكل جيد لاختبار واجهة برمجة التطبيقات. للاستخدام الإنتاجي، ستحتاج إلى خطة مدفوعة تتضمن الوصول إلى واجهة برمجة التطبيقات.

إنشاء مفتاح API لحساب Murf AI
إنشاء مفتاح API لحساب Murf AI

الخطوة 2: إنشاء مفتاح Murf AI API الخاص بك

انتقل إلى إعدادات حسابك وحدد موقع قسم API. أنشئ مفتاح API جديدًا وقم بتخزينه بأمان. سيصادق هذا المفتاح جميع طلباتك.

واجهة توليد مفتاح Murf AI API
واجهة توليد مفتاح Murf AI API

حافظ على سرية مفتاح API الخاص بك. لا تلتزم أبدًا بتخزينه في التحكم بالإصدار أو تعريضه في كود جانب العميل.

الخطوة 3: فهم عنوان URL الأساسي لواجهة برمجة تطبيقات Murf AI

تذهب جميع طلبات Murf AI API إلى:

https://api.murf.ai/v1

تتبع واجهة برمجة التطبيقات اصطلاحات RESTful مع نصوص طلب واستجابة JSON. تتم المصادقة عبر رأس `api-key`.

مصادقة واجهة برمجة تطبيقات Murf AI

يتطلب كل طلب API مفتاح API الخاص بك في رؤوس الطلب. تنسيق رأس المصادقة هو:

api-key: YOUR_API_KEY
Content-Type: application/json

إليك كيف تبدو المصادقة في لغات البرمجة المختلفة:

مصادقة Python مع واجهة برمجة تطبيقات Murf AI

import requests

API_KEY = "your_murf_api_key"
BASE_URL = "https://api.murf.ai/v1"

headers = {
    "api-key": API_KEY,
    "Content-Type": "application/json"
}

# Test authentication by fetching available voices
response = requests.get(f"{BASE_URL}/voices", headers=headers)

if response.status_code == 200:
    print("Authentication successful!")
    voices = response.json()
    print(f"Available voices: {len(voices)}")
else:
    print(f"Authentication failed: {response.status_code}")

مصادقة JavaScript مع واجهة برمجة تطبيقات Murf AI

const API_KEY = 'your_murf_api_key';
const BASE_URL = 'https://api.murf.ai/v1';

const headers = {
    'api-key': API_KEY,
    'Content-Type': 'application/json'
};

// Test authentication
fetch(`${BASE_URL}/voices`, { headers })
    .then(response => response.json())
    .then(data => console.log('Voices available:', data.length))
    .catch(error => console.error('Auth failed:', error));

مصادقة cURL مع واجهة برمجة تطبيقات Murf AI

curl -X GET "https://api.murf.ai/v1/voices" \
  -H "api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json"

تُرجع المصادقة الناجحة رمز حالة 200. تُرجع المفاتيح غير الصالحة 401 غير مصرح به.

جلب الأصوات المتاحة باستخدام واجهة برمجة تطبيقات Murf AI

قبل إنشاء الكلام، استرجع قائمة الأصوات المتاحة لاختيار الصوت الذي يناسب حالة استخدامك. تُرجع نقطة النهاية /voices جميع الأصوات التي يمكن الوصول إليها مع بياناتها الوصفية.

سرد جميع الأصوات

import requests

API_KEY = "your_murf_api_key"
BASE_URL = "https://api.murf.ai/v1"

headers = {
    "api-key": API_KEY,
    "Content-Type": "application/json"
}

response = requests.get(f"{BASE_URL}/voices", headers=headers)
voices = response.json()

# Display voice information
for voice in voices[:5]:  # Show first 5 voices
    print(f"Name: {voice['name']}")
    print(f"Voice ID: {voice['voiceId']}")
    print(f"Language: {voice['language']}")
    print(f"Gender: {voice['gender']}")
    print(f"Accent: {voice.get('accent', 'N/A')}")
    print("---")

تتضمن الاستجابة خصائص الصوت:

الخاصيةالوصفمثال
voiceIdمعرف فريد للصوت"en-US-marcus"
nameاسم عرض الصوت"Marcus"
languageرمز اللغة"en-US"
genderجنس الصوت"ذكر" أو "أنثى"
accentاللهجة الإقليمية"أمريكية", "بريطانية"
styleنمط/نبرة الصوت"حوار", "رسمي"

تصفية الأصوات حسب اللغة

# Filter for English voices
english_voices = [v for v in voices if v['language'].startswith('en')]
print(f"English voices available: {len(english_voices)}")

# Filter for Spanish voices
spanish_voices = [v for v in voices if v['language'].startswith('es')]
print(f"Spanish voices available: {len(spanish_voices)}")

توليد الكلام من النص

الوظيفة الأساسية لواجهة برمجة تطبيقات Murf AI هي تحويل النص إلى كلام. تقبل نقطة النهاية /speech معلمات النص والصوت، وتعيد ملفًا صوتيًا.

طلب تحويل النص إلى كلام أساسي

import requests

API_KEY = "your_murf_api_key"
BASE_URL = "https://api.murf.ai/v1"

headers = {
    "api-key": API_KEY,
    "Content-Type": "application/json"
}

payload = {
    "text": "مرحباً بكم في تطبيقنا. تم إنشاء هذا الصوت باستخدام Murf AI.",
    "voiceId": "en-US-marcus",
    "format": "mp3",
    "sampleRate": 24000
}

response = requests.post(
    f"{BASE_URL}/speech",
    headers=headers,
    json=payload
)

if response.status_code == 200:
    # Save the audio file
    with open("output.mp3", "wb") as f:
        f.write(response.content)
    print("تم حفظ الصوت في output.mp3")
else:
    print(f"خطأ: {response.status_code} - {response.text}")

معلمات الطلب

المعلمةالنوعمطلوبالوصف
textسلسلة نصيةنعمالنص المراد تحويله إلى كلام
voiceIdسلسلة نصيةنعممعرف الصوت المراد استخدامه
formatسلسلة نصيةلاتنسيق الإخراج: mp3, wav, flac (افتراضي: mp3)
sampleRateعدد صحيحلامعدل أخذ العينات الصوتية: 8000, 16000, 24000, 48000
speedعائملاسرعة التحدث: من 0.5 إلى 2.0 (افتراضي: 1.0)
pitchعائملاتعديل درجة الصوت: -10 إلى 10

تعديل سرعة الصوت ودرجته

payload = {
    "text": "يتم نطق هذا النص بوتيرة أبطأ وبدرجة صوت أقل.",
    "voiceId": "en-US-marcus",
    "format": "mp3",
    "speed": 0.8,    # 80% of normal speed
    "pitch": -2      # Slightly lower pitch
}

response = requests.post(f"{BASE_URL}/speech", headers=headers, json=payload)

استخدام SSML للتحكم المتقدم

توفر لغة ترميز تركيب الكلام (SSML) تحكمًا دقيقًا في النطق والتوقفات والتركيز والمزيد. تدعم واجهة برمجة تطبيقات Murf AI علامات SSML لإخراج صوت بجودة احترافية.

مثال SSML

ssml_text = """
<speak>
    مرحباً بكم في <emphasis level="strong">Murf AI</emphasis>.
    <break time="500ms"/>
    تقنية تحويل النص إلى كلام لدينا تخلق صوتاً <prosody rate="slow">طبيعي النبرة</prosody>.
    <break time="300ms"/>
    كلمة <phoneme alphabet="ipa" ph="ˈdeɪtə">data</phoneme> تُنطق بشكل صحيح.
</speak>
"""

payload = {
    "text": ssml_text,
    "voiceId": "en-US-julia",
    "format": "mp3",
    "ssml": True  # Enable SSML parsing
}

response = requests.post(f"{BASE_URL}/speech", headers=headers, json=payload)

علامات SSML الشائعة

العلامةالغرضمثال
<break>إدراج وقفة<break time="500ms"/>
<emphasis>التركيز على كلمة<emphasis level="strong">مهم</emphasis>
<prosody>تعديل المعدل/الدرجة<prosody rate="slow">نص</prosody>
<phoneme>نطق مخصص<phoneme alphabet="ipa" ph="...">كلمة</phoneme>
<say-as>الاستدلال كنوع<say-as interpret-as="date">2026-01-29</say-as>

اختبار واجهة برمجة تطبيقات Murf AI باستخدام Apidog

قبل كتابة كود التكامل، اختبر استدعاءات API الخاصة بك بشكل تفاعلي. يوفر Apidog واجهة مرئية لصياغة الطلبات وفحص الاستجابات وتصحيح الأخطاء.

واجهة Apidog تعرض إعدادات طلب API
واجهة Apidog تعرض إعدادات طلب API

إعداد Apidog لـ Murf AI

1. قم بتنزيل وتثبيت Apidog

احصل على Apidog مجانًا. وهو يدعم أنظمة Windows و Mac و Linux ومتصفحات الويب.

زر

2. إنشاء مشروع جديد

ابدأ مشروعًا جديدًا باسم "تكامل Murf AI". هذا يحافظ على تنظيم نقاط نهاية API الخاصة بك.

3. إعداد متغيرات البيئة

أنشئ بيئة بمفتاح API الخاص بك:

{
    "baseUrl": "https://api.murf.ai/v1",
    "apiKey": "your_murf_api_key"
}

تحافظ متغيرات البيئة على البيانات الحساسة منفصلة عن تكوينات الطلبات.

4. إنشاء طلبك الأول

أضف طلب POST جديدًا بهذه الإعدادات:

{
    "text": "اختبار Murf AI API باستخدام Apidog. هذا تعليق صوتي نموذجي.",
    "voiceId": "en-US-marcus",
    "format": "mp3"
}

5. إرسال وفحص الاستجابة

انقر على إرسال. سيعرض Apidog حالة الاستجابة ورؤوسها ويسمح لك بتنزيل ملف الصوت الذي تم إنشاؤه مباشرة.

تصحيح الأخطاء الشائعة باستخدام Apidog

المشكلةكيف يساعد Apidog
401 غير مصرح بهتحقق من رأس api-key في مفتش الطلب
معرف صوت غير صالح (Invalid voiceId)استخدم GET /voices أولاً للتحقق من المعرفات المتاحة
استجابة صوتية فارغةافحص رؤوس الاستجابة لرسائل الخطأ
حدود المعدل (Rate limiting)راقب سجل الطلبات لرموز حالة 429

تتيح لك ميزة سجل الطلبات في Apidog مقارنة الطلبات الناجحة والفاشلة جنبًا إلى جنب، مما يجعل تصحيح الأخطاء أمرًا مباشرًا.

التعامل مع المحتوى طويل النموذج باستخدام واجهة برمجة تطبيقات Murf AI

بالنسبة للمقالات أو منشورات المدونات أو فصول الكتب، قد تحتاج إلى معالجة النص على شكل أجزاء. لدى Murf AI حدود أحرف لكل طلب، لذا فإن تقسيم المحتوى يضمن المعالجة الموثوقة.

استراتيجية التجزئة

import requests

API_KEY = "your_murf_api_key"
BASE_URL = "https://api.murf.ai/v1"

headers = {
    "api-key": API_KEY,
    "Content-Type": "application/json"
}

def chunk_text(text, max_chars=3000):
    """Split text into chunks at sentence boundaries."""
    sentences = text.replace('!', '.').replace('?', '.').split('.')
    chunks = []
    current_chunk = ""

    for sentence in sentences:
        sentence = sentence.strip()
        if not sentence:
            continue

        if len(current_chunk) + len(sentence) + 2 > max_chars:
            chunks.append(current_chunk.strip())
            current_chunk = sentence + ". "
        else:
            current_chunk += sentence + ". "

    if current_chunk.strip():
        chunks.append(current_chunk.strip())

    return chunks

def generate_long_audio(text, voice_id, output_prefix="output"):
    """Generate audio for long-form content."""
    chunks = chunk_text(text)
    audio_files = []

    for i, chunk in enumerate(chunks):
        payload = {
            "text": chunk,
            "voiceId": voice_id,
            "format": "mp3"
        }

        response = requests.post(
            f"{BASE_URL}/speech",
            headers=headers,
            json=payload
        )

        if response.status_code == 200:
            filename = f"{output_prefix}_{i+1}.mp3"
            with open(filename, "wb") as f:
                f.write(response.content)
            audio_files.append(filename)
            print(f"Generated: {filename}")
        else:
            print(f"Failed chunk {i+1}: {response.status_code}")

    return audio_files

# Example usage
long_text = """
محتوى مقالتك الطويلة أو وثيقتك يذهب هنا.
يمكن أن يمتد على عدة فقرات وصفحات.
تقوم الدالة بتقسيمه تلقائيًا عند حدود الجمل.
"""

audio_files = generate_long_audio(long_text, "en-US-marcus", "article_audio")
print(f"Generated {len(audio_files)} audio files")

ربط الملفات الصوتية باستخدام واجهة برمجة تطبيقات Murf AI

بعد إنشاء الأجزاء، قم بدمجها في ملف واحد باستخدام FFmpeg أو مكتبة Python:

from pydub import AudioSegment

def concatenate_audio(file_list, output_file="final_audio.mp3"):
    """Combine multiple audio files into one."""
    combined = AudioSegment.empty()

    for filename in file_list:
        audio = AudioSegment.from_mp3(filename)
        combined += audio

    combined.export(output_file, format="mp3")
    print(f"تم حفظ الصوت المدمج في {output_file}")
    return output_file

# Combine the chunks
concatenate_audio(audio_files, "complete_article.mp3")

أفضل ممارسات معالجة الأخطاء باستخدام واجهة برمجة تطبيقات Murf AI

تتطلب التطبيقات الإنتاجية معالجة قوية للأخطاء. تُرجع واجهة برمجة تطبيقات Murf AI رموز حالة HTTP قياسية مع رسائل خطأ وصفية.

رموز الأخطاء الشائعة

رمز الحالةالمعنىالحل
400طلب سيءتحقق من تنسيق نص الطلب والمعلمات
401غير مصرح بهتحقق من صحة مفتاح API وكونه نشطًا
403ممنوعتحقق من أذونات الحساب وحدود الخطة
429تجاوز حد المعدلطبق التراجع الأسي
500خطأ في الخادمأعد المحاولة بعد تأخير قصير

عميل API قوي

import requests
import time
from typing import Optional

class MurfAPIClient:
    def __init__(self, api_key: str):
        self.api_key = api_key
        self.base_url = "https://api.murf.ai/v1"
        self.headers = {
            "api-key": api_key,
            "Content-Type": "application/json"
        }

    def _request(self, method: str, endpoint: str,
                 data: dict = None, retries: int = 3) -> Optional[requests.Response]:
        """Make API request with retry logic."""
        url = f"{self.base_url}/{endpoint}"

        for attempt in range(retries):
            try:
                if method == "GET":
                    response = requests.get(url, headers=self.headers)
                else:
                    response = requests.post(url, headers=self.headers, json=data)

                if response.status_code == 200:
                    return response
                elif response.status_code == 429:
                    # Rate limited - wait and retry
                    wait_time = 2 ** attempt
                    print(f"Rate limited. Waiting {wait_time}s...")
                    time.sleep(wait_time)
                elif response.status_code >= 500:
                    # Server error - retry
                    time.sleep(1)
                else:
                    # Client error - don't retry
                    print(f"Error {response.status_code}: {response.text}")
                    return None

            except requests.RequestException as e:
                print(f"Request failed: {e}")
                time.sleep(1)

        return None

    def get_voices(self) -> list:
        """Fetch available voices."""
        response = self._request("GET", "voices")
        return response.json() if response else []

    def generate_speech(self, text: str, voice_id: str,
                        format: str = "mp3", **kwargs) -> Optional[bytes]:
        """Generate speech from text."""
        payload = {
            "text": text,
            "voiceId": voice_id,
            "format": format,
            **kwargs
        }
        response = self._request("POST", "speech", payload)
        return response.content if response else None

# Usage
client = MurfAPIClient("your_api_key")
voices = client.get_voices()
audio = client.generate_speech(
    "Hello world!",
    "en-US-marcus",
    speed=1.0
)

if audio:
    with open("output.mp3", "wb") as f:
        f.write(audio)

بناء خدمة توليد تعليقات صوتية

دعنا نبني واجهة برمجة تطبيقات Flask كاملة تغلف Murf AI لتطبيقاتك:

from flask import Flask, request, jsonify, send_file
import requests
import os
import uuid

app = Flask(__name__)

MURF_API_KEY = os.environ.get("MURF_API_KEY")
MURF_BASE_URL = "https://api.murf.ai/v1"

headers = {
    "api-key": MURF_API_KEY,
    "Content-Type": "application/json"
}

@app.route("/api/voices", methods=["GET"])
def list_voices():
    """List available voices."""
    language = request.args.get("language")

    response = requests.get(f"{MURF_BASE_URL}/voices", headers=headers)

    if response.status_code != 200:
        return jsonify({"error": "Failed to fetch voices"}), 500

    voices = response.json()

    if language:
        voices = [v for v in voices if v["language"].startswith(language)]

    return jsonify(voices)

@app.route("/api/synthesize", methods=["POST"])
def synthesize():
    """Generate speech from text."""
    data = request.json

    if not data or "text" not in data:
        return jsonify({"error": "Missing 'text' field"}), 400

    if "voiceId" not in data:
        return jsonify({"error": "Missing 'voiceId' field"}), 400

    payload = {
        "text": data["text"],
        "voiceId": data["voiceId"],
        "format": data.get("format", "mp3"),
        "speed": data.get("speed", 1.0),
        "pitch": data.get("pitch", 0)
    }

    response = requests.post(
        f"{MURF_BASE_URL}/speech",
        headers=headers,
        json=payload
    )

    if response.status_code != 200:
        return jsonify({"error": "Speech generation failed"}), 500

    # Save to temp file
    filename = f"audio_{uuid.uuid4().hex}.mp3"
    filepath = os.path.join("/tmp", filename)

    with open(filepath, "wb") as f:
        f.write(response.content)

    return send_file(
        filepath,
        mimetype="audio/mpeg",
        as_attachment=True,
        download_name=filename
    )

if __name__ == "__main__":
    app.run(debug=True, port=5000)

تعرض هذه الخدمة نقطتي نهاية: واحدة لسرد الأصوات والأخرى لتوليد الكلام. يمكنك توسيعها باستخدام التخزين المؤقت والمصادقة والمعالجة القائمة على قائمة الانتظار للاستخدام الإنتاجي.

حدود المعدل واعتبارات التسعير لواجهة برمجة تطبيقات Murf AI

يفرض Murf AI حدود معدل بناءً على خطة اشتراكك. يساعد فهم هذه الحدود في تصميم تطبيقات فعالة.

تسعير Murf AI API
تسعير Murf AI API

تحسين استخدام واجهة برمجة التطبيقات

التكامل مع الأطر الشائعة

تكامل Node.js

const axios = require('axios');
const fs = require('fs');

const API_KEY = process.env.MURF_API_KEY;
const BASE_URL = 'https://api.murf.ai/v1';

async function generateSpeech(text, voiceId, options = {}) {
    try {
        const response = await axios.post(
            `${BASE_URL}/speech`,
            {
                text,
                voiceId,
                format: options.format || 'mp3',
                speed: options.speed || 1.0,
                pitch: options.pitch || 0
            },
            {
                headers: {
                    'api-key': API_KEY,
                    'Content-Type': 'application/json'
                },
                responseType: 'arraybuffer'
            }
        );

        return Buffer.from(response.data);
    } catch (error) {
        console.error('Error:', error.response?.data || error.message);
        throw error;
    }
}

// Usage
(async () => {
    const audio = await generateSpeech(
        'مرحباً من Node.js!',
        'en-US-marcus'
    );

    fs.writeFileSync('output.mp3', audio);
    console.log('تم حفظ الصوت!');
})();

تكامل React للواجهة الأمامية

import React, { useState } from 'react';

function VoiceGenerator() {
    const [text, setText] = useState('');
    const [voiceId, setVoiceId] = useState('en-US-marcus');
    const [audioUrl, setAudioUrl] = useState(null);
    const [loading, setLoading] = useState(false);

    const generateAudio = async () => {
        setLoading(true);

        try {
            const response = await fetch('/api/synthesize', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ text, voiceId })
            });

            const blob = await response.blob();
            const url = URL.createObjectURL(blob);
            setAudioUrl(url);
        } catch (error) {
            console.error('فشل التوليد:', error);
        } finally {
            setLoading(false);
        }
    };

    return (
        <div className="voice-generator">
            <textarea
                value={text}
                onChange={(e) => setText(e.target.value)}
                placeholder="أدخل النص لتحويله إلى كلام..."
            />

            <select value={voiceId} onChange={(e) => setVoiceId(e.target.value)}>
                <option value="en-US-marcus">ماركوس (ذكر أمريكي)</option>
                <option value="en-US-julia">جوليا (أنثى أمريكية)</option>
                <option value="en-GB-oliver">أوليفر (ذكر بريطاني)</option>
            </select>

            <button onClick={generateAudio} disabled={loading}>
                {loading ? 'جاري التوليد...' : 'توليد الصوت'}
            </button>

            {audioUrl && (
                <audio controls src={audioUrl}>
                    متصفحك لا يدعم تشغيل الصوت.
                </audio>
            )}
        </div>
    );
}

export default VoiceGenerator;

الخلاصة

تفتح واجهة برمجة تطبيقات Murf AI إمكانيات قوية لتحويل النص إلى كلام للمطورين. من التعليقات الصوتية البسيطة إلى الإنتاجات المعقدة متعددة الأصوات، تتعامل واجهة برمجة التطبيقات مع متطلبات متنوعة مع إخراج صوت طبيعي. النقاط الرئيسية:

ابدأ بالطبقة المجانية للتجربة، ثم قم بالتوسع مع نمو تطبيقك. إن الجمع بين الأصوات عالية الجودة وتصميم واجهة برمجة تطبيقات صديقة للمطورين يجعل Murf AI خيارًا قويًا للتطبيقات التي تدعم الصوت.

هل أنت مستعد للبناء؟ قم بتنزيل Apidog لاختبار استدعاءات Murf AI API الخاصة بك وتبسيط سير عمل التطوير لديك.

زر

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات