From fef9fc966431703a75907e7601952315067a3cc1 Mon Sep 17 00:00:00 2001 From: Adrian Breiding Date: Thu, 23 Jan 2025 22:26:52 +0100 Subject: [PATCH 1/3] add tanzanian publishers --- docs/supported_publishers.md | 51 +++++++ src/fundus/publishers/__init__.py | 2 + src/fundus/publishers/tz/__init__.py | 32 ++++ src/fundus/publishers/tz/daily_news_tz.py | 57 +++++++ .../parser/test_data/tz/DailyNewsTZ.json | 144 ++++++++++++++++++ .../tz/DailyNewsTZ_2025_01_23.html.gz | Bin 0 -> 24391 bytes .../parser/test_data/tz/HabariLeo.json | 110 +++++++++++++ .../test_data/tz/HabariLeo_2025_01_23.html.gz | Bin 0 -> 21951 bytes tests/resources/parser/test_data/tz/meta.info | 10 ++ 9 files changed, 406 insertions(+) create mode 100644 src/fundus/publishers/tz/__init__.py create mode 100644 src/fundus/publishers/tz/daily_news_tz.py create mode 100644 tests/resources/parser/test_data/tz/DailyNewsTZ.json create mode 100644 tests/resources/parser/test_data/tz/DailyNewsTZ_2025_01_23.html.gz create mode 100644 tests/resources/parser/test_data/tz/HabariLeo.json create mode 100644 tests/resources/parser/test_data/tz/HabariLeo_2025_01_23.html.gz create mode 100644 tests/resources/parser/test_data/tz/meta.info diff --git a/docs/supported_publishers.md b/docs/supported_publishers.md index d8cf5972..4d122657 100644 --- a/docs/supported_publishers.md +++ b/docs/supported_publishers.md @@ -1608,6 +1608,57 @@ +## TZ-Publishers + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class                                Name                                                                        URL                                                        Missing AttributesAdditional Attributes    
+ DailyNewsTZ + +
Daily News (Tanzania)
+
+ + www.dailynews.co.tz + + + topics +  
+ HabariLeo + +
Habari Leo
+
+ + www.habarileo.co.tz + + + topics +  
+ + ## UK-Publishers diff --git a/src/fundus/publishers/__init__.py b/src/fundus/publishers/__init__.py index ef936993..26e87a35 100644 --- a/src/fundus/publishers/__init__.py +++ b/src/fundus/publishers/__init__.py @@ -19,6 +19,7 @@ from fundus.publishers.no import NO from fundus.publishers.tr import TR from fundus.publishers.tw import TW +from fundus.publishers.tz import TZ from fundus.publishers.uk import UK from fundus.publishers.us import US @@ -73,3 +74,4 @@ class PublisherCollection(metaclass=PublisherCollectionMeta): jp = JP it = IT tw = TW + tz = TZ diff --git a/src/fundus/publishers/tz/__init__.py b/src/fundus/publishers/tz/__init__.py new file mode 100644 index 00000000..f2b41171 --- /dev/null +++ b/src/fundus/publishers/tz/__init__.py @@ -0,0 +1,32 @@ +from fundus.publishers.base_objects import Publisher, PublisherGroup +from fundus.scraping.filter import inverse, regex_filter +from fundus.scraping.url import NewsMap, RSSFeed, Sitemap + +from .daily_news_tz import DailyNewsTZParser + + +class TZ(metaclass=PublisherGroup): + DailyNewsTZ = Publisher( + name="Daily News (Tanzania)", + domain="https://www.dailynews.co.tz/", + parser=DailyNewsTZParser, + sources=[ + Sitemap( + "https://www.dailynews.co.tz/sitemap_index.xml", + sitemap_filter=inverse(regex_filter("post-sitemap")), + reverse=True, + ), + ], + ) + HabariLeo = Publisher( + name="Habari Leo", + domain="https://www.habarileo.co.tz/", + parser=DailyNewsTZParser, + sources=[ + Sitemap( + "https://www.habarileo.co.tz/sitemap_index.xml", + sitemap_filter=inverse(regex_filter("post-sitemap")), + reverse=True, + ), + ], + ) \ No newline at end of file diff --git a/src/fundus/publishers/tz/daily_news_tz.py b/src/fundus/publishers/tz/daily_news_tz.py new file mode 100644 index 00000000..f97052c4 --- /dev/null +++ b/src/fundus/publishers/tz/daily_news_tz.py @@ -0,0 +1,57 @@ +import re +from datetime import datetime +from typing import List, Optional + +from lxml.cssselect import CSSSelector +from lxml.etree import XPath + +from fundus.parser import ( + ArticleBody, + BaseParser, + Image, + ParserProxy, + attribute, + utility, +) +from fundus.parser.utility import image_extraction + + +class DailyNewsTZParser(ParserProxy): + class V1(BaseParser): + _summary_selector = CSSSelector("div.cs-entry__subtitle") + _subheadline_selector = XPath("//div[@class='entry-content']//p[not(text() or position()=1)]//span//strong") + _paragraph_selector = XPath("//div[@class='entry-content']//p[text() or position()=1]") + + @attribute + def title(self) -> Optional[str]: + return re.sub(r"(?i)\s*-\s*(daily\s*news|habari\s*leo)\s*", "", self.precomputed.meta.get("og:title") or "") + + @attribute + def body(self) -> Optional[ArticleBody]: + article_body = utility.extract_article_body_with_selector( + self.precomputed.doc, + summary_selector=self._summary_selector, + subheadline_selector=self._subheadline_selector, + paragraph_selector=self._paragraph_selector, + ) + return article_body + + @attribute + def authors(self) -> List[str]: + return utility.generic_author_parsing(self.precomputed.meta.get("twitter:data1")) + + @attribute + def publishing_date(self) -> Optional[datetime]: + return utility.generic_date_parsing(self.precomputed.ld.bf_search("datePublished")) + + @attribute + def images(self) -> List[Image]: + return image_extraction( + doc=self.precomputed.doc, + paragraph_selector=self._paragraph_selector, + image_selector=XPath("//figure//img[1]|//div[@id='content']//p/img"), + caption_selector=XPath( + "./ancestor::figure//figcaption | " + "./ancestor::div[@class='cs-entry__thumbnail']//div[@class='cs-entry__thumbnail-caption']" + ), + ) diff --git a/tests/resources/parser/test_data/tz/DailyNewsTZ.json b/tests/resources/parser/test_data/tz/DailyNewsTZ.json new file mode 100644 index 00000000..e4e3e7ca --- /dev/null +++ b/tests/resources/parser/test_data/tz/DailyNewsTZ.json @@ -0,0 +1,144 @@ +{ + "V1": { + "authors": [ + "Sauli Giliard" + ], + "body": { + "summary": [], + "sections": [ + { + "headline": [], + "paragraphs": [ + "LINDI: IT’s around 8:00pm but Aisha Mohamed is still busy with her business close to Lindi Bus Stand’s exit door.", + "The mother of three says she is confident of doing business until late hours, thanks to the solar-powered streetlights installed in Lindi town and public areas. Advertisement", + "ALSO READ: Solar firm to boost clean energy uptake" + ] + }, + { + "headline": [ + "Lighting businesses" + ], + "paragraphs": [ + "According to Amina Salum, 34, after the 2016/2017 fiscal year, small women traders’ businesses not only started growing steadily but also, they gained confidence in trading during later hours. “It is because most of us, women, feel that nothing can harm us in places where there is light,” says the mother of four who vends food in nearly 500 metres away from Lindi Bus Terminal.", + "Counting her fingers, Amina says now she can create a profit of 10,000/- to 15,000/- per day. She reveals that the key factor for the success is that her business is “visible” by the courtesy of light from solar powered lights in her locality." + ] + }, + { + "headline": [ + "Affordability of solar power" + ], + "paragraphs": [ + "In the financial year of 2016/17, the Lindi Municipal Council decided, among other issues, to install solar powered lights in streets.", + "The reasons are not only to turn the old town look attractive but also to boost security and improve the working environment especially for the people who work or trade in the late hours. The Municipal’s economist Jeremiah Mbelu reveals that the council agreed to install 155 poles of solar lights.", + "“Each pole cost 4m/-,” says Jeremiah who is working in the Municipal’s planning office. This means that the first phase of the project cost 620m/-.", + "He adds that the next phase will be accomplished immediately after the ongoing projects construction of the street roads of Lindi town.", + "Asked why the Municipal decided to spend more than 600m/- per single project, a bit higher than gas and hydropower, the economist replies, “Yes, it is expensive to install solar powered lights in the streets. The initial cost is too high” but “we don’t have another cost after installation. No electricity bills because we use solar as a source of energy.”", + "Before this project which covers distance of 6.2km, the Lindi Municipal Director, Jomaary Satura says, there were four streetlights powered by electricity around Bus Stand and Sokoine Street. “At the end of the month, the bill was 4m/- entailing that each streetlight was ‘eating’ an average of 1m/- per month,” he adds.", + "After the efficiency of the solar powered lights in Lindi town, Regional Commissioner of Lindi, Godfrey Zambi says the programme will be implemented in all towns. Zambi who doubles as region’s security committee chairman believes that the Lindi town is safe from hooligans’ acts because they can no longer hide in darkness as they used to.", + "The regional government is opting for solar powered light over other sources as Energy Access Situation Report, 2016 Tanzania Mainland report indicates solar is second reliable source of energy for lighting.", + "While the 2012 Population and Housing Census report indicates that Lindi has a population of 864,652, the Mainland’s energy report reveals that 14.8 percent of residents are relying on solar as a source of energy for lighting. Apart from solar, the report adds, other sources of energy for lighting used by Lindi residents are Electricity (5.4%), generator (0%), kerosene (12.8%), candle (2.6%), rechargeable (63.6%), firewood (1.5%) and charcoal (0.5%)." + ] + }, + { + "headline": [ + "Sustainable Development Goals 7, 11" + ], + "paragraphs": [ + "In lighting the town through solar energy, Lindi municipality is implementing two Sustainable Development Goals (SDGs) at ago. These are SDGs 7 and 11 which focus on affordable and clean energy and Sustainable Cities and Communities respectively.", + "According to SDG 11, half of humanity (3.5 billion people), including Amina and Mariam, lives in cities/town today and 5 billion people are projected to live in cities by 2030. Lindi traders are now thriving, growing and eliminating poverty in the safe environment as Tanzania is eyeing to join the club of the middle-income countries.", + "The world’s cities occupy just 3 per cent of the Earth’s land, but account for 60-80 per cent of energy consumption and 75 per cent of carbon emissions, turning them not better place to live and work. But the Lindi Municipality has opted renewable energy to make the fastest growing town not only a safe place to work but also reducing bills, maintenance cost while conserving environment through usage of renewable energy." + ] + }, + { + "headline": [ + "Safer Cities for inclusive development" + ], + "paragraphs": [ + "As SGD 7 predicts that half of population of the world will be in cities and town by 2030, researcher Dr Kalpana Viswanath writes in an article published in UN Habitat website titled ‘Creating Engagement in Public Spaces for Safer Cities for Women’ that “Women face the fear of sexual violence as a constant threat to their ability to move around, to work and their general well-being.”", + "While the researcher is calling for affirmative actions to make cities and towns better place for women to live, Mr Deogratius Temba, who is working with Tanzania Gender Networking Programme (TGNP) as Programme Officer, Mobilization and Outreach, says lights in town or cities is a solution for minimizing crimes against girls and women.", + "In the darkness, Mr Temba says, women can be harassed, attacked by robbers or raped and suppose they report such issues to police, no clear evidence can be presented because, “they can’t mark them in darkness.”", + "He adds, when towns, like Lindi, install light infrastructures, act as security guard because there is evidence of low level of attacks to women and girls in places where there is light. Another advantage, according to Temba, is that female students can walk freely in areas with where there is light without be harmed.", + "He adds some students are being forced to walk long distance to their respective schools. He says due to distance, they are being forced to go to school early and return home. So, if they pass in areas where there is light, he adds, they are safe." + ] + }, + { + "headline": [ + "Street lighting" + ], + "paragraphs": [ + "According to study conducted by Teri Allery of North Dakota State University and his fellows titled ‘Solar Street Lighting: Using Renewable Energy for Safety for the Turtle Mountain Band of Chippewa’ in 2018, street lighting has been around “since humans began living together.”", + "In their study, researchers explain different ways used to light the streets as early as 500 BC saying “the ancient Romans used oil lamps filled with vegetable oil in front of their homes. In 1802, William Murdock used a gas light fuelled with coal gas.”", + "Although Lindi has various sources of power, including gas, for the case of sustainability, the municipal has changed from traditional way of lighting its streets to embark on renewable energy." + ] + } + ] + }, + "images": [ + { + "versions": [ + { + "url": "https://dailynews.co.tz/wp-content/uploads/2024/07/sola-solar--300x212.jpg", + "query_width": null, + "size": { + "width": 300, + "height": 212 + }, + "type": "image/jpeg" + }, + { + "url": "https://dailynews.co.tz/wp-content/uploads/2024/07/sola-solar-.jpg", + "query_width": null, + "size": { + "width": 617, + "height": 437 + }, + "type": "image/jpeg" + } + ], + "is_cover": true, + "description": null, + "caption": null, + "authors": [], + "position": 505 + }, + { + "versions": [ + { + "url": "https://dailynews.co.tz/wp-content/uploads/2024/07/solar-300x242.jpg", + "query_width": null, + "size": { + "width": 300, + "height": 242 + }, + "type": "image/jpeg" + }, + { + "url": "https://dailynews.co.tz/wp-content/uploads/2024/07/solar-768x619.jpg", + "query_width": null, + "size": { + "width": 768, + "height": 619 + }, + "type": "image/jpeg" + }, + { + "url": "https://dailynews.co.tz/wp-content/uploads/2024/07/solar.jpg", + "query_width": null, + "size": { + "width": 813, + "height": 655 + }, + "type": "image/jpeg" + } + ], + "is_cover": false, + "description": null, + "caption": null, + "authors": [], + "position": 535 + } + ], + "publishing_date": "2019-04-24 06:59:25+00:00", + "title": "Solar-powered streetlights boost Lindi women’s businesses" + } +} diff --git a/tests/resources/parser/test_data/tz/DailyNewsTZ_2025_01_23.html.gz b/tests/resources/parser/test_data/tz/DailyNewsTZ_2025_01_23.html.gz new file mode 100644 index 0000000000000000000000000000000000000000..f51d64ca1068ffee5eb395c07796e24edbc73bab GIT binary patch literal 24391 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

