Ako monitorovať kľúčové slová na Reddite pomocou Golangu?

Monitorovanie kľúčových slov, ktoré sa spomínajú v príspevkoch a komentároch na Reddite, môže byť veľmi užitočné na monitorovanie vašej značky, vašich produktov, vašich konkurentov, na udržiavanie informácií o konkrétnych témach... Go je skvelý jazyk pre takéto aplikácie na počúvanie sociálnych sietí. V tomto článku si ukážeme, ako napísať jednoduchý program v jazyku Go, ktorý monitoruje kľúčové slová na Reddite.

Monitorovanie služby Reddit pomocou aplikácie Golang

Počúvanie sociálnych médií na Reddite

Počúvanie sociálnych sietí na Reddite je neuveriteľne silný nástroj pre jednotlivcov aj organizácie s rôznymi cieľmi. Tu je niekoľko dôvodov, prečo je mimoriadne dôležité:

Ako sledovať konkrétne kľúčové slová na Reddite?

Reddit poskytuje niekoľko bezplatných koncových bodov API, ktoré vám umožňujú získať každý nový príspevok alebo komentár na platforme. Tieto koncové body nie sú veľmi dobre zdokumentované.

Ak chcete získať posledných 100 príspevkov Reddit, mali by ste vykonať požiadavku GET HTTP na nasledujúci koncový bod API: https://www.reddit.com/r/all/new/.json?limit=100

Ak chcete získať posledných 100 komentárov Reddit, mali by ste vykonať požiadavku GET HTTP na nasledujúci koncový bod API: https://www.reddit.com/r/all/comments/.json?limit=100

Odpoveďou týchto koncových bodov API je objekt JSON, ktorý obsahuje zoznam príspevkov alebo komentárov.

Tu je (skrátený) príklad odpovede, ktorú dostávam pri požiadavke na koncový bod príspevkov:

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

Ako vidíte, Reddit vracia pole objektov. Každý objekt je príspevok alebo komentár (v závislosti od požadovaného koncového bodu), ktorý obsahuje komplexné údaje, ako je obsah príspevku, url adresa príspevku, dátum a čas vytvorenia atď. Väčšina z nich nebude užitočná a "selftext" je nepochybne najdôležitejší prvok, pretože obsahuje obsah príspevku alebo komentára.

Výsledky sú uvedené v zostupnom poradí. Upozorňujeme, že nemôžete požiadať o viac ako 100 príspevkov alebo komentárov súčasne.

Prečo používať službu Go na monitorovanie služby Reddit v reálnom čase?

Programovací jazyk Go ponúka niekoľko výkonných funkcií, ktoré z neho robia vynikajúcu voľbu na získavanie príspevkov a komentárov na Reddite v reálnom čase. Hoci na tento účel možno použiť aj iné programovacie jazyky, použitie jazyka Go má špecifické výhody, najmä pri spracovaní údajov v reálnom čase. Tu sú dôvody, prečo Go vyniká:

V prvom rade, ľahké vlákna Go, známe ako goroutines, umožňujú efektívny multitasking a súbežnosť. To je užitočné najmä pri načítavaní viacerých príspevkov alebo komentárov na Reddit súčasne, pretože každá operácia načítania môže byť spustená vo vlastnom goroutine.

Po druhé, štandardná knižnica Go obsahuje komplexného a efektívneho klienta HTTP, ktorý zjednodušuje proces zadávania webových požiadaviek. To je nevyhnutné na interakciu s rozhraním API služby Reddit na získavanie príspevkov a komentárov. Klient HTTP jazyka Go podporuje kontexty, ktoré umožňujú časové limity požiadaviek a ich zrušenie. To je veľmi dôležité pre aplikácie v reálnom čase, kde chcete zabezpečiť, aby vaša aplikácia reagovala a nezostala visieť na oneskorených odpovediach.

Go je kompilovaný jazyk, čo zvyčajne znamená, že aplikácie napísané v Go sú rýchle a majú malú veľkosť. To je výhodné pre aplikácie v reálnom čase, ktoré potrebujú rýchlo spracovať veľké objemy údajov. Zberač odpadu v jazyku Go je navrhnutý tak, aby bol efektívny a udržiaval nízku latenciu, čo je rozhodujúce pre zachovanie výkonu v scenároch získavania údajov v reálnom čase.

Jednoduchý program Go, ktorý sleduje kľúčové slovo v príspevkoch Reddit

Tu je plán krokov o vytvorení programu Go, ktorý monitoruje kľúčové slovo "kwatch.io" v príspevkoch Go:

Tu 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ždú sekundu načíta posledných 100 nových príspevkov z Redditu (asynchrónne) a vypíše názov, vlastný text a trvalý odkaz každého príspevku na konzolu. To isté môžete urobiť s komentármi Reddit jednoduchou zmenou koncového bodu API URL.

Tu je niekoľko nápadov, ako by ste mohli tento program zlepšiť:

Záver

Sledovanie konkrétnych kľúčových slov na Reddite je možné vďaka pomerne jednoduchému programu Go.

Výroba takéhoto programu však môže byť náročná. Jednak preto, že Reddit vás vie zablokovať, ak zadáte príliš veľa požiadaviek, ale aj preto, že ich koncové body API vracajú veľa príspevkov a komentárov naraz, čo znamená, že váš program Go musí tento veľký objem spracovať inteligentne.

Ak nechcete takýto systém vytvárať a udržiavať sami, odporúčame vám použiť našu platformu: zaregistrovať sa na KWatch.io tu.

Arthur
Prejsť na vývojára KWatch.io