Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for newspaper "Kicker" #464

Merged
merged 6 commits into from
May 6, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions docs/supported_publishers.md
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,23 @@
<td>&#160;</td>
<td>&#160;</td>
</tr>
<tr>
<td>
<code>Kicker</code>
</td>
<td>
<div>Kicker</div>
</td>
<td>
<a href="https://www.kicker.de/">
<span>www.kicker.de</span>
</a>
</td>
<td>
<code>topics</code>
</td>
<td>&#160;</td>
</tr>
<tr>
<td>
<code>MDR</code>
Expand Down
13 changes: 13 additions & 0 deletions src/fundus/publishers/de/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from datetime import datetime
from typing import Optional

from dateutil.rrule import MONTHLY, rrule

Expand All @@ -15,6 +16,7 @@
from .dw import DWParser
from .faz import FAZParser
from .focus import FocusParser
from .kicker import KickerParser
from .mdr import MDRParser
from .merkur import MerkurParser
from .ndr import NDRParser
Expand Down Expand Up @@ -240,3 +242,14 @@ class DE(PublisherEnum):
],
parser=RheinischePostParser,
)

Kicker = PublisherSpec(
name="Kicker",
domain="https://www.kicker.de/",
sources=[
RSSFeed("https://newsfeed.kicker.de/news/aktuell"),
NewsMap("https://leserservice.kicker.de/sitemap_0.xml"),
Benjamin2107 marked this conversation as resolved.
Show resolved Hide resolved
],
url_filter=regex_filter("/slideshow|/video"),
parser=KickerParser,
)
41 changes: 41 additions & 0 deletions src/fundus/publishers/de/kicker.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import datetime
import re
from typing import List, Optional

from lxml.cssselect import CSSSelector

from fundus.parser import ArticleBody, BaseParser, ParserProxy, attribute
from fundus.parser.utility import (
extract_article_body_with_selector,
generic_author_parsing,
generic_date_parsing,
generic_topic_parsing,
)


class KickerParser(ParserProxy):
class V1(BaseParser):
_paragraph_selector = CSSSelector("div[class=kick__article__content__child] > p")
_summary_selector = CSSSelector("p[class=kick__article__teaser]")
_subheadline_selector = CSSSelector("div[class=kick__article__content__child] > h2")

@attribute
def body(self) -> ArticleBody:
return extract_article_body_with_selector(
self.precomputed.doc,
summary_selector=self._summary_selector,
subheadline_selector=self._subheadline_selector,
paragraph_selector=self._paragraph_selector,
)

@attribute
def authors(self) -> List[str]:
return generic_author_parsing(self.precomputed.ld.bf_search("author"))

@attribute
def publishing_date(self) -> Optional[datetime.datetime]:
return generic_date_parsing(self.precomputed.ld.bf_search("datePublished"))

@attribute
def title(self) -> Optional[str]:
return self.precomputed.meta.get("og:title")
26 changes: 26 additions & 0 deletions tests/resources/parser/test_data/de/Kicker.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"V1": {
"authors": [
"kicker"
],
"body": {
"summary": [
"Trainerwechsel, mit mehr als einem Bein in der Regionalliga: Der MSV Duisburg kann in den letzten Spielen der Saison befreit aufspielen. Das sieht auch Übergangscoach Uwe Schubert so - lässt aber einige Personalfragen offen."
],
"sections": [
{
"headline": [],
"paragraphs": [
"Hatte zwischenzeitlich noch einmal Hoffnung bestanden im Abstiegskampf der dritten Liga, ist spätestens seit dem 0:2 in Ingolstadt am letzten Wochenende klar, dass der MSV Duisburg in der kommenden Saison in der Regionalliga West antreten muss. Die Weichen werden dementsprechend schon jetzt für die kommende Spielzeit gestellt. Am Dienstag musste Trainer Boris Schommers gehen, NLZ-Leiter Uwe Schubert übernimmt bis Saisonende - und hat \"nicht mehr viel zu verlieren\", wie er auf der Pressekonferenz vor dem Heimspiel gegen Sandhausen zugab.",
"Rechnerisch ist der Abstieg zwar noch nicht durch, bei einem Mannheimer Sieg in Verl würde der MSV jedoch bereits am Samstagabend als Absteiger feststehen - sollte er nicht selber gewinnen. Dass ein Sieg den sich abzeichnenden Gang in Liga vier bestenfalls aufschieben würde, ist den Beteiligten an der Wedau trotzdem klar, so Schubert: \"Wir stehen nicht ohne Grund da, wo wir stehen. Sonst wäre ich auch nicht der vierte Trainer. Da gibt es mit Sicherheit viele, viele Gründe, die in Summe dann die Ursache waren.\"",
"Dennoch betont der Übergangstrainer: \"Natürlich möchten wir so viele Punkte wie möglich holen, aber auch das Auftreten der Mannschaft wird etwas Entscheidendes für mich sein. Ich werde die Spieler an ihrer Ehre packen, dass wir bis zum Schluss alles geben.\" Auch für die treuen Anhänger, die in der Vergangenheit oft leiden mussten: \"In Duisburg stehen die Fans wie eine Macht hinter dem MSV, hinter der Mannschaft. Wenn man Leistungen abliefert und versucht, alles zu geben\", so der Interimscoach der Meidericher. \"Ich denke, dass das unsere Aufgabe sein wird. Nochmal alles versuchen, dass die Mannschaft einfach brennt.\"",
"So werden die letzten Spiele auf bundesweiter Ebene für die Spieler auch eine Möglichkeit darstellen, sich noch einmal zu präsentieren: \"Es ist eine Möglichkeit, dass sich jeder zeigen kann\", sagt Schubert. \"Wir werden im Trainerteam entscheiden, was die Trainingsleistungen in der Woche ausgesagt haben.\" Eine andere Ausrichtung werde er explizit nicht ausschließen.",
"Möglicherweise stehen in den letzten Wochen der Saison dann auch einige U-19-Spieler auf dem Rasen, die NLZ-Leiter Schubert bestens bekannt sein sollten - und sich für einen Platz in der neuen Regionalligamannschaft empfehlen könnten. Konkrete Personalentscheidungen seien an der Stelle aber noch nicht gefallen. In jedem Fall wollen die Zebras nach letzter Woche die Saison erhobenen Hauptes zu einem versöhnlichen Ende bringen - damit zusammen mit den Fans in der kommenden Saison der Angriff auf die Rückkehr in den Profifußball unternommen werden kann."
]
}
]
},
"publishing_date": "2024-04-26 15:24:10+02:00",
"title": "Interimstrainer Schubert: \"Nicht mehr viel zu verlieren\""
}
}
Binary file not shown.
4 changes: 4 additions & 0 deletions tests/resources/parser/test_data/de/meta.info
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@
"url": "https://www.focus.de/kaufberatung/deals_angebote/may-the-4th-be-with-you-lego-feiert-den-star-wars-tag-mit-neuen-sets-und-exklusiven-geschenken_id_92942238.html",
"crawl_date": "2023-04-28 20:21:13.976503"
},
"Kicker_2024_04_26.html.gz": {
"url": "https://www.kicker.de/interimstrainer-schubert-nicht-mehr-viel-zu-verlieren-1019241/artikel#omrss",
"crawl_date": "2024-04-26 15:37:39.609270"
},
"MDR_2023_04_28.html.gz": {
"url": "https://www.mdr.de/nachrichten/thueringen/sued-thueringen/schmalkalden-meiningen/schlachtung-fleisch-schwein-wirtschaft-landstolz-100.html",
"crawl_date": "2023-04-28 20:22:36.765570"
Expand Down