31 Januari, 2018

Distraktionsfri läsning med html2text.py

Jag är en flitig användare av min nyhetsläsare Newsboat, dock är det väldigt vanligt att hemsidor inte exponerar hela inlägget till sina nyhetsflöden och man måste ofta öppna artikeln i webbläsaren. Något jag inte gillar av olika anledningar, men främst för att dagens webb är bloat.

Jag har använt den textbaserade webbläsaren w3m med flaggan --dump i kombination med verktyget pipe, men nackdelen med w3m är att den dumpar hela hemsidan med hull och hår. Och du behöver ofta bläddra förbi en massa onödig och distraherande text innan du kommer till det relevanta innehållet.

Det finns lite alternativ för att bara kunna hämta själva artikeln, men de är antingen bloat eller så använder det sig av någon webbtjänst som skickar personlig data till en server som i sin tur formaterar texten och det vill jag verkligen inte. Men ganska nyligen blev jag tipsad av min vän Ghosty på Mastodon om Python-verktyget Newspaper, ett verktyg kan extrahera metadata från länkar, exempelvis artikelinnehållet.

Jag är ingen hejare på Python, men min vän hjälpte mig att komma igång och jag har nu ett Python-script som jag kallar för html2text.py och som hämtar titel och artikel från den länk man matar det med:

#!/usr/bin/env python3

from newspaper import Article
import sys

url = sys.argv[1]
a = Article(url, language='sv')
a.download()
a.parse()
print(a.title)
print("")
print(a.text)

Du behöver paketet newspaper3k, vilket du installerar via Pythons pakethanterare:

# pip3 install newspaper3k

Sedan är det bara att ge scriptet ett länk:

$ html2text.py <länk>

Använd det i kombination med verktyget less om du vill har en mer lättöverskådlig output där du kan skrolla uppifrån och ner med antingen med piltangenterna eller j och k som i Vim:

$ html2text.py <länk> | less

Och om du var lite observant kanske du också noterade delen language=sv i skriptet. Jag vet inte hur jag löser det på annat sätt, men det var tvunget att vara med för att den skulle hämta artiklar som var både på engelska och svenska. Om någon har en bättre lösning på det mottages de tacksamt. :)

Feedback

Om vill lämna feedback på det här inlägget (eller min blogg) är du välkommen att göra det via e-post, Mastodon, IRC (Hund at Freenode) eller via Jabber. :)