40 lines
1.4 KiB
C#
40 lines
1.4 KiB
C#
using System.Threading.Tasks;
|
|
using Microsoft.Playwright;
|
|
|
|
namespace FinlyticNews.Adapters.Scraping;
|
|
|
|
/// <summary>
|
|
/// Specialized article detail scraper adapter for Finanznachrichten.de.
|
|
/// </summary>
|
|
public class FinanznachrichtenScraperAdapter : ArticleScraperAdapter
|
|
{
|
|
/// <inheritdoc />
|
|
public override string Hostname => "finanznachrichten.de";
|
|
|
|
/// <inheritdoc />
|
|
public override string ArticleBodySelector => "#article-content, div.article-text, div.headlineBody";
|
|
|
|
/// <inheritdoc />
|
|
public override async Task<string?> TryResolveRedirectUrlAsync(IPage page)
|
|
{
|
|
// 1. Bereits auf der Nachricht-Komplett Seite -> Kein Redirect nötig
|
|
if (page.Url.Contains("/ext/nachricht-komplett"))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
// 2. Extraktion der nachrichtid aus dem Rating Widget (sehr zuverlässig bei FN)
|
|
var locator = page.Locator("#article--rating-data").First;
|
|
if (await locator.CountAsync() > 0)
|
|
{
|
|
var nachrichtId = await locator.GetAttributeAsync("data-nachrichtid");
|
|
if (!string.IsNullOrEmpty(nachrichtId))
|
|
{
|
|
return $"https://www.finanznachrichten.de/ext/nachricht-komplett-{nachrichtId}-0.htm";
|
|
}
|
|
}
|
|
|
|
// 3. Fallback auf Standard "Weiterlesen"-Button Verhalten der Basisklasse
|
|
return await base.TryResolveRedirectUrlAsync(page);
|
|
}
|
|
} |