Add medboom.ir as an ingestion source (doctor/dentist-heavy, VPN-free)
New MedboomListingSource: a WordPress medical-classifieds board crawled like medjobs (wp-sitemap.xml -> posts-post-N.xml, newest first), filtered to clinical-role slugs and Tehran-only for launch. medboom skews toward doctors/dentists/pharmacists and carries both hiring and availability posts, so it directly broadens the role mix the nurse-heavy Divar content lacks. Iranian-hosted -> no proxy/VPN needed (relevant now that Telegram is off). Wired like the other sources: AppSetting toggles (MedboomEnabled/MaxAds/UseProxy) + EF migration, SettingsService persistence, admin Settings UI, DI registration. Off by default. Validated against live data: Tehran clinical ads at named clinics (pharmacy/dental/etc.). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -157,6 +157,16 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="source-box">
|
||||
<label class="toggle-row">
|
||||
<input type="checkbox" name="MedboomEnabled" value="true" checked="@Model.MedboomEnabled" />
|
||||
<span class="t-body"><span>🩺 مدبوم (medboom.ir)</span><span class="t-hint">آگهیهای علوم پزشکی (بیشتر پزشک/دندانپزشک)، استخدام و آمادهبهکار؛ بدون نیاز به فیلترشکن.</span></span>
|
||||
</label>
|
||||
<div class="filter-group"><label>حداکثر آگهی در هر اجرا</label><input type="number" name="MedboomMaxAds" min="1" max="500" value="@Model.MedboomMaxAds" dir="ltr" />
|
||||
<label class="proxy-toggle"><input type="checkbox" name="MedboomUseProxy" value="true" checked="@Model.MedboomUseProxy" /> از پروکسی استفاده شود</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="source-box">
|
||||
<label class="toggle-row">
|
||||
<input type="checkbox" name="WebsitesEnabled" value="true" checked="@Model.WebsitesEnabled" />
|
||||
|
||||
@@ -50,6 +50,9 @@ public class SettingsModel : PageModel
|
||||
[BindProperty] public bool IranEstekhdamEnabled { get; set; }
|
||||
[BindProperty] public int IranEstekhdamMaxAds { get; set; } = 40;
|
||||
[BindProperty] public bool IranEstekhdamUseProxy { get; set; }
|
||||
[BindProperty] public bool MedboomEnabled { get; set; }
|
||||
[BindProperty] public int MedboomMaxAds { get; set; } = 40;
|
||||
[BindProperty] public bool MedboomUseProxy { get; set; }
|
||||
[BindProperty] public bool SmsEnabled { get; set; }
|
||||
[BindProperty] public string? SmsApiKey { get; set; }
|
||||
[BindProperty] public string? SmsTemplate { get; set; }
|
||||
@@ -101,6 +104,9 @@ public class SettingsModel : PageModel
|
||||
IranEstekhdamEnabled = s.IranEstekhdamEnabled;
|
||||
IranEstekhdamMaxAds = s.IranEstekhdamMaxAds;
|
||||
IranEstekhdamUseProxy = s.IranEstekhdamUseProxy;
|
||||
MedboomEnabled = s.MedboomEnabled;
|
||||
MedboomMaxAds = s.MedboomMaxAds;
|
||||
MedboomUseProxy = s.MedboomUseProxy;
|
||||
SmsEnabled = s.SmsEnabled;
|
||||
SmsApiKey = s.SmsApiKey;
|
||||
SmsTemplate = s.SmsTemplate;
|
||||
@@ -149,6 +155,9 @@ public class SettingsModel : PageModel
|
||||
IranEstekhdamEnabled = IranEstekhdamEnabled,
|
||||
IranEstekhdamMaxAds = IranEstekhdamMaxAds,
|
||||
IranEstekhdamUseProxy = IranEstekhdamUseProxy,
|
||||
MedboomEnabled = MedboomEnabled,
|
||||
MedboomMaxAds = MedboomMaxAds,
|
||||
MedboomUseProxy = MedboomUseProxy,
|
||||
SmsEnabled = SmsEnabled,
|
||||
SmsApiKey = SmsApiKey,
|
||||
SmsTemplate = SmsTemplate,
|
||||
|
||||
Reference in New Issue
Block a user