Import von public_bookcase aus lesestunden.de Karte der Bücherschränke

Die Website
https://www.lesestunden.de/karte-oeffentlicher-buecherschraenke/
enthält eine Karte mit Daten aus der OSM die von den Benutzern gut gepflegt werden. Die Daten sind dort auch als unter ODbL angegeben und müssten also meiner Meinung nach zurück nach OSM um dort auch angezeigt zu werden. Die Menge der Einträge in beiden Beständen sind teilweise disjunkt und ich hätte gern alle in der OSM als primäre Instanz, Dubletten lassen sich gut automatisch in PostGIS erkennen.
Technisch ist das einfach, der Endpoint liefert die Daten als JSON
https://www.lesestunden.de/buchschrank/v1/bookcase
und ich habe sie mir auch schon nach PostGIS und dann nach GPX konvertiert. Kann man also in JOSM einlesen und updaten mit fixme, source und license. Aber da ist bei OSM noch etwas Bürokratie die ich nicht kenne (Wiki, Data Working Group, blabla…) und mit der ich mich auch nicht befassen möchte. Vielleicht gibt es ja jemand der das in die Hand nehmen möchte?

Die beiden Datenbestände synchron zu halten (insbesondere Änderungen, Löschungen) ist aufwendig.
Sprich mal mit dem Betreiber der Webseite, ob er auf eigene Datenhaltung verzichten würde und das über OSM machen kann.

Der Import an sich (inkl. Dupletten-Erkennung) wäre technisch machbar.

Und es fehlen auch manche komplett. Müsste den einen in meiner Nachbarschaft mal in OSM eintragen.

Das ist mir alles schon klar. Technisch ist das alles für mich einfach zu machen. Es geht um die OSM Bürokratie. Der Betreiber der Website will seine eigene DB pflegen aus den gleichen Gründen. Ich will die Daten von der Website regelmäßig in OSM einspielen weil ich den Planet in meinem GIS habe.

Falls es jemand interessiert ist hier das Skript mit dem ich meinen Layer im GIS momentan aufbaue:


import requests
import pandas as pd
import psycopg2


burp0_url = "https://www.lesestunden.de:443/buchschrank/v1/bookcase"
burp0_cookies = {"cookie_notice_accepted": "true", "_pk_id.18.8cc3": "9e679079ea179247.1581152158.1.1581153572.1581152158.", "_pk_ses.18.8cc3": "1"}
burp0_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0", "Accept": "application/json, text/javascript, */*; q=0.01", "Accept-Language": "de,en-US;q=0.7,en;q=0.3", "Accept-Encoding": "gzip, deflate", "X-Requested-With": "XMLHttpRequest", "DNT": "1", "Connection": "close", "Referer": "https://www.lesestunden.de/karte-oeffentlicher-buecherschraenke/"}
data = requests.get(burp0_url, headers=burp0_headers, cookies=burp0_cookies).text

f = open("lesestunden.json", "w")
f.write(data)
f.close()

df = pd.read_json (r'lesestunden.json')
df=df.set_index('id')

conn = psycopg2.connect("dbname='gis' user='postgres' host='localhost' password='pgadmin'")
cur = conn.cursor()
sql = """
CREATE TABLE IF NOT EXISTS lesestunden (
    gid serial PRIMARY KEY, 
    name text,
    geom geography(POINT,4326) 
);
TRUNCATE lesestunden;
"""
cur.execute(sql)
cur.close()
conn.commit()

cur = conn.cursor()
for waypoint in df.itertuples(index = False):
    wpt = waypoint.title
    lon = waypoint.lng
    lat = waypoint.lat
    sql = """
    INSERT INTO lesestunden (geom, name)
        VALUES (ST_GeomFromText('POINT(%s %s)', 4326), %s);
    """
    cur.execute(sql, (lon, lat, wpt))
cur.close()
conn.commit()