Het monitoren van trefwoorden die worden genoemd in Reddit-posts en -commentaren kan erg nuttig zijn om je merk, je producten, je concurrenten te monitoren, op de hoogte te blijven van specifieke onderwerpen... Go is een geweldige taal voor dergelijke social listening toepassingen. In dit artikel zullen we zien hoe je een eenvoudig Go-programma schrijft dat trefwoorden op Reddit monitort.
Social listening op Reddit is een ongelooflijk krachtig hulpmiddel voor zowel individuen als organisaties met verschillende doelstellingen. Hier zijn verschillende redenen waarom het bijzonder belangrijk is:
Reddit heeft een aantal gratis API endpoints waarmee je alle nieuwe berichten of commentaren op het platform kunt ophalen. Deze eindpunten zijn niet erg goed gedocumenteerd.
Om de laatste 100 Reddit-posts te krijgen, moet je een GET HTTP-verzoek doen naar het volgende API-eindpunt: https://www.reddit.com/r/all/new/.json?limit=100
Om de laatste 100 Reddit-commentaren te krijgen, moet je een GET HTTP-verzoek doen naar het volgende API-eindpunt: https://www.reddit.com/r/all/comments/.json?limit=100
Het antwoord van deze API endpoints is een JSON object dat een lijst van berichten of commentaren bevat.
Hier is een (ingekort) voorbeeld van een antwoord dat ik krijg bij het opvragen van het eindpunt 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
}
},
[...]
]
}
}
Zoals je kunt zien, retourneert Reddit een array van objecten. Elk object is een post of een commentaar (afhankelijk van het eindpunt dat je opvroeg) dat uitgebreide details bevat zoals de inhoud van de inzending, de url van de inzending, de aanmaakdatum en -tijd, enz. De meeste zullen niet bruikbaar zijn, en "selftext" is ongetwijfeld het belangrijkste element omdat het de inhoud van de post of het commentaar bevat.
Resultaten worden in aflopende volgorde gepresenteerd. Houd er rekening mee dat je niet meer dan 100 berichten of opmerkingen tegelijk kunt opvragen.
De programmeertaal Go biedt verschillende krachtige functies die het een uitstekende keuze maken voor het ophalen van Reddit-posts en -commentaren in realtime. Hoewel andere programmeertalen ook voor dit doel kunnen worden gebruikt, zijn er specifieke voordelen aan het gebruik van Go, vooral als het gaat om real-time gegevensverwerking. Dit is waarom Go zich onderscheidt:
Allereerst zorgen Go's lichtgewicht threads, bekend als goroutines, voor efficiënte multitasking en gelijktijdigheid. Dit is vooral handig als je meerdere Reddit-posts of -commentaren tegelijk ophaalt, omdat elke ophaalbewerking in zijn eigen goroutine kan worden uitgevoerd.
Ten tweede bevat de standaardbibliotheek van Go een uitgebreide en efficiënte HTTP-client die het maken van webaanvragen vereenvoudigt. Dit is essentieel voor interactie met de API van Reddit om berichten en commentaar op te halen. Go's HTTP-client ondersteunt contexten, waardoor time-outs en annuleringen van verzoeken mogelijk zijn. Dit is cruciaal voor realtime toepassingen waarbij je ervoor wilt zorgen dat je toepassing responsief blijft en niet blijft hangen op vertraagde antwoorden.
Tot slot is Go een gecompileerde taal, wat meestal betekent dat toepassingen geschreven in Go snel zijn en een kleine voetafdruk hebben. Dit is gunstig voor real-time toepassingen die grote hoeveelheden gegevens snel moeten verwerken. Go's vuilnisman is ontworpen om efficiënt te zijn en de latentie laag te houden, wat cruciaal is voor het handhaven van de prestaties in realtime scenario's voor het ophalen van gegevens.
Hier is een stappenplan over het maken van een Go-programma dat het trefwoord "kwatch.io" in Go-posts controleert:
Hier is de 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()
}
}
Dit programma haalt elke seconde (asynchroon) de laatste 100 nieuwe berichten op van Reddit en print de titel, zelftekst en permalink van elk bericht naar de console. Je kunt hetzelfde doen met opmerkingen van Reddit door simpelweg de URL van het API-eindpunt te wijzigen.
Hier zijn een paar ideeën over hoe je dit programma zou kunnen verbeteren:
Het monitoren van specifieke trefwoorden op Reddit is mogelijk dankzij een vrij eenvoudig Go-programma.
Het produceren van zo'n programma kan echter een uitdaging zijn. Ten eerste omdat Reddit er goed in is om je te blokkeren als je te veel verzoeken doet, maar ook omdat hun API endpoints veel berichten en commentaren tegelijk terugsturen, wat betekent dat je Go-programma slim moet omgaan met dit hoge volume.
Als je zo'n systeem niet zelf wilt bouwen en onderhouden, raden we je aan om in plaats daarvan ons platform te gebruiken: registreer je hier op KWatch.io.
Arthur
Ga ontwikkelaar KWatch.io