API دیوار چیست؟ راهنمای کنار دیوار و نمونه کد C#

یادداشت به‌روزرسانی — ۱۰ آبان ۱۴۰۵: نسخهٔ اولیهٔ این نوشته در ۱۳ شهریور ۱۳۹۹ منتشر شد و دربارهٔ بررسی رابط‌های داخلی دیوار بود. آدرس‌ها، ساختار پاسخ‌ها و روش‌های آن نسخه را نباید راهنمای فعلی اتصال به دیوار دانست. این نوشته برای معرفی مسیر رسمی و اصلاح نمونهٔ آموزشی بازنویسی شده است.

📩 با عضویت در خبرنامه، جدیدترین مطالب و آموزش‌ها را مستقیم در ایمیل خود دریافت کنید.

خبرنامه

اگر می‌خواهید نرم‌افزار خود را به دیوار متصل کنید، نقطهٔ شروع امروز مستندات رسمی کنار دیوار است. API یا «رابط برنامه‌نویسی کاربردی» امکان ارتباط نرم‌افزارها را فراهم می‌کند؛ این مفهوم با رابط کاربری یا UI تفاوت دارد.

آیا دیوار API رسمی دارد؟

بله؛ کنار دیوار بستری برای توسعهٔ خدمات مرتبط با آگهی‌ها و چت است. دسترسی هر برنامه به مجوزها و قابلیت‌های همان سرویس بستگی دارد. وجود API رسمی به معنای دسترسی آزاد به همهٔ داده‌های دیوار نیست.

از کجا شروع کنیم؟

  1. راهنمای کنار دیوار را بخوانید و طبق توصیهٔ آن، ایدهٔ برنامه را پیش از توسعه با پشتیبانی مطرح کنید.
  2. در پنل کنار، برنامهٔ تستی و کلید API بسازید.
  3. مجوزهای لازم و محیط تست سرویس موردنظر را بررسی کنید.
  4. درخواست را مطابق مستندات همان سرویس ارسال کنید. کلید برنامه در هدر x-api-key قرار می‌گیرد؛ برخی عملیات نیز به اجازهٔ کاربر از طریق OAuth 2.0 نیاز دارند.

نمونهٔ درخواست در C#

نمونهٔ زیر برای یک برنامهٔ کنسولی با .NET 8 نوشته شده و ساختار ارسال درخواست جست‌وجوی آگهی را نشان می‌دهد. اجرای موفق آن به کلید معتبر و مجوز SEARCH_POST نیاز دارد. این نمونه بدون کلید و مجوز واقعی، آزمون اتصال به سرویس محسوب نمی‌شود.

using System.Net.Http.Json;
using System.Text.Json;

var apiKey = Environment.GetEnvironmentVariable("DIVAR_API_KEY")
    ?? throw new InvalidOperationException("Set DIVAR_API_KEY first.");

using var client = new HttpClient
{
    Timeout = TimeSpan.FromSeconds(30)
};
using var request = new HttpRequestMessage(
    HttpMethod.Post,
    "https://open-api.divar.ir/v2/open-platform/finder/post");

request.Headers.Add("x-api-key", apiKey);
request.Content = JsonContent.Create(new
{
    category = "apartment-rent",
    city = "tehran",
    query = new
    {
        size = new { min = 80, max = 190 },
        only_with_parking = true
    }
});

using var response = await client.SendAsync(request);
if (!response.IsSuccessStatusCode)
{
    Console.Error.WriteLine($"Request failed: {(int)response.StatusCode}");
    return;
}

await using var stream = await response.Content.ReadAsStreamAsync();
using var document = await JsonDocument.ParseAsync(stream);
if (document.RootElement.TryGetProperty("posts", out var posts))
{
    foreach (var post in posts.EnumerateArray())
    {
        if (post.TryGetProperty("title", out var title))
            Console.WriteLine(title.GetString());
    }
}

کلید را در متغیر محیطی سمت سرور نگه دارید؛ آن را در کد، مخزن گیت یا جاوااسکریپت مرورگر قرار ندهید. در نرم‌افزار واقعی، خطاهای شبکه و پایان مهلت درخواست را مدیریت کنید و از ثبت اطلاعات محرمانه در لاگ‌ها پرهیز کنید.

محدودیت جست‌وجو و صفحه‌بندی

در زمان بررسی این نوشته، مستندات جست‌وجوی آگهی سقف مجموعاً ۱۰۰ فراخوانی را حتی برای برنامه‌های منتشرشده اعلام می‌کند. این سرویس صفحه‌بندی ندارد و حداکثر ۱۰۰ آگهی جدید برمی‌گرداند. بنابراین روش قدیمی last_post_date این مقاله را نمی‌توان به API رسمی تعمیم داد. پیش از طراحی محصول، محدودیت روز را دوباره در مستندات بررسی کنید.

شهرها و اطلاعات تماس

برای مقادیر شهر و دسته‌بندی به مرجع رسمی همان API رجوع کنید. استخراج داده از HTML با عبارت باقاعده به ساختار داخلی صفحه وابسته است و با تغییر سایت می‌شکند. همچنین کپی کوکی ورود از مرورگر، جایگزین دریافت مجوز برنامه و رضایت کاربر نیست. راهنمای قدیمی دریافت شماره و ادعاهای افزایش سهمیه با تغییر هدرها از این نسخه حذف شده‌اند.

پروژهٔ قدیمی این نوشته

نشانی پروژهٔ معرفی‌شده در نسخهٔ اولیه RezaParsian/Divar در گیت‌هاب است. این پیوند برای حفظ سابقهٔ مقاله آمده است؛ سازگاری فعلی کدهای آن با دیوار در این بازنویسی تأیید نشده است.

بروزرسانی‌های خبرنامه

آدرس رایانامه‌ی خود را در زیر وارد کنید و مشترک خبرنامه‌ی ما شوید.

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *