Nu afslører jeg lige noget jeg opdagede, da jeg lavede https://wallnot.dk (som kun offentliggør gratisartikler): Weekendavisen er gratis!

Selv om https://www.weekendavisen.dk/ ligner en typisk dansk netavis med gratis-artikler og paywall-artikler i én pærevælling, offentliggør Weekendavisen faktisk hele sit indhold. De ved det sikkert ikke selv – men udvikleren hos det smarte webbureau, der har udviklet deres side, ved det med sikkerhed.
Avisens oversigt over ugens avis – denne uge er det https://www.weekendavisen.dk/2019-51/oversigt – indeholder en fuldt offentlig JSON-streng med hele avisens indhold: fuld tekst, links til artikeloplæsninger, hele dynen.
Det er ret amatøragtigt.
Du ser det ikke i din browser når du besøger siden, men det er der.
Jeg har lavet et lille Python-script, der genererer din egen personlige Weekendavisen for den aktuelle uge i en fil, der hedder index.html. Det ser ikke særligt godt ud, der er kun de fulde tekster, ikke billeder og links til oplæsning – du kan selv arbejde videre med JSON-strengen, hvis du vil have det til at se flot ud.
Det kan være, jeg ødelægger det for mig selv, for hvis Weekendavisen retter fejlen, bliver jeg formentlig nødt til at omkode den del af wallnot.dk, der viser gratis Weekendavisen-artikler.
God fornøjelse med din gratis Weekendavisen.
# The Danish newspaper Weekendavisen.dk publishes all articles - even those supposedly behind a paywall - as json on their homepage.
# This small script creates an index.html file to read all articles from the current edition.
import requests
from bs4 import BeautifulSoup
import json
def weekendavisen():
# Request front page
data = requests.get("https://weekendavisen.dk")
result = data.text
# Soup site and create a list of links and their titles
soup = BeautifulSoup(result, "html.parser")
for a in soup.find_all('a'):
if "/oversigt" in a['href']:
overviewurl = a['href']
edition = overviewurl[overviewurl.find(".dk/") + 4:overviewurl.find(".dk/") + 11]
request = "https://weekendavisen.dk/" + edition + "/oversigt"
# Request site and soup it
data = requests.get(request)
result = requests.utils.get_unicode_from_response(data)
soup = BeautifulSoup(result, "html.parser")
content = soup.find('script', attrs={'class':'js-react-on-rails-component', 'data-component-name':"IndexPage"})
jsonobject = content.string
# Create json object
jsondecode = json.loads(jsonobject)
# Iterate through articles and articles to dictionary
articlelist = []
for section in jsondecode["sections"]:
for item in section["items"]:
summary = item["summary"]
summary_output = '<b>' + summary[:summary.find(".") + 1] + '</b> ' + summary[summary.find(".") + 1:] + ''
title = item["title"]
title_output = '<h1><big>' + title + '</big></h1>'
if item["type"] == "newsarticleplus":
article = item["body"] + item["paidBody"]
else:
article = item["body"]
output = summary_output + title_output + article
articlelist.append(output)
week_linkstr = ""
for article in articlelist:
week_linkstr += article
return week_linkstr
def htmlgenerator():
htmlstart = '''<!DOCTYPE HTML>
<head>
<meta charset="utf-8"/>
<title>Weekendavisen</title>
</head>
<body>'''
htmlend = '</body></html>'
finalhtml = htmlstart + week_links + htmlend
# Saves to disc
with open("./index.html", "wt", encoding="utf8") as fout:
fout.write(finalhtml)
week_links = weekendavisen()
htmlgenerator()