Моніторинг ключових слів, які згадуються в публікаціях і коментарях на Reddit, може бути дуже корисним для моніторингу вашого бренду, ваших продуктів, ваших конкурентів, для того, щоб бути в курсі певних тем... Go - чудова мова для таких програм соціального прослуховування. У цій статті ми розглянемо, як написати просту програму на Go, яка відстежує ключові слова на Reddit.
Соціальне аудіювання на Reddit - це неймовірно потужний інструмент як для приватних осіб, так і для організацій, що мають різні цілі. Ось кілька причин, чому це особливо важливо:
Reddit пропонує кілька безкоштовних кінцевих точок API, які дозволяють вам отримувати всі нові дописи або коментарі, зроблені на платформі. Ці кінцеві точки не дуже добре задокументовані.
Щоб отримати останні 100 дописів Reddit, вам потрібно зробити GET HTTP-запит до наступної кінцевої точки API: https://www.reddit.com/r/all/new/.json?limit=100
Щоб отримати останні 100 коментарів Reddit, вам слід зробити GET HTTP-запит до наступної кінцевої точки API: https://www.reddit.com/r/all/comments/.json?limit=100
Відповіддю цих кінцевих точок API є JSON-об'єкт, який містить список дописів або коментарів.
Ось (скорочений) приклад відповіді, яку я отримую при запиті до кінцевої точки постів:
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
}
},
[...]
]
}
}
Як бачите, Reddit повертає масив об'єктів. Кожен об'єкт - це допис або коментар (залежно від кінцевої точки, яку ви запитували), що містить вичерпні деталі, такі як зміст допису, URL-адресу допису, дату і час створення тощо. Більшість з них не будуть корисними, а "самотекст", безсумнівно, є найважливішим елементом, оскільки він містить зміст допису або коментаря.
Результати представлені в порядку спадання. Зверніть увагу, що ви не можете запитувати більше 100 дописів або коментарів одночасно.
Мова програмування Go пропонує кілька потужних функцій, які роблять її чудовим вибором для пошуку дописів і коментарів Reddit у режимі реального часу. Хоча для цього можна використовувати й інші мови програмування, використання Go має певні переваги, особливо коли йдеться про обробку даних у реальному часі. Ось чому Go виділяється:
Перш за все, легкі потоки Go, відомі як підпрограми, дозволяють ефективно використовувати багатозадачність і паралелізм. Це особливо корисно, коли ви отримуєте кілька дописів або коментарів Reddit одночасно, оскільки кожна операція вибірки може бути виконана у власній підпрограмі.
По-друге, стандартна бібліотека Go включає комплексний та ефективний HTTP-клієнт, який спрощує процес створення веб-запитів. Це важливо для взаємодії з API Reddit для отримання дописів та коментарів. HTTP-клієнт Go підтримує контексти, що дозволяє встановлювати таймаути та скасовувати запити. Це дуже важливо для додатків, що працюють у режимі реального часу, де ви хочете, щоб ваш додаток залишався оперативним і не зависав через затримку відповідей.
Нарешті, Go - це компільована мова, що зазвичай означає, що додатки, написані на Go, працюють швидко і займають мало місця. Це корисно для додатків реального часу, які повинні швидко обробляти великі обсяги даних. Збирач сміття в Go розроблено ефективно і з низькою затримкою, що має вирішальне значення для підтримки продуктивності в сценаріях збору даних у реальному часі.
Ось покроковий план створення Go-програми, яка відстежує ключове слово "kwatch.io" в Go-постах:
Ось код 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()
}
}
Ця програма щосекунди (асинхронно) завантажуватиме останні 100 нових дописів з Reddit і виводитиме на консоль заголовок, самотекст і постійне посилання кожного допису. Ви можете зробити те саме з коментарями Reddit, просто змінивши URL-адресу кінцевої точки API.
Ось кілька ідей про те, як ви можете покращити цю програму:
Моніторинг конкретних ключових слів на Reddit можливий завдяки досить простій програмі Go.
Однак створення такої програми може бути складним завданням. По-перше, тому що Reddit може заблокувати вас, якщо ви зробите занадто багато запитів, а також тому, що їхні кінцеві точки API повертають багато постів і коментарів одночасно, а це означає, що ваша Go-програма повинна розумно обробляти цей великий обсяг.
Якщо ви не хочете створювати та підтримувати таку систему самостійно, ми рекомендуємо вам скористатися нашою платформою: зареєструватися на KWatch.io тут.
Arthur
Go Developer KWatch.io