Reddit-viesteissä ja -kommenteissa mainittujen avainsanojen seuranta voi olla erittäin hyödyllistä, kun haluat seurata brändiäsi, tuotteitasi, kilpailijoitasi, pysyä ajan tasalla tietyistä aiheista... Go on loistava kieli tällaisille sosiaalisen kuuntelun sovelluksille. Tässä artikkelissa näemme, miten kirjoitetaan yksinkertainen Go -ohjelma, joka tarkkailee avainsanoja Redditissä.
Sosiaalinen kuuntelu Redditissä on uskomattoman tehokas työkalu sekä yksityishenkilöille että organisaatioille monissa eri tavoitteissa. Tässä on useita syitä, miksi se on erityisen tärkeää:
Reddit tarjoaa pari ilmaista API-päätepistettä, joiden avulla voit saada kaikki uudet viestit tai kommentit, joita alustalla on tehty. Näitä päätepisteitä ei ole dokumentoitu kovin hyvin.
Saadaksesi 100 viimeisintä Reddit-postausta sinun tulee tehdä GET HTTP-pyyntö seuraavaan API-päätepisteeseen: https://www.reddit.com/r/all/new/.json?limit=100
Saadaksesi 100 viimeisintä Reddit-kommenttia sinun tulee tehdä GET HTTP-pyyntö seuraavaan API-päätepisteeseen: https://www.reddit.com/r/all/comments/.json?limit=100
Näiden API-päätepisteiden vastaus on JSON-objekti, joka sisältää luettelon viesteistä tai kommenteista.
Tässä on (typistetty) esimerkki vastauksesta, jonka saan, kun pyydän postit-päätepistettä:
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
}
},
[...]
]
}
}
Kuten näet, Reddit palauttaa joukko objekteja. Jokainen objekti on viesti tai kommentti (riippuen pyytämästäsi päätepisteestä), joka sisältää kattavat tiedot, kuten lähetyksen sisällön, lähetyksen url-osoitteen, luontipäivämäärän ja -ajan jne. Useimmat niistä eivät ole hyödyllisiä, ja "selftext" on epäilemättä tärkein elementti, sillä se sisältää viestin tai kommentin sisällön.
Tulokset esitetään alenevassa järjestyksessä. Huomaa, että et voi pyytää samanaikaisesti yli 100 viestiä tai kommenttia.
Go -ohjelmointikieli tarjoaa useita tehokkaita ominaisuuksia, jotka tekevät siitä erinomaisen valinnan Reddit-postausten ja -kommenttien hakemiseen reaaliajassa. Vaikka muitakin ohjelmointikieliä voidaan käyttää tähän tarkoitukseen, Go-kielen käyttämisessä on erityisiä etuja, erityisesti reaaliaikaisessa tietojenkäsittelyssä. Seuraavassa kerrotaan, miksi Go erottuu edukseen:
Ensinnäkin Gon kevyet säikeet, jotka tunnetaan nimellä goroutines, mahdollistavat tehokkaan moniajon ja samanaikaisuuden. Tämä on erityisen hyödyllistä, kun haet useita Reddit-postauksia tai -kommentteja samanaikaisesti, sillä jokainen hakuoperaatio voidaan suorittaa omassa goroutiinissaan.
Toiseksi Go:n standardikirjasto sisältää kattavan ja tehokkaan HTTP-asiakasohjelman, joka yksinkertaistaa verkkopyyntöjen tekemistä. Tämä on välttämätöntä Redditin API:n kanssa toimimisessa, kun haetaan viestejä ja kommentteja. Go:n HTTP-asiakas tukee konteksteja, jotka mahdollistavat pyyntöjen aikakatkaisut ja peruutukset. Tämä on kriittistä reaaliaikaisissa sovelluksissa, joissa halutaan varmistaa, että sovellus pysyy reagoivana eikä jää jumiin viivästyneisiin vastauksiin.
Go on käännetty kieli, mikä tarkoittaa yleensä sitä, että Go-kielellä kirjoitetut sovellukset ovat nopeita ja pienikokoisia. Tästä on hyötyä reaaliaikaisille sovelluksille, joiden on käsiteltävä suuria tietomääriä nopeasti. Go:n roskienkerääjä on suunniteltu tehokkaaksi ja pitämään viiveet alhaisina, mikä on ratkaisevan tärkeää suorituskyvyn ylläpitämiseksi reaaliaikaisissa tiedonhakutilanteissa.
Tässä on vaiheittainen suunnitelma sellaisen Go -ohjelman tekemisestä, joka tarkkailee Go -posteissa avainsanaa "kwatch.io":
Tässä on Go-koodi:
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()
}
}
Tämä ohjelma hakee 100 viimeisintä uutta viestiä Redditistä joka sekunti (asynkronisesti) ja tulostaa jokaisen viestin otsikon, seletekstin ja permalinkin konsoliin. Voit tehdä saman Reddit-kommenteille muuttamalla API-päätepisteen URL-osoitetta.
Seuraavassa on pari ideaa siitä, miten voisit parantaa tätä ohjelmaa:
Tiettyjen avainsanojen seuranta Redditissä on mahdollista melko yksinkertaisen Go -ohjelman avulla.
Tällaisen ohjelman tuottaminen voi kuitenkin olla haastavaa. Ensinnäkin siksi, että Reddit on hyvä estämään sinut, jos teet liikaa pyyntöjä, mutta myös siksi, että heidän API-päätepisteensä palauttavat paljon viestejä ja kommentteja samaan aikaan, mikä tarkoittaa, että Go -ohjelmasi on käsiteltävä tämä suuri määrä älykkäästi.
Jos et halua rakentaa ja ylläpitää tällaista järjestelmää itse, suosittelemme, että käytät sen sijaan alustamme: rekisteröityä KWatch.io-sivustolle täällä.
Arthur
Siirry kehittäjä KWatch.io