Wie überwacht man Keywords auf Reddit mit Golang?

Die Überwachung von Schlüsselwörtern, die in Reddit-Beiträgen und -Kommentaren erwähnt werden, kann sehr nützlich sein, um Ihre Marke, Ihre Produkte und Ihre Konkurrenten zu überwachen und über bestimmte Themen informiert zu bleiben... Go ist eine großartige Sprache für solche Social Listening-Anwendungen. In diesem Artikel werden wir sehen, wie man ein einfaches Go-Programm schreibt, das Schlüsselwörter auf Reddit überwacht.

Reddit mit Golang überwachen

Social Media Listening auf Reddit

Social Listening auf Reddit ist ein unglaublich leistungsfähiges Tool für Einzelpersonen und Unternehmen mit unterschiedlichen Zielen. Hier sind einige Gründe, warum es besonders wichtig ist:

Wie überwacht man bestimmte Keywords auf Reddit?

Reddit stellt einige kostenlose API-Endpunkte zur Verfügung, über die Sie alle neuen Beiträge oder Kommentare auf der Plattform abrufen können. Diese Endpunkte sind nicht sehr gut dokumentiert.

Um die letzten 100 Reddit-Beiträge zu erhalten, sollten Sie eine GET-HTTP-Anfrage an den folgenden API-Endpunkt stellen: https://www.reddit.com/r/all/new/.json?limit=100

Um die letzten 100 Reddit-Kommentare zu erhalten, sollten Sie eine GET-HTTP-Anfrage an den folgenden API-Endpunkt stellen: https://www.reddit.com/r/all/comments/.json?limit=100

Die Antwort dieser API-Endpunkte ist ein JSON-Objekt, das eine Liste von Beiträgen oder Kommentaren enthält.

Hier ist ein (verkürztes) Beispiel einer Antwort, die ich erhalte, wenn ich den Endpunkt posts anfordere:

curl https://www.reddit.com/r/all/new/.json?limit=100

{
"kind": "Listing",
"data": {
    "after": "t3_1asad4n",
    "dist": 100,
    "modhash": "ne8fi0fr55b56b8a75f8075df95fa2f03951cb5812b0f9660d",
    "geo_filter": "",
    "children": [
        {
            "kind": "t3",
            "data": {
                "approved_at_utc": null,
                "subreddit": "GunAccessoriesForSale",
                "selftext": "Morning gents. I\u2019m looking to snag up your forgotten factory yellow spring for the 509T. I need to source one for a buddy who lost his and I cannot find any available anywhere! \n\nIf one of you have the yellow spring laying around, looking to pay $50 shipped\u2026 \n\nTo my 509t owners, it\u2019s the \u201clight\u201d spring that comes in a plastic bag in the carrying case. \n\nThanks in advance  ",
                "author_fullname": "t2_2ezh71n6",
                "saved": false,
                "mod_reason_title": null,
                "gilded": 0,
                "clicked": false,
                "title": "[WTB] 509T yellow spring",
                "link_flair_richtext": [],
                "subreddit_name_prefixed": "r/GunAccessoriesForSale",
                [...]
                "contest_mode": false,
                "mod_reports": [],
                "author_patreon_flair": false,
                "author_flair_text_color": "dark",
                "permalink": "/r/GunAccessoriesForSale/comments/1asadbj/wtb_509t_yellow_spring/",
                "parent_whitelist_status": null,
                "stickied": false,
                "url": "https://www.reddit.com/r/GunAccessoriesForSale/comments/1asadbj/wtb_509t_yellow_spring/",
                "subreddit_subscribers": 182613,
                "created_utc": 1708094934.0,
                "num_crossposts": 0,
                "media": null,
                "is_video": false
                }
            },
        [...]
        ]
    }
}

Wie Sie sehen können, gibt Reddit ein Array von Objekten zurück. Jedes Objekt ist ein Beitrag oder ein Kommentar (je nach dem von Ihnen angeforderten Endpunkt), der umfassende Details wie den Inhalt des Beitrags, die URL des Beitrags, Datum und Uhrzeit der Erstellung usw. enthält. Die meisten davon werden nicht nützlich sein, und "selftext" ist zweifellos das wichtigste Element, da es den Inhalt des Beitrags oder Kommentars enthält.

Die Ergebnisse werden in absteigender Reihenfolge angezeigt. Bitte beachten Sie, dass Sie nicht mehr als 100 Beiträge oder Kommentare gleichzeitig anfordern können.

Warum sollte man Reddit mit Go in Echtzeit überwachen?

