Surveiller les mots-clés mentionnés dans les posts et commentaires Reddit peut être très utile pour surveiller votre marque, vos produits, vos concurrents, rester informé sur des sujets spécifiques... Go est un excellent langage pour de telles applications d'écoute sociale. Dans cet article, nous allons voir comment écrire un simple programme Go qui surveille les mots-clés sur Reddit.
L'écoute sociale sur Reddit est un outil incroyablement puissant, tant pour les individus que pour les organisations, et ce pour toute une série d'objectifs. Voici plusieurs raisons pour lesquelles il est particulièrement important :
Reddit propose quelques points d'accès gratuits à l'API qui vous permettent d'obtenir tous les nouveaux messages ou commentaires publiés sur la plateforme. Ces points de terminaison ne sont pas très bien documentés.
Pour obtenir les 100 derniers messages Reddit, vous devez envoyer une requête GET HTTP au point de terminaison suivant de l'API : https://www.reddit.com/r/all/new/.json?limit=100
Pour obtenir les 100 derniers commentaires Reddit, vous devez envoyer une requête GET HTTP au point de terminaison API suivant : https://www.reddit.com/r/all/comments/.json?limit=100
La réponse de ces points d'extrémité de l'API est un objet JSON qui contient une liste d'articles ou de commentaires.
Voici un exemple (tronqué) d'une réponse que j'obtiens lorsque je demande le point de terminaison 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
}
},
[...]
]
}
}
Comme vous pouvez le voir, Reddit renvoie un tableau d'objets. Chaque objet est un article ou un commentaire (selon le point d'accès que vous avez demandé) qui contient des détails complets tels que le contenu de la soumission, l'url de la soumission, la date et l'heure de création, etc. La plupart d'entre eux ne seront pas utiles, et le "selftext" est sans aucun doute l'élément le plus important car il contient le contenu de l'article ou du commentaire.
Les résultats sont présentés par ordre décroissant. Veuillez noter que vous ne pouvez pas demander plus de 100 messages ou commentaires en même temps.
Le langage de programmation Go offre plusieurs fonctionnalités puissantes qui en font un excellent choix pour récupérer les messages et commentaires Reddit en temps réel. Bien que d'autres langages de programmation puissent également être utilisés à cette fin, Go présente des avantages spécifiques, notamment en ce qui concerne le traitement des données en temps réel. Voici pourquoi Go se distingue :
Tout d'abord, les threads légers de Go, connus sous le nom de goroutines, permettent un multitâche et une concurrence efficaces. C'est particulièrement utile lorsque vous récupérez plusieurs posts ou commentaires Reddit simultanément, car chaque opération de récupération peut être exécutée dans sa propre goroutine.
Deuxièmement, la bibliothèque standard de Go comprend un client HTTP complet et efficace qui simplifie le processus de requêtes web. Cela est essentiel pour interagir avec l'API de Reddit afin de récupérer les messages et les commentaires. Le client HTTP de Go prend en charge les contextes, ce qui permet de temporiser et d'annuler les requêtes. Cette fonctionnalité est essentielle pour les applications en temps réel, car elle permet de s'assurer que l'application reste réactive et qu'elle n'est pas bloquée par des réponses retardées.
Enfin, Go est un langage compilé, ce qui signifie généralement que les applications écrites en Go sont rapides et peu encombrantes. C'est un avantage pour les applications en temps réel qui doivent traiter rapidement de grands volumes de données. Le ramasse-miettes de Go est conçu pour être efficace et pour maintenir une faible latence, ce qui est crucial pour maintenir les performances dans les scénarios de récupération de données en temps réel.
Voici un plan étape par étape pour créer un programme Go qui surveille le mot-clé "kwatch.io" dans les messages Go :
Voici le code 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()
}
}
Ce programme récupère les 100 derniers messages de Reddit toutes les secondes (de manière asynchrone) et imprime le titre, le texte et le permalien de chaque message sur la console. Vous pouvez faire la même chose avec les commentaires Reddit en changeant simplement l'URL du point de terminaison de l'API.
Voici quelques idées pour améliorer ce programme :
Surveiller des mots-clés spécifiques sur Reddit est possible grâce à un programme Go assez simple.
La production d'un tel programme peut toutefois s'avérer difficile. D'abord parce que Reddit sait vous bloquer si vous faites trop de requêtes, mais aussi parce que les points d'entrée de leur API renvoient un grand nombre de messages et de commentaires en même temps, ce qui signifie que votre programme Go doit gérer ce volume élevé de manière intelligente.
Si vous ne souhaitez pas construire et maintenir un tel système par vous-même, nous vous recommandons d'utiliser notre plateforme : s'inscrire sur KWatch.io ici.
Arthur
Go Développeur KWatch.io