!t2~0;mO^XDd`nC&(RLe&&OYG9nN3w9E{Sz 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 Date: Thu, 23 Jan 2025 22:27:56 +0100 Subject: [PATCH 2/3] black --- src/fundus/publishers/tz/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fundus/publishers/tz/__init__.py b/src/fundus/publishers/tz/__init__.py index f2b41171..76f698fb 100644 --- a/src/fundus/publishers/tz/__init__.py +++ b/src/fundus/publishers/tz/__init__.py @@ -29,4 +29,4 @@ class TZ(metaclass=PublisherGroup): reverse=True, ), ], - ) \ No newline at end of file + ) From 33a2fbec7d20940f7a123e40db4c4b10a8d235ba Mon Sep 17 00:00:00 2001 From: Adrian Breiding Date: Tue, 4 Feb 2025 17:09:24 +0100 Subject: [PATCH 3/3] update paragraph_selector --- src/fundus/publishers/tz/daily_news_tz.py | 9 ++++++++- tests/resources/parser/test_data/tz/DailyNewsTZ.json | 10 ++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/fundus/publishers/tz/daily_news_tz.py b/src/fundus/publishers/tz/daily_news_tz.py index f97052c4..6d21a246 100644 --- a/src/fundus/publishers/tz/daily_news_tz.py +++ b/src/fundus/publishers/tz/daily_news_tz.py @@ -20,7 +20,14 @@ class DailyNewsTZParser(ParserProxy): class V1(BaseParser): _summary_selector = CSSSelector("div.cs-entry__subtitle") _subheadline_selector = XPath("//div[@class='entry-content']//p[not(text() or position()=1)]//span//strong") - _paragraph_selector = XPath("//div[@class='entry-content']//p[text() or position()=1]") + _paragraph_selector = XPath( + "//div[@class='entry-content']" + "//p[not(re:test(string(.), '^(SOMA|ALSO READ):') or span)] | " + "//div[@class='entry-content']//p[not(position()=1)]//span[not(span) and text()] |" + "//div[@class='entry-content']//p//span/span[text()] | " + "//div[@class='entry-content']//p[position()=1]", + namespaces={"re": "http://exslt.org/regular-expressions"}, + ) @attribute def title(self) -> Optional[str]: diff --git a/tests/resources/parser/test_data/tz/DailyNewsTZ.json b/tests/resources/parser/test_data/tz/DailyNewsTZ.json index e4e3e7ca..31024362 100644 --- a/tests/resources/parser/test_data/tz/DailyNewsTZ.json +++ b/tests/resources/parser/test_data/tz/DailyNewsTZ.json @@ -10,8 +10,14 @@ "headline": [], "paragraphs": [ "LINDI: IT’s around 8:00pm but Aisha Mohamed is still busy with her business close to Lindi Bus Stand’s exit door.", - "The mother of three says she is confident of doing business until late hours, thanks to the solar-powered streetlights installed in Lindi town and public areas. Advertisement", - "ALSO READ: Solar firm to boost clean energy uptake" + "IT’s around 8:00pm but Aisha Mohamed is still busy with her business close to Lindi Bus Stand’s exit door.", + "The main customers of her well-roasted maize are passengers coming from Dar es Salaam, Mtwara, Ruvuma as well as passers-by.", + "The mother of three says she is confident of doing business until late hours, thanks to the solar-powered streetlights installed in Lindi town and public areas.", + "“When there is darkness, women afraid of robbers and harassment from hooligans….in darkness it is easy to be raped,” says Aisha as she holds a maize, ready to sell it to her esteemed customer. While Aisha, 36, is waiting for another customer, Mariam Malibiche has just handed over customers particulars to Paris Guest House located 400m from the Lindi Bus Stand.", + "She passes in the street confidently knowing that nothing can harm her simply because there is the light insisting, “evils disappear when there is light.” Though Mariam do not know if the lights installed in different part of the Lindi town are powered by solar energy, she says, compared to nearly a year ago, “It was difficult to find women in the streets beyond 18hrs.”", + "Reasons behind, Mariam narrates, is that before installment of streetlights, most of small traders used to close their businesses early because there were no customers after sundown.", + "She says, apart from security reason, the businesses were not visible. Saphina Ndali is a mother of two. After confrontation with her husband in Dar es Salaam, she decided to return to Lindi Region where she grew. She started her grocery business around Lindi Bus Terminal.", + "“Government has restrictive laws and regulation in alcohol business. We are supposed to open at 16hrs up to 10pm. Before installation of streetlights, at 8pm there were no people in town, meaning there were no customers,” says the woman who is in her late 20s." ] }, {