Redditi postitustes ja kommentaarides mainitud märksõnade jälgimine võib olla väga kasulik, et jälgida oma brändi, oma tooteid, konkurente, olla kursis konkreetsete teemadega... Go on suurepärane keel selliste sotsiaalse kuulamise rakenduste jaoks. Selles artiklis näeme, kuidas kirjutada lihtne Go programm, mis jälgib Redditi märksõnu.
Redditi sotsiaalne kuulamine on uskumatult võimas vahend nii üksikisikute kui ka organisatsioonide jaoks erinevate eesmärkide puhul. Siin on mitu põhjust, miks see on eriti oluline:
Reddit avaldab paar tasuta API-punkti, mis võimaldavad teil saada iga uut postitust või kommentaari, mis on platvormil tehtud. Need otspunktid ei ole väga hästi dokumenteeritud.
Selleks, et saada viimased 100 Redditi postitust, peaksite tegema GET HTTP päringu järgmisele API-punktile: https://www.reddit.com/r/all/new/.json?limit=100
Selleks, et saada viimased 100 Redditi kommentaari, peaksite tegema GET HTTP päringu järgmisele API lõpp-punktile: https://www.reddit.com/r/all/comments/.json?limit=100
Nende API-punktide vastus on JSON-objekt, mis sisaldab postituste või kommentaaride loetelu.
Siin on (kärbitud) näide vastusest, mille ma saan, kui ma taotlen postituste lõpp-punkti:
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
}
},
[...]
]
}
}
Nagu näete, tagastab Reddit objektide massiivi. Iga objekt on postitus või kommentaar (sõltuvalt taotletud lõpp-punktist), mis sisaldab põhjalikke üksikasju, nagu esituse sisu, esitamise url, loomise kuupäev ja kellaaeg jne. Enamik neist ei ole kasulikud ja "selftext" on kahtlemata kõige olulisem element, kuna see sisaldab postituse või kommentaari sisu.
Tulemused on esitatud kahanevas järjekorras. Pange tähele, et te ei saa taotleda korraga rohkem kui 100 postitust või kommentaari.
Go programmeerimiskeel pakub mitmeid võimsaid funktsioone, mis muudavad selle suurepäraseks valikuks Redditi postituste ja kommentaaride reaalajas otsimiseks. Kuigi selleks saab kasutada ka teisi programmeerimiskeeli, on Go kasutamisel spetsiifilisi eeliseid, eriti kui tegemist on reaalajas andmete töötlemisega. Siin on, miks Go paistab silma:
Kõigepealt võimaldavad Go kergekaalulised lõimed, mida nimetatakse goroutine'ideks, tõhusat multitaskingut ja samaaegsust. See on eriti kasulik siis, kui te korraga mitu Redditi postitust või kommentaari välja otsite, kuna iga väljavõtteoperatsiooni saab käivitada omaette goroutine'is.
Teiseks sisaldab Go standardraamatukogu põhjalikku ja tõhusat HTTP-klienti, mis lihtsustab veebipäringute tegemise protsessi. See on oluline Redditi API-ga suhtlemiseks, et otsida postitusi ja kommentaare. Go HTTP-klient toetab kontekste, võimaldades päringu aegumist ja tühistamist. See on kriitilise tähtsusega reaalajas töötavate rakenduste puhul, kus soovite tagada, et teie rakendus jääb reageerima ja ei takerdu hilinenud vastuste tõttu.
Lõpuks on Go kompileeritud keel, mis tähendab tavaliselt, et Go keeles kirjutatud rakendused on kiired ja väikese jalajäljega. See on kasulik reaalajas töötavate rakenduste puhul, mis peavad kiiresti töötlema suuri andmemahte. Go prügikoguja on loodud selleks, et olla tõhus ja hoida latentsus madalal, mis on oluline jõudluse säilitamiseks reaalajas andmete otsimise stsenaariumides.
Siin on samm-sammult plaan Go programmi tegemisest, mis jälgib Go postitustes märksõna "kwatch.io":
Siin on Go-kood:
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()
}
}
See programm hangib Redditist iga sekund (asünkroonselt) viimased 100 uut postitust ning väljastab konsooli iga postituse pealkirja, selftesti ja permalinki. Sama saab teha ka Redditi kommentaaridega, muutes lihtsalt API lõpp-punkti URL-i.
Siin on paar ideed, kuidas saaksite seda programmi parandada:
Konkreetsete märksõnade jälgimine Redditil on võimalik tänu üsna lihtsale Go programmile.
Sellise programmi tootmine võib siiski olla keeruline. Esiteks sellepärast, et Reddit on hea selles, et blokeerib teid, kui teete liiga palju päringuid, aga ka sellepärast, et nende API-punktid tagastavad korraga palju postitusi ja kommentaare, mis tähendab, et teie Go programm peab seda suurt mahtu targalt käitlema.
Kui te ei soovi sellist süsteemi ise üles ehitada ja hooldada, soovitame kasutada hoopis meie platvormi: registreeru KWatch.io's siin.
Arthur
Mine arendaja KWatch.io