Η παρακολούθηση των λέξεων-κλειδιών που αναφέρονται στις αναρτήσεις και τα σχόλια του 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 που περιέχει μια λίστα αναρτήσεων ή σχολίων.
Ακολουθεί ένα (περικομμένο) παράδειγμα μιας απάντησης που λαμβάνω όταν ζητώ το τελικό σημείο 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
Πηγαίνετε στον προγραμματιστή KWatch.io