Jak sledovat klíčová slova na Redditu pomocí Golangu?

Sledování klíčových slov, která jsou zmiňována v příspěvcích a komentářích na Redditu, může být velmi užitečné pro sledování vaší značky, vašich produktů, vašich konkurentů, informování o konkrétních tématech... Jazyk Go je pro takové aplikace pro naslouchání sociálním sítím skvělý. V tomto článku si ukážeme, jak napsat jednoduchý program v jazyce Go, který monitoruje klíčová slova na Redditu.

Sledování Redditu pomocí Golangu

Poslouchání sociálních médií na Redditu

Sociální naslouchání na Redditu je neuvěřitelně mocný nástroj pro jednotlivce i organizace s různými cíli. Zde je několik důvodů, proč je obzvláště důležitý:

Jak sledovat konkrétní klíčová slova na Redditu?

Reddit nabízí několik bezplatných koncových bodů API, které umožňují získat každý nový příspěvek nebo komentář na platformě. Tyto koncové body nejsou příliš dobře zdokumentovány.

Chcete-li získat posledních 100 příspěvků na Redditu, měli byste zadat požadavek GET HTTP na následující koncový bod API: https://www.reddit.com/r/all/new/.json?limit=100

Chcete-li získat posledních 100 komentářů Redditu, měli byste provést požadavek GET HTTP na následující koncový bod API: https://www.reddit.com/r/all/comments/.json?limit=100

Odpovědí těchto koncových bodů API je objekt JSON, který obsahuje seznam příspěvků nebo komentářů.

Zde je (zkrácený) příklad odpovědi, kterou dostávám při požadavku na koncový bod posts:

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
                }
            },
        [...]
        ]
    }
}

Jak vidíte, Reddit vrací pole objektů. Každý objekt je příspěvek nebo komentář (podle požadovaného koncového bodu), který obsahuje vyčerpávající podrobnosti, jako je obsah příspěvku, url příspěvku, datum a čas vytvoření atd. Většina z nich nebude užitečná a nejdůležitějším prvkem je nepochybně "selftext", protože obsahuje obsah příspěvku nebo komentáře.

Výsledky jsou uvedeny v sestupném pořadí. Vezměte prosím na vědomí, že nelze požadovat více než 100 příspěvků nebo komentářů najednou.

Proč používat službu Go ke sledování Redditu v reálném čase?

Programovací jazyk Go nabízí několik výkonných funkcí, které z něj činí vynikající volbu pro načítání příspěvků a komentářů na Redditu v reálném čase. I když lze pro tento účel použít i jiné programovací jazyky, použití jazyka Go má specifické výhody, zejména pokud jde o zpracování dat v reálném čase. Zde jsou důvody, proč jazyk Go vyniká:

Především lehká vlákna jazyka Go, známá jako goroutines, umožňují efektivní multitasking a souběžnost. To je užitečné zejména při načítání více příspěvků nebo komentářů na Redditu současně, protože každá operace načítání může být spuštěna ve vlastní goroutine.

Za druhé, standardní knihovna jazyka Go obsahuje komplexního a efektivního klienta HTTP, který zjednodušuje proces zadávání webových požadavků. To je nezbytné pro interakci s rozhraním API služby Reddit při načítání příspěvků a komentářů. Klient HTTP v jazyce Go podporuje kontexty, které umožňují časový limit požadavků a jejich zrušení. To je zásadní pro aplikace pracující v reálném čase, u kterých chcete zajistit, aby vaše aplikace reagovala i nadále a nezůstala viset na zpožděných odpovědích.

Jazyk Go je kompilovaný jazyk, což obvykle znamená, že aplikace napsané v jazyce Go jsou rychlé a mají malou velikost. To je výhodné pro aplikace pracující v reálném čase, které potřebují rychle zpracovávat velké objemy dat. Sběrač odpadu v jazyce Go je navržen tak, aby byl efektivní a udržoval nízkou latenci, což je klíčové pro zachování výkonu ve scénářích načítání dat v reálném čase.

Jednoduchý program Go, který sleduje klíčové slovo v příspěvcích na Redditu

Zde je plán, jak krok za krokem vytvořit program v jazyce Go, který sleduje klíčové slovo "kwatch.io" v příspěvcích v jazyce Go:

Zde je kód Go:

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()
    }
}

Tento program každou sekundu načte posledních 100 nových příspěvků z Redditu (asynchronně) a vypíše název, vlastní text a trvalý odkaz každého příspěvku do konzole. Totéž můžete udělat s komentáři Redditu, stačí změnit adresu URL koncového bodu API.

Zde je několik nápadů, jak byste mohli tento program vylepšit:

Závěr

Sledování konkrétních klíčových slov na Redditu je možné díky poměrně jednoduchému programu Go.

Produkce takového programu však může být náročná. Jednak proto, že Reddit umí blokovat příliš mnoho požadavků, ale také proto, že jeho koncové body API vracejí velké množství příspěvků a komentářů najednou, což znamená, že program v jazyce Go musí tento velký objem chytře zpracovat.

Pokud nechcete takový systém vytvářet a udržovat sami, doporučujeme vám použít naši platformu: zaregistrovat se na KWatch.io zde.

Arthur
Přejít na vývojáře KWatch.io