Rest: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
// via Wikitext Extension for VSCode |
|||
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 12: | Zeile 12: | ||
== html ausgabe ohne Bearbeitung Funktionen== | == html ausgabe ohne Bearbeitung Funktionen== | ||
* https://wiki.ahrensburg.city/api.php?action=parse&format=json&page=Geografie&disableeditsection=1&disabletoc=1 | * https://wiki.ahrensburg.city/api.php?action=parse&format=json&page=Geografie&disableeditsection=1&disabletoc=1 | ||
== Beispiel mit Golang == | |||
<pre> | |||
package main | |||
import ( | |||
"encoding/json" | |||
"fmt" | |||
"io/ioutil" | |||
"net/http" | |||
"strings" | |||
"github.com/PuerkitoBio/goquery" | |||
) | |||
func main() { | |||
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { | |||
// URL der API-Abfrage | |||
url := "https://wiki.ahrensburg.city/api.php?action=parse&format=json&page=Forst_Hagen&disableeditsection=1&disabletoc=1" | |||
// API-Abfrage durchführen | |||
resp, err := http.Get(url) | |||
if err != nil { | |||
http.Error(w, "Fehler bei der API-Abfrage: "+err.Error(), http.StatusInternalServerError) | |||
return | |||
} | |||
defer resp.Body.Close() | |||
body, err := ioutil.ReadAll(resp.Body) | |||
if err != nil { | |||
http.Error(w, "Fehler beim Lesen der Antwort: "+err.Error(), http.StatusInternalServerError) | |||
return | |||
} | |||
// JSON-Antwort parsen | |||
var data map[string]interface{} | |||
err = json.Unmarshal(body, &data) | |||
if err != nil { | |||
http.Error(w, "Fehler beim Parsen der JSON-Antwort: "+err.Error(), http.StatusInternalServerError) | |||
return | |||
} | |||
// HTML-Inhalt erstellen | |||
htmlContent := "<html><head><title>Geografie</title></head><body>" | |||
if parse, ok := data["parse"].(map[string]interface{}); ok { | |||
title := parse["title"].(string) | |||
text := parse["text"].(map[string]interface{})["*"].(string) | |||
// HTML-Inhalt mit goquery parsen | |||
doc, err := goquery.NewDocumentFromReader(strings.NewReader(text)) | |||
if err != nil { | |||
http.Error(w, "Fehler beim Parsen des HTML-Inhalts: "+err.Error(), http.StatusInternalServerError) | |||
return | |||
} | |||
// Entfernen des gesamten <div id="map_leaflet_1">-Inhalts | |||
doc.Find("div#map_leaflet_1").Remove() | |||
// Bereinigten HTML-Inhalt extrahieren | |||
cleanedHTML, err := doc.Html() | |||
if err != nil { | |||
http.Error(w, "Fehler beim Extrahieren des bereinigten HTML-Inhalts: "+err.Error(), http.StatusInternalServerError) | |||
return | |||
} | |||
htmlContent += fmt.Sprintf("<h1>%s</h1>%s", title, cleanedHTML) | |||
} else { | |||
htmlContent += "<p>Kein Inhalt gefunden.</p>" | |||
} | |||
htmlContent += "</body></html>" | |||
// HTML-Inhalt ausgeben | |||
w.Header().Set("Content-Type", "text/html; charset=utf-8") | |||
w.Write([]byte(htmlContent)) | |||
}) | |||
// HTTP-Server auf Port 8080 starten | |||
fmt.Println("Server läuft auf http://localhost:8080") | |||
http.ListenAndServe(":8080", nil) | |||
} | |||
</pre> |
Aktuelle Version vom 12. August 2024, 20:57 Uhr
Wiki Artikeln in Rest Api ausgeben
Einleitung
In diesem Artikel wird beschrieben, wie
Wiki Inhalte in Rest Api ausgeben
Einleitung
In diesem Artikel wird beschrieben, wie
html ausgabe ohne Bearbeitung Funktionen
Beispiel mit Golang
package main import ( "encoding/json" "fmt" "io/ioutil" "net/http" "strings" "github.com/PuerkitoBio/goquery" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // URL der API-Abfrage url := "https://wiki.ahrensburg.city/api.php?action=parse&format=json&page=Forst_Hagen&disableeditsection=1&disabletoc=1" // API-Abfrage durchführen resp, err := http.Get(url) if err != nil { http.Error(w, "Fehler bei der API-Abfrage: "+err.Error(), http.StatusInternalServerError) return } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { http.Error(w, "Fehler beim Lesen der Antwort: "+err.Error(), http.StatusInternalServerError) return } // JSON-Antwort parsen var data map[string]interface{} err = json.Unmarshal(body, &data) if err != nil { http.Error(w, "Fehler beim Parsen der JSON-Antwort: "+err.Error(), http.StatusInternalServerError) return } // HTML-Inhalt erstellen htmlContent := "<html><head><title>Geografie</title></head><body>" if parse, ok := data["parse"].(map[string]interface{}); ok { title := parse["title"].(string) text := parse["text"].(map[string]interface{})["*"].(string) // HTML-Inhalt mit goquery parsen doc, err := goquery.NewDocumentFromReader(strings.NewReader(text)) if err != nil { http.Error(w, "Fehler beim Parsen des HTML-Inhalts: "+err.Error(), http.StatusInternalServerError) return } // Entfernen des gesamten <div id="map_leaflet_1">-Inhalts doc.Find("div#map_leaflet_1").Remove() // Bereinigten HTML-Inhalt extrahieren cleanedHTML, err := doc.Html() if err != nil { http.Error(w, "Fehler beim Extrahieren des bereinigten HTML-Inhalts: "+err.Error(), http.StatusInternalServerError) return } htmlContent += fmt.Sprintf("<h1>%s</h1>%s", title, cleanedHTML) } else { htmlContent += "<p>Kein Inhalt gefunden.</p>" } htmlContent += "</body></html>" // HTML-Inhalt ausgeben w.Header().Set("Content-Type", "text/html; charset=utf-8") w.Write([]byte(htmlContent)) }) // HTTP-Server auf Port 8080 starten fmt.Println("Server läuft auf http://localhost:8080") http.ListenAndServe(":8080", nil) }