Monitorowanie słów kluczowych, które są wymieniane w postach i komentarzach Reddit może być bardzo przydatne do monitorowania marki, produktów, konkurencji, bycia na bieżąco z określonymi tematami... Go jest świetnym językiem dla takich aplikacji social listening. W tym artykule zobaczymy, jak napisać prosty program Go, który monitoruje słowa kluczowe na Reddit.
Social listening na Reddit jest niezwykle potężnym narzędziem zarówno dla osób indywidualnych, jak i organizacji w różnych celach. Oto kilka powodów, dla których jest to szczególnie ważne:
Reddit udostępnia kilka darmowych punktów końcowych API, które pozwalają uzyskać dostęp do wszystkich nowych postów lub komentarzy opublikowanych na platformie. Te punkty końcowe nie są zbyt dobrze udokumentowane.
Aby uzyskać 100 ostatnich postów Reddit, należy wykonać żądanie GET HTTP do następującego punktu końcowego API: https://www.reddit.com/r/all/new/.json?limit=100
Aby uzyskać 100 ostatnich komentarzy Reddit, należy wykonać żądanie GET HTTP do następującego punktu końcowego API: https://www.reddit.com/r/all/comments/.json?limit=100
Odpowiedzią tych punktów końcowych API jest obiekt JSON zawierający listę postów lub komentarzy.
Oto (okrojony) przykład odpowiedzi, którą otrzymuję podczas żądania punktu końcowego postów:
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
}
},
[...]
]
}
}
Jak widać, Reddit zwraca tablicę obiektów. Każdy obiekt jest postem lub komentarzem (w zależności od żądanego punktu końcowego), który zawiera szczegółowe informacje, takie jak treść zgłoszenia, adres URL zgłoszenia, data i godzina utworzenia itp. Większość z nich nie będzie przydatna, a "selftext" jest bez wątpienia najważniejszym elementem, ponieważ zawiera treść postu lub komentarza.
Wyniki są prezentowane w kolejności malejącej. Pamiętaj, że nie możesz poprosić o więcej niż 100 postów lub komentarzy jednocześnie.
Język programowania Go oferuje kilka potężnych funkcji, które czynią go doskonałym wyborem do pobierania postów i komentarzy Reddit w czasie rzeczywistym. Chociaż inne języki programowania mogą być również wykorzystywane do tego celu, istnieją szczególne zalety korzystania z Go, zwłaszcza w przypadku przetwarzania danych w czasie rzeczywistym. Oto dlaczego Go się wyróżnia:
Po pierwsze, lekkie wątki Go, znane jako goroutines, pozwalają na wydajną wielozadaniowość i współbieżność. Jest to szczególnie przydatne podczas pobierania wielu postów lub komentarzy z Reddita jednocześnie, ponieważ każda operacja pobierania może być uruchamiana we własnym goroutine.
Po drugie, standardowa biblioteka Go zawiera wszechstronnego i wydajnego klienta HTTP, który upraszcza proces tworzenia żądań internetowych. Jest to niezbędne do interakcji z API Reddita w celu pobierania postów i komentarzy. Klient HTTP Go obsługuje konteksty, pozwalając na przekroczenie limitu czasu i anulowanie żądania. Ma to kluczowe znaczenie dla aplikacji działających w czasie rzeczywistym, w których chcesz mieć pewność, że aplikacja pozostanie responsywna i nie zostanie zawieszona z powodu opóźnionych odpowiedzi.
Wreszcie, Go jest językiem kompilowanym, co zazwyczaj oznacza, że aplikacje napisane w Go są szybkie i mają niewielki ślad. Jest to korzystne dla aplikacji działających w czasie rzeczywistym, które muszą szybko przetwarzać duże ilości danych. Garbage collector Go został zaprojektowany tak, aby był wydajny i utrzymywał niskie opóźnienia, co ma kluczowe znaczenie dla utrzymania wydajności w scenariuszach pobierania danych w czasie rzeczywistym.
Oto plan krok po kroku dotyczący tworzenia programu Go, który monitoruje słowo kluczowe "kwatch.io" w postach Go:
Oto kod 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()
}
}
Ten program będzie pobierał ostatnie 100 nowych postów z Reddit co sekundę (asynchronicznie) i drukował tytuł, autotekst i permalink każdego postu w konsoli. Możesz zrobić to samo z komentarzami Reddit, po prostu zmieniając adres URL punktu końcowego API.
Oto kilka pomysłów na ulepszenie tego programu:
Monitorowanie określonych słów kluczowych na Reddicie jest możliwe dzięki dość prostemu programowi Go.
Produkcja takiego programu może jednak stanowić wyzwanie. Po pierwsze dlatego, że Reddit jest dobry w blokowaniu cię, jeśli wykonujesz zbyt wiele żądań, ale także dlatego, że ich punkty końcowe API zwracają wiele postów i komentarzy w tym samym czasie, co oznacza, że twój program Go musi inteligentnie obsługiwać ten wysoki wolumen.
Jeśli nie chcesz samodzielnie budować i utrzymywać takiego systemu, zalecamy skorzystanie z naszej platformy: zarejestrować się na KWatch.io tutaj.
Arthur
Go Developer KWatch.io