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 20 Minuten #638

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all 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 @@ -227,6 +227,23 @@
</td>
<td>&#160;</td>
</tr>
<tr>
<td>
<code>ZwanzigMinuten</code>
</td>
<td>
<div>Zwanzig Minuten</div>
</td>
<td>
<a href="https://www.20min.ch/">
<span>www.20min.ch</span>
</a>
</td>
<td>
<code>topics</code>
</td>
<td>&#160;</td>
</tr>
</tbody>
</table>

Expand Down
12 changes: 12 additions & 0 deletions src/fundus/publishers/ch/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from .nzz import NZZParser
from .srf import SRFParser
from .ta import TAParser
from .zwanzig_minuten import ZwanzigMinutenParser

# noinspection PyPep8Naming

Expand Down Expand Up @@ -44,3 +45,14 @@ class CH(metaclass=PublisherGroup):
),
],
)
ZwanzigMinuten = Publisher(
name="Zwanzig Minuten",
domain="https://www.20min.ch/",
parser=ZwanzigMinutenParser,
sources=[
NewsMap("https://www.20min.ch/sitemaps/de/news.xml"),
Sitemap("https://www.20min.ch/sitemaps/de/articles.xml"),
NewsMap("https://www.20min.ch/sitemaps/fr/news.xml"),
Sitemap("https://www.20min.ch/sitemaps/fr/articles.xml"),
Comment on lines +53 to +56
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We definitive need a solution for the mixed languages at some pint😅

],
)
41 changes: 41 additions & 0 deletions src/fundus/publishers/ch/zwanzig_minuten.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import datetime
from typing import List, Optional

from lxml.etree import XPath

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


class ZwanzigMinutenParser(ParserProxy):
class V1(BaseParser):
_summary_selector = XPath(
"//div[@class='Article_elementLead__N3pGr']/p| " "//div[@type='typeInfoboxSummary']//li"
)
_subheadline_selector = XPath("//section[@class='Article_body__60Liu']//h2[contains(@class, 'crosshead')]")
_paragraph_selector = XPath("//div[@class='Article_elementTextblockarray__WNyan']/p")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The list box at the beginning of this article isn't completely extracted.


@attribute
def body(self) -> Optional[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")
36 changes: 36 additions & 0 deletions tests/resources/parser/test_data/ch/ZwanzigMinuten.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"V1": {
"authors": [
"Simon Misteli"
],
"body": {
"summary": [
"Laurent Vinatier wurde im Juni in Moskau festgenommen. Nun sprach ein Gericht drei Jahre Haft gegen ihn aus. Vorgeworfen wird ihm das Sammeln von Militärinformationen.",
"Ein in Moskau verhafteter Franzose erhielt drei Jahre Gefängnisstrafe.",
"Er arbeitete für das Schweizer NGO HD Centre.",
"Im wird vorgeworfen, russische Militärinformationen gesammelt zu haben."
],
"sections": [
{
"headline": [],
"paragraphs": [
"Anfang Juni wurde in Moskau der Franzose Laurent Vinatier festgenommen, der für das Schweizer NGO HD Centre (Zentrum für humanitären Dialog) gearbeitet hatte.",
"Vorgeworfen wird ihm das Sammeln russischer Militärinformationen und eine fehlende Registrierung als «ausländischer Agent». Nun wurde er zu drei Jahren Haft im Straflager verurteilt."
]
},
{
"headline": [
"In Russland als Auslandsagent verurteilt"
],
"paragraphs": [
"Das Gericht verminderte somit die von der Staatsanwaltschaft verlangte Strafe. Diese forderte fünf Jahre Haft oder Zwangsarbeit. Die Verteidigung hatte eine Geldstrafe vorgeschlagen.",
"«Ich bitte Russland um Verzeihung, dass ich die Gesetze der Russischen Föderation nicht beachtet habe», sagte Vinatier. Er kenne Russland seit 20 Jahren und habe sich in das Land verliebt, so zitiert ihn die russische Nachrichtenagentur Interfax.",
"Gemäss dem russischen Gesetz über die sogenannten Auslandsagenten müssen sich Organisationen und Personen registrieren, die ganz oder teilweise aus dem Ausland finanziert werden. Das Gesetz wird oft dazu genutzt, Regierungskritiker zu verfolgen."
]
}
]
},
"publishing_date": "2024-10-15 21:01:17+02:00",
"title": "Laurent Vinatier: Franzose in Russland zu drei Jahren Haft"
}
}
Binary file not shown.
4 changes: 4 additions & 0 deletions tests/resources/parser/test_data/ch/meta.info
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,9 @@
"TagesAnzeiger_2024_09_04.html.gz": {
"url": "https://www.tagesanzeiger.ch/chiesa-ruft-zum-politischen-widerstand-gegen-asylpolitik-auf-150193073111",
"crawl_date": "2024-09-04 15:17:02.716793"
},
"ZwanzigMinuten_2024_10_15.html.gz": {
"url": "https://www.20min.ch/story/russland-franzose-war-fuer-schweizer-ngo-taetig-drei-jahre-haft-103202511",
"crawl_date": "2024-10-15 21:08:09.472647"
}
}