Die Programmiersprache Go bietet mehrere leistungsstarke Funktionen, die sie zu einer hervorragenden Wahl für das Abrufen von Reddit-Beiträgen und -Kommentaren in Echtzeit machen. Zwar können auch andere Programmiersprachen für diesen Zweck verwendet werden, doch die Verwendung von Go bietet spezifische Vorteile, insbesondere bei der Verarbeitung von Echtzeitdaten. Hier sind die Gründe, warum Go sich auszeichnet:

Zunächst einmal ermöglichen die leichtgewichtigen Threads von Go, die als Goroutine bekannt sind, effizientes Multitasking und Gleichzeitigkeit. Dies ist besonders nützlich, wenn Sie mehrere Reddit-Beiträge oder -Kommentare gleichzeitig abrufen, da jeder Abrufvorgang in seiner eigenen Goroutine ausgeführt werden kann.

Zweitens enthält die Standardbibliothek von Go einen umfassenden und effizienten HTTP-Client, der den Prozess der Webanfragen vereinfacht. Dies ist wichtig für die Interaktion mit der API von Reddit, um Beiträge und Kommentare abzurufen. Der HTTP-Client von Go unterstützt Kontexte, so dass Zeitüberschreitungen und Abbrüche von Anfragen möglich sind. Dies ist entscheidend für Echtzeitanwendungen, bei denen Sie sicherstellen wollen, dass Ihre Anwendung reaktionsfähig bleibt und nicht an verzögerten Antworten hängen bleibt.

Schließlich ist Go eine kompilierte Sprache, was in der Regel bedeutet, dass in Go geschriebene Anwendungen schnell sind und einen kleinen Fußabdruck haben. Dies ist von Vorteil für Echtzeitanwendungen, die große Datenmengen schnell verarbeiten müssen. Der Garbage Collector von Go ist darauf ausgelegt, effizient zu sein und die Latenzzeit niedrig zu halten, was für die Aufrechterhaltung der Leistung in Echtzeit-Datenabrufszenarien entscheidend ist.

Ein einfaches Go-Programm, das ein Schlüsselwort in Reddit-Beiträgen überwacht

Hier ist ein Schritt-für-Schritt-Plan zur Erstellung eines Go-Programms, das das Schlüsselwort "kwatch.io" in Go-Beiträgen überwacht:

Hier ist der Go-Code:

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
    "time"
)

type Post struct {
    Selftext  string `json:"selftext"`
    Title     string `json:"title"`
    Permalink string `json:"permalink"`
}

type Data struct {
    Children []struct {
        Data Post `json:"data"`
    } `json:"children"`
}

type Response struct {
    Data Data `json:"data"`
}

func fetchPosts() {
    resp, err := http.Get("https://www.reddit.com/r/all/new/.json?limit=100")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer resp.Body.Close()

    var r Response
    err = json.NewDecoder(resp.Body).Decode(&r)
    if err != nil {
        fmt.Println(err)
        return
    }

    for _, child := range r.Data.Children {
        if strings.Contains(child.Data.Title, "kwatch.io") || strings.Contains(child.Data.Selftext, "kwatch.io") {
            fmt.Println("Title:", child.Data.Title)
            fmt.Println("Selftext:", child.Data.Selftext)
            fmt.Println("Permalink:", child.Data.Permalink)
            fmt.Println()
        }
    }
}

func main() {
    ticker := time.NewTicker(1 * time.Second)
    for range ticker.C {
        fetchPosts()
    }
}

Dieses Programm ruft jede Sekunde (asynchron) die letzten 100 neuen Beiträge von Reddit ab und gibt den Titel, den Selbsttext und den Permalink jedes Beitrags auf der Konsole aus. Sie können dasselbe mit Reddit-Kommentaren tun, indem Sie einfach die API-Endpunkt-URL ändern.

Hier sind einige Ideen, wie Sie dieses Programm verbessern könnten:

Schlussfolgerung

Die Überwachung bestimmter Schlüsselwörter auf Reddit ist dank eines recht einfachen Go-Programms möglich.

Die Produktion eines solchen Programms kann jedoch eine Herausforderung darstellen. Erstens, weil Reddit gut darin ist, Sie zu blockieren, wenn Sie zu viele Anfragen machen, aber auch, weil ihre API-Endpunkte eine Menge von Beiträgen und Kommentaren gleichzeitig zurückgeben, was bedeutet, dass Ihr Go-Programm mit diesem hohen Volumen intelligent umgehen muss.

Wenn Sie ein solches System nicht selbst aufbauen und pflegen wollen, empfehlen wir Ihnen, stattdessen unsere Plattform zu nutzen: hier auf KWatch.io registrieren.

Arthur
Entwickler KWatch.io gehen