A Reddit-posztokban és kommentekben említett kulcsszavak figyelése nagyon hasznos lehet a márka, a termékek, a versenytársak és a konkrét témák nyomon követéséhez... A Go egy nagyszerű nyelv az ilyen közösségi figyelő alkalmazásokhoz. Ebben a cikkben megnézzük, hogyan írhatunk egy egyszerű Go programot, amely a Reddit kulcsszavait figyeli.
A Reddit közösségi figyelése hihetetlenül hatékony eszköz mind az egyének, mind a szervezetek számára, számos célkitűzés tekintetében. Itt van néhány ok, amiért különösen fontos:
A Reddit néhány ingyenes API végpontot tesz közzé, amelyek lehetővé teszik, hogy minden új bejegyzést vagy kommentet megkapjon a platformon. Ezek a végpontok nem túl jól dokumentáltak.
Az utolsó 100 Reddit-poszt lekérdezéséhez GET HTTP-kérést kell indítanod a következő API-végpontra: https://www.reddit.com/r/all/new/.json?limit=100
Az utolsó 100 Reddit-kommentár lekérdezéséhez GET HTTP-kérést kell indítanod a következő API-végpontra: https://www.reddit.com/r/all/comments/.json?limit=100
Ezeknek az API végpontoknak a válasza egy JSON objektum, amely a bejegyzések vagy megjegyzések listáját tartalmazza.
Itt van egy (csonka) példa a válaszra, amit a hozzászólások végpont kérésekor kapok:
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
}
},
[...]
]
}
}
Amint láthatod, a Reddit egy objektumokból álló tömböt ad vissza. Minden objektum egy bejegyzés vagy egy komment (a kért végponttól függően), amely olyan átfogó adatokat tartalmaz, mint a bejegyzés tartalma, a bejegyzés url címe, a létrehozás dátuma és ideje stb. Ezek többsége nem lesz hasznos, és a "selftext" kétségtelenül a legfontosabb elem, mivel ez tartalmazza a bejegyzés vagy a komment tartalmát.
Az eredmények csökkenő sorrendben kerülnek bemutatásra. Felhívjuk figyelmét, hogy egyszerre nem kérhet 100-nál több hozzászólást vagy kommentet.
A Go programozási nyelv számos erőteljes funkciót kínál, amelyek kiváló választássá teszik a Reddit-bejegyzések és kommentek valós idejű lekérdezéséhez. Bár más programozási nyelvek is használhatók erre a célra, a Go használata különleges előnyökkel jár, különösen, ha valós idejű adatfeldolgozásról van szó. Íme, miért emelkedik ki a Go:
Először is, a Go könnyű szálai, az úgynevezett goroutine-ok lehetővé teszik a hatékony többfeladatos működést és az egyidejűséget. Ez különösen akkor hasznos, ha egyszerre több Reddit-posztot vagy kommentet hívunk le, mivel minden egyes lekérdezési művelet saját goroutine-ban futtatható.
Másodszor, a Go szabványos könyvtára tartalmaz egy átfogó és hatékony HTTP-klienst, amely leegyszerűsíti a webes kérések folyamatát. Ez elengedhetetlen a Reddit API-jával való interakcióhoz a bejegyzések és kommentek lekérdezéséhez. A Go HTTP-kliens támogatja a kontextusokat, lehetővé téve a kérések időkorlátozását és törlését. Ez kritikus fontosságú a valós idejű alkalmazásoknál, ahol biztosítani szeretné, hogy az alkalmazás továbbra is reagáljon, és ne akadjon fenn a késleltetett válaszokon.
Végül, a Go egy fordított nyelv, ami jellemzően azt jelenti, hogy a Go nyelven írt alkalmazások gyorsak és kis lábnyomúak. Ez előnyös a valós idejű alkalmazások számára, amelyeknek nagy mennyiségű adatot kell gyorsan feldolgozniuk. A Go szemétgyűjtőjét úgy tervezték, hogy hatékony legyen és alacsonyan tartsa a késleltetést, ami kulcsfontosságú a teljesítmény fenntartásához a valós idejű adatlehívási forgatókönyvekben.
Itt egy lépésről-lépésre bemutatott terv egy olyan Go program elkészítéséről, amely a "kwatch.io" kulcsszót figyeli Go bejegyzésekben:
Itt a Go kód:
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()
}
}
Ez a program másodpercenként (aszinkron) lekérdezi az utolsó 100 új bejegyzést a Redditről, és kiírja a konzolra az egyes bejegyzések címét, szelfi szövegét és permalinkjét. Ugyanezt megteheti Reddit-kommentárokkal is, ha egyszerűen megváltoztatja az API végpont URL-címét.
Íme néhány ötlet arra vonatkozóan, hogyan lehetne javítani ezen a programon:
A Reddit adott kulcsszavainak nyomon követése egy meglehetősen egyszerű Go programnak köszönhetően lehetséges.
Egy ilyen program előállítása azonban kihívást jelenthet. Egyrészt azért, mert a Reddit jól blokkolja a túl sok kérést, másrészt azért, mert az API végpontjaik egyszerre sok posztot és kommentet küldenek vissza, ami azt jelenti, hogy a Go programodnak okosan kell kezelnie ezt a nagy mennyiséget.
Ha nem szeretne egy ilyen rendszert saját maga kiépíteni és karbantartani, akkor javasoljuk, hogy használja inkább a mi platformunkat: regisztráljon a KWatch.io-n itt.
Arthur
Go Fejlesztő KWatch.io