Il monitoraggio delle parole chiave citate nei post e nei commenti di Reddit può essere molto utile per monitorare il vostro marchio, i vostri prodotti, i vostri concorrenti, rimanere informati su argomenti specifici... Go è un ottimo linguaggio per queste applicazioni di social listening. In questo articolo vedremo come scrivere un semplice programma Go che monitora le parole chiave su Reddit.
L'ascolto sociale su Reddit è uno strumento incredibilmente potente sia per i singoli che per le organizzazioni, per una serie di obiettivi. Ecco alcuni motivi per cui è particolarmente importante:
Reddit espone un paio di endpoint API gratuiti che consentono di ottenere ogni nuovo post o commento pubblicato sulla piattaforma. Questi endpoint non sono molto ben documentati.
Per ottenere gli ultimi 100 post di Reddit, occorre effettuare una richiesta HTTP GET al seguente endpoint API: https://www.reddit.com/r/all/new/.json?limit=100
Per ottenere gli ultimi 100 commenti di Reddit, è necessario effettuare una richiesta HTTP GET al seguente endpoint API: https://www.reddit.com/r/all/comments/.json?limit=100
La risposta di questi endpoint API è un oggetto JSON che contiene un elenco di post o commenti.
Ecco un esempio (troncato) di risposta che ottengo quando richiedo l'endpoint dei messaggi:
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
}
},
[...]
]
}
}
Come si può vedere, Reddit restituisce un array di oggetti. Ogni oggetto è un post o un commento (a seconda dell'endpoint richiesto) che contiene dettagli completi come il contenuto dell'invio, l'url dell'invio, la data e l'ora di creazione, ecc. La maggior parte di essi non è utile, mentre "selftext" è senza dubbio l'elemento più importante, poiché contiene il contenuto del post o del commento.
I risultati sono presentati in ordine decrescente. Si noti che non è possibile richiedere più di 100 post o commenti contemporaneamente.
Il linguaggio di programmazione Go offre diverse caratteristiche potenti che lo rendono una scelta eccellente per recuperare i post e i commenti di Reddit in tempo reale. Sebbene sia possibile utilizzare anche altri linguaggi di programmazione per questo scopo, l'uso di Go presenta vantaggi specifici, soprattutto quando si tratta di elaborazione di dati in tempo reale. Ecco perché Go si distingue:
Innanzitutto, i thread leggeri di Go, noti come goroutine, consentono un multitasking e una concorrenza efficienti. Questo è particolarmente utile quando si recuperano più post o commenti di Reddit contemporaneamente, poiché ogni operazione di recupero può essere eseguita nella propria goroutine.
In secondo luogo, la libreria standard di Go include un client HTTP completo ed efficiente che semplifica il processo di richiesta al web. Questo è essenziale per interagire con l'API di Reddit per recuperare post e commenti. Il client HTTP di Go supporta i contesti, consentendo il timeout e la cancellazione delle richieste. Questo è fondamentale per le applicazioni in tempo reale, dove si vuole garantire che l'applicazione rimanga reattiva e non sia bloccata da risposte in ritardo.
Infine, Go è un linguaggio compilato, il che significa che le applicazioni scritte in Go sono veloci e hanno un ingombro ridotto. Ciò è vantaggioso per le applicazioni in tempo reale che devono elaborare rapidamente grandi volumi di dati. Il garbage collector di Go è progettato per essere efficiente e mantenere bassa la latenza, il che è fondamentale per mantenere le prestazioni in scenari di recupero dei dati in tempo reale.
Ecco un piano passo-passo per la creazione di un programma Go che monitora la parola chiave "kwatch.io" nei messaggi Go:
Ecco il codice 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()
}
}
Questo programma recupera gli ultimi 100 nuovi post da Reddit ogni secondo (in modo asincrono) e stampa il titolo, l'autotesto e il permalink di ogni post nella console. È possibile fare la stessa cosa con i commenti di Reddit, semplicemente cambiando l'URL dell'endpoint dell'API.
Ecco un paio di idee su come migliorare questo programma:
Il monitoraggio di parole chiave specifiche su Reddit è possibile grazie a un programma Go piuttosto semplice.
Produrre un programma di questo tipo può essere però impegnativo. Innanzitutto perché Reddit è bravo a bloccarvi se fate troppe richieste, ma anche perché i suoi endpoint API restituiscono molti post e commenti allo stesso tempo, il che significa che il vostro programma Go deve gestire questo volume elevato in modo intelligente.
Se non volete costruire e mantenere un tale sistema da soli, vi consigliamo di utilizzare la nostra piattaforma: registrarsi su KWatch.io qui.
Arthur
Vai Sviluppatore KWatch.io