Golang ile Reddit'te Anahtar Kelimeler Nasıl İzlenir?

Reddit gönderilerinde ve yorumlarında bahsedilen anahtar kelimeleri izlemek, markanızı, ürünlerinizi, rakiplerinizi izlemek, belirli konular hakkında bilgi sahibi olmak için çok yararlı olabilir... Go, bu tür sosyal dinleme uygulamaları için harika bir dildir. Bu yazıda, Reddit'teki anahtar kelimeleri izleyen basit bir Go programının nasıl yazılacağını göreceğiz.

Golang ile Reddit'i izleyin

Reddit'te Sosyal Medya Dinleme

Reddit'te sosyal dinleme, çeşitli hedefler doğrultusunda hem bireyler hem de kuruluşlar için inanılmaz derecede güçlü bir araçtır. İşte bunun özellikle önemli olmasının birkaç nedeni:

Reddit'te Belirli Anahtar Kelimeler Nasıl İzlenir?

Reddit, platformda yapılan her yeni gönderiyi veya yorumu almanıza olanak tanıyan birkaç ücretsiz API uç noktası sunar. Bu uç noktalar çok iyi belgelenmemiştir.

Son 100 Reddit gönderisini almak için aşağıdaki API uç noktasına bir GET HTTP isteği yapmalısınız: https://www.reddit.com/r/all/new/.json?limit=100

Son 100 Reddit yorumunu almak için aşağıdaki API uç noktasına bir GET HTTP isteği yapmalısınız: https://www.reddit.com/r/all/comments/.json?limit=100

Bu API uç noktalarının yanıtı, gönderilerin veya yorumların bir listesini içeren bir JSON nesnesidir.

İşte gönderiler uç noktasını talep ettiğimde aldığım yanıtın (kesilmiş) bir örneği:

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
                }
            },
        [...]
        ]
    }
}

Gördüğünüz gibi Reddit bir dizi nesne döndürüyor. Her nesne, gönderinin içeriği, gönderinin URL'si, oluşturma tarihi ve saati gibi kapsamlı ayrıntılar içeren bir gönderi veya yorumdur (talep ettiğiniz uç noktaya bağlı olarak). Bunların çoğu kullanışlı olmayacaktır ve "selftext", gönderinin veya yorumun içeriğini içerdiği için şüphesiz en önemli unsurdur.

Sonuçlar azalan sırada sunulur. Aynı anda 100'den fazla gönderi veya yorum talep edemeyeceğinizi lütfen unutmayın.

Reddit'i Gerçek Zamanlı İzlemek için Neden Go Kullanılmalı?

Go programlama dili, Reddit gönderilerini ve yorumlarını gerçek zamanlı olarak almak için mükemmel bir seçim haline getiren çeşitli güçlü özellikler sunar. Diğer programlama dilleri de bu amaçla kullanılabilse de, özellikle gerçek zamanlı veri işleme ile uğraşırken Go kullanmanın belirli avantajları vardır. İşte Go'nun öne çıkma nedenleri:

Her şeyden önce, Go'nun goroutine olarak bilinen hafif iş parçacıkları, verimli çoklu görev ve eşzamanlılığa izin verir. Her bir getirme işlemi kendi goroutininde çalıştırılabildiğinden, bu özellikle birden fazla Reddit gönderisini veya yorumunu aynı anda getirirken kullanışlıdır.

İkinci olarak, Go'nun standart kütüphanesi, web istekleri yapma sürecini basitleştiren kapsamlı ve verimli bir HTTP istemcisi içerir. Bu, gönderileri ve yorumları almak için Reddit'in API'si ile etkileşim kurmak için gereklidir. Go'nun HTTP istemcisi, istek zaman aşımlarına ve iptallerine izin veren bağlamları destekler. Bu, uygulamanızın duyarlı kalmasını ve gecikmeli yanıtlara takılmamasını sağlamak istediğiniz gerçek zamanlı uygulamalar için kritik öneme sahiptir.

Son olarak, Go derlenmiş bir dildir, bu da genellikle Go'da yazılan uygulamaların hızlı olduğu ve az yer kapladığı anlamına gelir. Bu, büyük hacimli verileri hızlı bir şekilde işlemesi gereken gerçek zamanlı uygulamalar için faydalıdır. Go'nun çöp toplayıcısı verimli olacak ve gecikme süresini düşük tutacak şekilde tasarlanmıştır; bu da gerçek zamanlı veri getirme senaryolarında performansı korumak için çok önemlidir.

Reddit Gönderilerindeki Anahtar Kelimeleri İzleyen Basit Bir Go Programı

İşte Go gönderilerinde "kwatch.io" anahtar kelimesini izleyen bir Go programı yapmakla ilgili adım adım bir plan:

İşte Go kodu:

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()
    }
}

Bu program her saniye (eşzamansız olarak) Reddit'ten son 100 yeni gönderiyi getirecek ve her gönderinin başlığını, öz metnini ve kalıcı bağlantısını konsola yazdıracaktır. API uç noktası URL'sini değiştirerek aynı şeyi Reddit yorumlarıyla da yapabilirsiniz.

İşte bu programı nasıl geliştirebileceğinize dair birkaç fikir:

Sonuç

Reddit'teki belirli anahtar kelimeleri izlemek oldukça basit bir Go programı sayesinde mümkündür.

Yine de böyle bir programı üretmek zor olabilir. Öncelikle Reddit çok fazla istekte bulunursanız sizi engelleme konusunda iyidir, aynı zamanda API uç noktaları aynı anda çok sayıda gönderi ve yorum döndürdüğü için Go programınızın bu yüksek hacmi akıllıca ele alması gerektiği anlamına gelir.

Böyle bir sistemi kendi başınıza kurmak ve sürdürmek istemiyorsanız, bunun yerine platformumuzu kullanmanızı öneririz: KWatch.io'ya buradan kaydolun.

Arthur
Go Geliştirici KWatch.io