Мониторинг ключевых слов, которые упоминаются в постах и комментариях на Reddit, может быть очень полезен для мониторинга вашего бренда, ваших продуктов, конкурентов, чтобы быть в курсе конкретных тем... Go - отличный язык для таких приложений социального прослушивания. В этой статье мы рассмотрим, как написать простую программу на Go, которая отслеживает ключевые слова на Reddit.
Социальное прослушивание на Reddit - это невероятно мощный инструмент как для отдельных людей, так и для организаций с самыми разными целями. Вот несколько причин, по которым он особенно важен:
Reddit предоставляет несколько бесплатных конечных точек API, которые позволяют вам получать все новые сообщения или комментарии, сделанные на платформе. Эти конечные точки не очень хорошо документированы.
Чтобы получить последние 100 сообщений Reddit, необходимо выполнить HTTP-запрос GET к следующей конечной точке API: https://www.reddit.com/r/all/new/.json?limit=100
Чтобы получить последние 100 комментариев Reddit, нужно сделать HTTP-запрос GET к следующей конечной точке API: https://www.reddit.com/r/all/comments/.json?limit=100
Ответ этих конечных точек API представляет собой объект JSON, содержащий список постов или комментариев.
Вот (усеченный) пример ответа, который я получаю при запросе конечной точки posts:
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 сообщения, дата и время создания и т. д. Большинство из них не пригодятся, а "selftext", несомненно, является самым важным элементом, поскольку содержит содержимое поста или комментария.
Результаты представлены в порядке убывания. Обратите внимание, что вы не можете одновременно запросить более 100 сообщений или комментариев.
Язык программирования Go обладает рядом мощных возможностей, которые делают его отличным выбором для получения сообщений и комментариев Reddit в режиме реального времени. Хотя для этих целей можно использовать и другие языки программирования, у Go есть свои преимущества, особенно когда речь идет об обработке данных в реальном времени. Вот почему Go выделяется на фоне других языков:
Во-первых, легковесные потоки Go, известные как goroutines, обеспечивают эффективную многозадачность и параллелизм. Это особенно полезно при одновременной выборке нескольких постов или комментариев Reddit, поскольку каждая операция выборки может выполняться в своей собственной goroutine.
Во-вторых, стандартная библиотека 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 и выводить в консоль заголовок, самотекст и permalink каждого сообщения. Вы можете сделать то же самое с комментариями Reddit, просто изменив URL конечной точки API.
Вот несколько идей о том, как можно улучшить эту программу:
Мониторинг конкретных ключевых слов на Reddit возможен благодаря довольно простой программе Go.
Однако создание такой программы может оказаться непростой задачей. Во-первых, потому что Reddit умеет блокировать вас, если вы делаете слишком много запросов, а также потому, что их конечные точки API возвращают множество постов и комментариев одновременно, а это значит, что ваша программа на Go должна ловко справляться с таким большим объемом.
Если вы не хотите самостоятельно создавать и поддерживать такую систему, мы рекомендуем вам воспользоваться нашей платформой: зарегистрируйтесь на сайте KWatch.io здесь.
Arthur
Go Разработчик KWatch.io