Cum să monitorizați cuvintele cheie pe Reddit cu Golang?

Monitorizarea cuvintelor cheie care sunt menționate în postările și comentariile de pe Reddit poate fi foarte utilă pentru a vă monitoriza brandul, produsele, concurenții, pentru a rămâne informat despre anumite subiecte... Go este un limbaj excelent pentru astfel de aplicații de ascultare socială. În acest articol, vom vedea cum să scriem un program Go simplu care monitorizează cuvintele cheie pe Reddit.

Monitorizați Reddit cu Golang

Ascultarea social media pe Reddit

Ascultarea socială pe Reddit este un instrument incredibil de puternic, atât pentru persoane fizice, cât și pentru organizații cu o gamă largă de obiective. Iată câteva motive pentru care este deosebit de importantă:

Cum să monitorizați anumite cuvinte cheie pe Reddit?

Reddit expune câteva puncte finale API gratuite care vă permit să obțineți toate postările sau comentariile noi făcute pe platformă. Aceste puncte finale nu sunt foarte bine documentate.

Pentru a obține ultimele 100 de postări Reddit, trebuie să faceți o cerere GET HTTP la următorul endpoint API: https://www.reddit.com/r/all/new/.json?limit=100

Pentru a obține ultimele 100 de comentarii Reddit, trebuie să faceți o cerere GET HTTP la următorul endpoint API: https://www.reddit.com/r/all/comments/.json?limit=100

Răspunsul acestor puncte finale API este un obiect JSON care conține o listă de mesaje sau comentarii.

Iată un exemplu (trunchiat) de răspuns pe care îl primesc atunci când solicit punctul final al posturilor:

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

După cum puteți vedea, Reddit returnează o matrice de obiecte. Fiecare obiect este o postare sau un comentariu (în funcție de punctul final pe care l-ați solicitat) care conține detalii complete, cum ar fi conținutul trimiterii, adresa URL a trimiterii, data și ora creării etc. Cele mai multe dintre acestea nu vor fi utile, iar "selftext" este fără îndoială cel mai important element, deoarece conține conținutul postării sau al comentariului.

Rezultatele sunt prezentate în ordine descrescătoare. Vă rugăm să rețineți că nu puteți solicita mai mult de 100 de mesaje sau comentarii în același timp.

De ce să folosiți Go pentru a monitoriza Reddit în timp real?

Limbajul de programare Go oferă mai multe caracteristici puternice care îl fac o alegere excelentă pentru a prelua postările și comentariile de pe Reddit în timp real. Deși alte limbaje de programare pot fi utilizate în acest scop, există avantaje specifice în utilizarea Go, în special atunci când este vorba de procesarea datelor în timp real. Iată de ce Go iese în evidență:

În primul rând, firele de execuție ușoare din Go, cunoscute sub numele de goroutine, permit realizarea eficientă a multitasking-ului și a simultaneității. Acest lucru este deosebit de util atunci când preluați simultan mai multe postări sau comentarii Reddit, deoarece fiecare operațiune de preluare poate fi executată în propria goroutine.

În al doilea rând, biblioteca standard Go include un client HTTP cuprinzător și eficient care simplifică procesul de realizare a cererilor web. Acest lucru este esențial pentru a interacționa cu API-ul Reddit pentru a prelua postări și comentarii. Clientul HTTP al Go suportă contexte, permițând expirarea și anularea cererilor. Acest lucru este esențial pentru aplicațiile în timp real, unde doriți să vă asigurați că aplicația rămâne receptivă și nu este blocată de răspunsuri întârziate.

În cele din urmă, Go este un limbaj compilat, ceea ce înseamnă, de obicei, că aplicațiile scrise în Go sunt rapide și au o amprentă redusă. Acest lucru este benefic pentru aplicațiile în timp real care trebuie să proceseze rapid volume mari de date. Colectorul de gunoi Go este conceput pentru a fi eficient și pentru a menține latența scăzută, ceea ce este crucial pentru menținerea performanței în scenariile de preluare a datelor în timp real.

Un simplu program Go care urmărește un cuvânt cheie în postările Reddit

Iată un plan pas cu pas despre realizarea unui program Go care monitorizează cuvântul cheie "kwatch.io" în postările Go:

Iată codul 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()
    }
}

Acest program va prelua ultimele 100 de postări noi de pe Reddit la fiecare secundă (în mod asincron) și va imprima în consolă titlul, textul propriu și permalink-ul fiecărei postări. Puteți face același lucru cu comentariile Reddit prin simpla modificare a URL-ului de la punctul final API.

Iată câteva idei despre cum ați putea îmbunătăți acest program:

Concluzie

Monitorizarea anumitor cuvinte cheie pe Reddit este posibilă datorită unui program Go destul de simplu.

Totuși, producerea unui astfel de program poate fi o provocare. În primul rând, pentru că Reddit se pricepe să te blocheze dacă faci prea multe cereri, dar și pentru că punctele finale ale API-ului lor returnează o mulțime de postări și comentarii în același timp, ceea ce înseamnă că programul tău Go trebuie să gestioneze inteligent acest volum mare.

Dacă nu doriți să construiți și să mențineți un astfel de sistem de unul singur, vă recomandăm să utilizați platforma noastră: înregistrați-vă pe KWatch.io aici.

Arthur
Go Dezvoltator KWatch.io