ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ Go SDK Π΄Π»Ρ AnyAds.online, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π±ΠΎΡΠΎΠ². SDK ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ Ρ ΡΡΠ΅ΡΠΎΠΌ ΠΈΠ΄ΠΈΠΎΠΌ Go, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π³ΠΎΡΡΡΠΈΠ½Ρ Π΄Π»Ρ ΡΠΎΠ½ΠΎΠ²ΡΡ Π·Π°Π΄Π°Ρ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ.
ΠΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ° Go ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Git Π½Π°ΠΏΡΡΠΌΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ. ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ go get, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ SDK Π² Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ.
go get github.com/maomedia/AnyAds-SDK-GoLang@latest
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΠ°Ρ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π½Π° Π΄ΠΎΠΌΠ΅Π½Π΅
anyads.online. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Π°Ρ Git-ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈ firewall Π½Π°ΡΡΡΠΎΠ΅Π½Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌ. ΠΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΡΠΌΠΎΠΉ URL Π½Π°ΡΠ΅Π³ΠΎ GitLab/GitHub ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ.
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ SDK Π² Π²Π°ΡΠ΅ Go-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΡΡΡΡ ΡΠ°Π³ΠΎΠ².
ΠΠΎΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ SDK, Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΎΠΏΡΠΎΡ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ ΡΠ΅ΠΊΠ»Π°ΠΌΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ.
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
"time"
// 1. ΠΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ AnyAds SDK
"anyads.online/sdk-go"
)
// 2. ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄Π»Ρ ΡΠ΅ΠΊΠ»Π°ΠΌΠ½ΡΡ
Π·Π°Π΄Π°Ρ
// SDK Π²ΡΠ·ΠΎΠ²Π΅Ρ Π΅Π΅ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π³ΠΎΡΡΡΠΈΠ½Π΅.
func handleAdTask(task anyads.AdTask) {
fmt.Printf(">>> ΠΠΠΠ£Π§ΠΠΠ ΠΠΠΠΠ― Π ΠΠΠΠΠΠΠΠ― ΠΠΠΠΠ§Π <<<\n")
fmt.Printf(" Task ID (Placement ID): %s\n", task.TaskID)
fmt.Printf(" Campaign ID: %s\n", task.CampaignID)
content := task.Creative.Content
// ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, Π΅ΡΡΡ Π»ΠΈ ΡΡΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ
if content.Text == "" && len(content.Files) == 0 {
fmt.Println(" ΠΡΠΈΠ±ΠΊΠ°: ΠΊΡΠ΅Π°ΡΠΈΠ² ΠΏΡΡΡ. ΠΠ°Π΄Π°ΡΠ° ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π°.")
return
}
if content.Text != "" {
fmt.Printf(" Π’Π΅ΠΊΡΡ ΠΊΡΠ΅Π°ΡΠΈΠ²Π°: %s\n", content.Text)
}
if len(content.Files) > 0 {
fmt.Printf(" URL ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ: %s\n", content.Files[0])
}
if len(content.Buttons) > 0 {
fmt.Println(" ΠΡΠ΅Π°ΡΠΈΠ² ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ.")
}
// !!! ΠΠΠΠΠ: ΠΠ΄Π΅ΡΡ Π±ΡΠ΄Π΅Ρ Π²Π°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° ΡΠ°ΡΡΡΠ»ΠΊΠΈ ΠΏΠΎ Π±Π°Π·Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
// Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π°ΡΠ΅ΠΉ Π»ΡΠ±ΠΈΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ Telegram (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, go-telegram-bot-api).
// ΠΡΠΈΠΌΠ΅Ρ:
// userIDs := GetAllUsersFromDB()
// for _, userID := range userIDs {
// // ... ΠΊΠΎΠ΄ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ...
// time.Sleep(50 * time.Millisecond) // ΠΠ°ΡΠ·Π° Π΄Π»Ρ ΠΎΠ±Ρ
ΠΎΠ΄Π° Π»ΠΈΠΌΠΈΡΠΎΠ²
// }
func main() {
// 3. ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ API ΠΊΠ»ΡΡ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
apiKey := os.Getenv("ANYADS_API_KEY")
if apiKey == "" {
fmt.Println("ΠΡΠΈΠ±ΠΊΠ°: ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ANYADS_API_KEY Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°.")
return
}
// 4. ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ SDK
// Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΎΠΏΡΠΎΡΠ° Π² 1 ΠΌΠΈΠ½ΡΡΡ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°
err := anyads.Init(apiKey, 1*time.Minute)
if err != nil {
fmt.Printf("ΠΡΠΈΠ±ΠΊΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ SDK: %v\n", err)
return
}
// 5. Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ
anyads.OnBroadcastReceived(handleAdTask)
// 6. ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠΎΠ½ΠΎΠ²ΡΠΉ ΠΎΠΏΡΠΎΡ
err = anyads.Start()
if err != nil {
fmt.Printf("ΠΡΠΈΠ±ΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° SDK: %v\n", err)
return
}
// ΠΠΆΠΈΠ΄Π°Π΅ΠΌ ΡΠΈΠ³Π½Π°Π»Π° Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ (Ctrl+C), ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°ΠΊΡΡΠ»ΠΎΡΡ ΡΡΠ°Π·Ρ
fmt.Println("ΠΠ»ΠΈΠ΅Π½Ρ AnyAds SDK Π·Π°ΠΏΡΡΠ΅Π½. ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΠ»Π°ΠΌΠ½ΡΡ
Π·Π°Π΄Π°Ρ...")
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
<-c
// 7. ΠΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ SDK ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ
anyads.Stop()
fmt.Println("ΠΠ»ΠΈΠ΅Π½Ρ AnyAds SDK ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½.")
}
import "anyads.online/sdk-go": ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅Ρ Π½Π°Ρ SDK Π² Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ.handleAdTask(task anyads.AdTask): ΠΡΠΎ Π²Π°ΡΠ° Π³Π»Π°Π²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, Π³Π΄Π΅ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°. SDK Π²ΡΠ·ΠΎΠ²Π΅Ρ Π΅Π΅ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π³ΠΎΡΡΡΠΈΠ½Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡ Π½ΠΎΠ²ΡΡ Π·Π°Π΄Π°ΡΡ Π½Π° ΡΠ°ΡΡΡΠ»ΠΊΡ. anyads.AdTask β ΡΡΠΎ ΡΡΡΡΠΊΡΡΡΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΠΊΡΠ΅Π°ΡΠΈΠ²Π΅.anyads.Init(apiKey, interval): ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ SDK. ΠΠ΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. interval β ΡΡΠΎ time.Duration, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ 5 * time.Minute.anyads.OnBroadcastReceived(handler): Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ.anyads.Start(): ΠΠ°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΎΠ½ΠΎΠ²ΡΡ Π³ΠΎΡΡΡΠΈΠ½Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ ΡΠ΅ΡΠ²Π΅Ρ AnyAds.signal.Notify(...): Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π² Go Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ ΡΠΈΠ³Π½Π°Π»Π° Ctrl+C, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π²Π΅ΡΡΠΈΠ»ΠΎΡΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΎΠ½ΠΎΠ²ΡΡ
Π·Π°Π΄Π°Ρ.anyads.Stop(): ΠΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΠ½ΠΎΠ²ΡΡ Π³ΠΎΡΡΡΠΈΠ½Ρ ΠΎΠΏΡΠΎΡΠ°.// Π Π΅ΠΊΠ»Π°ΠΌΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ°, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½Π°Ρ ΠΎΡ Ad Engine
type AdTask struct {
TaskID string `json:"task_id"`
CampaignID string `json:"campaign_id"`
Creative Creative `json:"creative"`
}
// Π Π΅ΠΊΠ»Π°ΠΌΠ½ΡΠΉ ΠΊΡΠ΅Π°ΡΠΈΠ²
type Creative struct {
CreativeID string `json:"creative_id"`
Type string `json:"type"`
Content CreativeContent `json:"content"`
}
// Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΊΡΠ΅Π°ΡΠΈΠ²Π°
type CreativeContent struct {
Text string `json:"text,omitempty"`
Files []string `json:"files,omitempty"`
Buttons [][]Button `json:"buttons,omitempty"`
ParseMode string `json:"parse_mode,omitempty"`
}
// ΠΠ½ΠΎΠΏΠΊΠ°
type Button struct {
Text string `json:"text"`
URL string `json:"url"`
}
// Π’ΠΈΠΏ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
type BroadcastHandler func(task AdTask)
Init(apiKey string, interval time.Duration) errorStart() errorStop()OnBroadcastReceived(handler BroadcastHandler)ProcessVerificationCode(code string) error (Π΄Π»Ρ ΡΡΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ)