Hogyan figyeljük a kulcsszavakat a Reddit-en a Golanggal?

A Reddit-posztokban és kommentekben említett kulcsszavak figyelése nagyon hasznos lehet a márka, a termékek, a versenytársak és a konkrét témák nyomon követéséhez... A Go egy nagyszerű nyelv az ilyen közösségi figyelő alkalmazásokhoz. Ebben a cikkben megnézzük, hogyan írhatunk egy egyszerű Go programot, amely a Reddit kulcsszavait figyeli.

Reddit monitorozása Golanggal

Social Media Listening a Reddit-en

A Reddit közösségi figyelése hihetetlenül hatékony eszköz mind az egyének, mind a szervezetek számára, számos célkitűzés tekintetében. Itt van néhány ok, amiért különösen fontos:

Hogyan figyeljük meg a Redditen az egyes kulcsszavakat?

A Reddit néhány ingyenes API végpontot tesz közzé, amelyek lehetővé teszik, hogy minden új bejegyzést vagy kommentet megkapjon a platformon. Ezek a végpontok nem túl jól dokumentáltak.

Az utolsó 100 Reddit-poszt lekérdezéséhez GET HTTP-kérést kell indítanod a következő API-végpontra: https://www.reddit.com/r/all/new/.json?limit=100

Az utolsó 100 Reddit-kommentár lekérdezéséhez GET HTTP-kérést kell indítanod a következő API-végpontra: https://www.reddit.com/r/all/comments/.json?limit=100

Ezeknek az API végpontoknak a válasza egy JSON objektum, amely a bejegyzések vagy megjegyzések listáját tartalmazza.

Itt van egy (csonka) példa a válaszra, amit a hozzászólások végpont kérésekor kapok:

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

Amint láthatod, a Reddit egy objektumokból álló tömböt ad vissza. Minden objektum egy bejegyzés vagy egy komment (a kért végponttól függően), amely olyan átfogó adatokat tartalmaz, mint a bejegyzés tartalma, a bejegyzés url címe, a létrehozás dátuma és ideje stb. Ezek többsége nem lesz hasznos, és a "selftext" kétségtelenül a legfontosabb elem, mivel ez tartalmazza a bejegyzés vagy a komment tartalmát.

Az eredmények csökkenő sorrendben kerülnek bemutatásra. Felhívjuk figyelmét, hogy egyszerre nem kérhet 100-nál több hozzászólást vagy kommentet.

Miért használja a Go-t a Reddit valós idejű monitorozására?

A Go programozási nyelv számos erőteljes funkciót kínál, amelyek kiváló választássá teszik a Reddit-bejegyzések és kommentek valós idejű lekérdezéséhez. Bár más programozási nyelvek is használhatók erre a célra, a Go használata különleges előnyökkel jár, különösen, ha valós idejű adatfeldolgozásról van szó. Íme, miért emelkedik ki a Go:

Először is, a Go könnyű szálai, az úgynevezett goroutine-ok lehetővé teszik a hatékony többfeladatos működést és az egyidejűséget. Ez különösen akkor hasznos, ha egyszerre több Reddit-posztot vagy kommentet hívunk le, mivel minden egyes lekérdezési művelet saját goroutine-ban futtatható.

Másodszor, a Go szabványos könyvtára tartalmaz egy átfogó és hatékony HTTP-klienst, amely leegyszerűsíti a webes kérések folyamatát. Ez elengedhetetlen a Reddit API-jával való interakcióhoz a bejegyzések és kommentek lekérdezéséhez. A Go HTTP-kliens támogatja a kontextusokat, lehetővé téve a kérések időkorlátozását és törlését. Ez kritikus fontosságú a valós idejű alkalmazásoknál, ahol biztosítani szeretné, hogy az alkalmazás továbbra is reagáljon, és ne akadjon fenn a késleltetett válaszokon.

Végül, a Go egy fordított nyelv, ami jellemzően azt jelenti, hogy a Go nyelven írt alkalmazások gyorsak és kis lábnyomúak. Ez előnyös a valós idejű alkalmazások számára, amelyeknek nagy mennyiségű adatot kell gyorsan feldolgozniuk. A Go szemétgyűjtőjét úgy tervezték, hogy hatékony legyen és alacsonyan tartsa a késleltetést, ami kulcsfontosságú a teljesítmény fenntartásához a valós idejű adatlehívási forgatókönyvekben.

Egy egyszerű Go program, amely figyeli a kulcsszót a Reddit hozzászólásokban

Itt egy lépésről-lépésre bemutatott terv egy olyan Go program elkészítéséről, amely a "kwatch.io" kulcsszót figyeli Go bejegyzésekben:

Itt a Go kód:

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

Ez a program másodpercenként (aszinkron) lekérdezi az utolsó 100 új bejegyzést a Redditről, és kiírja a konzolra az egyes bejegyzések címét, szelfi szövegét és permalinkjét. Ugyanezt megteheti Reddit-kommentárokkal is, ha egyszerűen megváltoztatja az API végpont URL-címét.

Íme néhány ötlet arra vonatkozóan, hogyan lehetne javítani ezen a programon:

Következtetés

A Reddit adott kulcsszavainak nyomon követése egy meglehetősen egyszerű Go programnak köszönhetően lehetséges.

Egy ilyen program előállítása azonban kihívást jelenthet. Egyrészt azért, mert a Reddit jól blokkolja a túl sok kérést, másrészt azért, mert az API végpontjaik egyszerre sok posztot és kommentet küldenek vissza, ami azt jelenti, hogy a Go programodnak okosan kell kezelnie ezt a nagy mennyiséget.

Ha nem szeretne egy ilyen rendszert saját maga kiépíteni és karbantartani, akkor javasoljuk, hogy használja inkább a mi platformunkat: regisztráljon a KWatch.io-n itt.

Arthur
Go Fejlesztő KWatch.io