Reddit ziņojumos un komentāros pieminēto atslēgvārdu monitorings var būt ļoti noderīgs, lai uzraudzītu savu zīmolu, produktus, konkurentus, būtu informēti par konkrētām tēmām... Go ir lieliska valoda šādām sociālās klausīšanās lietojumprogrammām. Šajā rakstā apskatīsim, kā uzrakstīt vienkāršu Go programmu, kas uzrauga atslēgvārdus vietnē Reddit.
Sociālo tīklu klausīšanās vietnē Reddit ir neticami spēcīgs rīks gan privātpersonām, gan organizācijām, kas var sasniegt dažādus mērķus. Šeit ir vairāki iemesli, kāpēc tā ir īpaši svarīga:
Reddit piedāvā vairākus bezmaksas API galapunktus, kas ļauj jums saņemt katru jaunu ierakstu vai komentāru, kas publicēts platformā. Šie galapunkti nav ļoti labi dokumentēti.
Lai iegūtu pēdējos 100 Reddit ierakstus, ir jāveic GET HTTP pieprasījums uz šādu API galapunktu: https://www.reddit.com/r/all/new/.json?limit=100
Lai iegūtu pēdējos 100 Reddit komentārus, ir jāveic GET HTTP pieprasījums uz šādu API galapunktu: https://www.reddit.com/r/all/comments/.json?limit=100
Šo API galapunktu atbilde ir JSON objekts, kas satur ziņojumu vai komentāru sarakstu.
Šeit ir (saīsināts) atbildes piemērs, ko saņemu, pieprasot amatu galapunktu:
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
}
},
[...]
]
}
}
Kā redzat, Reddit atgriež objektu masīvu. Katrs objekts ir ziņa vai komentārs (atkarībā no pieprasītā galapunkta), kas satur visaptverošu informāciju, piemēram, iesnieguma saturu, iesnieguma url, izveides datumu un laiku utt. Lielākā daļa no tiem nebūs noderīgi, un "pašteksts" neapšaubāmi ir vissvarīgākais elements, jo tajā ir ietverts ziņas vai komentāra saturs.
Rezultāti ir norādīti dilstošā secībā. Lūdzu, ņemiet vērā, ka vienlaicīgi nevarat pieprasīt vairāk nekā 100 ziņas vai komentārus.
Go programmēšanas valodai ir vairākas jaudīgas funkcijas, kas padara to par lielisku risinājumu Reddit ziņojumu un komentāru iegūšanai reāllaikā. Lai gan šim nolūkam var izmantot arī citas programmēšanas valodas, Go ir īpašas priekšrocības, jo īpaši attiecībā uz reāllaika datu apstrādi. Lūk, ar ko Go izceļas:
Pirmkārt, Go vieglie pavedieni, kas pazīstami kā goroutines, nodrošina efektīvu daudzuzdevumu izpildi un vienlaicīgumu. Tas ir īpaši noderīgi, ja vienlaicīgi tiek ielādēti vairāki Reddit ieraksti vai komentāri, jo katru ielādes operāciju var veikt savā goroutine.
Otrkārt, Go standarta bibliotēkā ir iekļauts visaptverošs un efektīvs HTTP klients, kas vienkāršo tīmekļa pieprasījumu veikšanu. Tas ir būtiski, lai mijiedarbotos ar Reddit API, lai iegūtu ziņas un komentārus. Go HTTP klients atbalsta kontekstus, kas ļauj izmantot pieprasījumus, kuru pieprasījums ir pārtraukts un atcelts. Tas ir ļoti svarīgi reāllaika lietojumprogrammām, kurās vēlaties nodrošināt, lai lietojumprogramma reaģētu un netiktu apturēta, ja tiek saņemtas novēlotas atbildes.
Visbeidzot, Go ir kompilētā valoda, kas parasti nozīmē, ka Go valodā rakstītās lietojumprogrammas ir ātras un tām ir maza izmēra. Tas ir izdevīgi reālā laika lietojumprogrammām, kurām ātri jāapstrādā lieli datu apjomi. Go atkritumu savācējs ir izstrādāts tā, lai būtu efektīvs un saglabātu zemu latentumu, kas ir ļoti svarīgi, lai saglabātu veiktspēju reālā laika datu iegūšanas scenārijos.
Šeit ir soli pa solim izklāstīts plāns, kā izveidot Go programmu, kas Go ziņojumos uzrauga atslēgvārdu "kwatch.io":
Šeit ir Go kods:
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()
}
}
Šī programma katru sekundi (asinhroni) ielādēs pēdējos 100 jaunos ierakstus no Reddit un izdrukās katra ieraksta virsrakstu, paštekstu un permalink uz konsoles. To pašu var izdarīt ar Reddit komentāriem, vienkārši mainot API galapunkta URL.
Šeit ir dažas idejas, kā jūs varētu uzlabot šo programmu:
Konkrētu atslēgvārdu uzraudzība vietnē Reddit ir iespējama, pateicoties diezgan vienkāršai Go programmai.
Tomēr šādas programmas producēšana var būt sarežģīta. Pirmkārt, tāpēc, ka Reddit labi bloķē jūs, ja veicat pārāk daudz pieprasījumu, bet arī tāpēc, ka to API galapunkti vienlaicīgi atgriež daudz ziņu un komentāru, kas nozīmē, ka jūsu Go programmai ir gudri jāapstrādā šis lielais apjoms.
Ja nevēlaties pats veidot un uzturēt šādu sistēmu, iesakām izmantot mūsu platformu: reģistrēties KWatch.io šeit.
Arthur
Iet Izstrādātājs KWatch.io