Mastodon’a Giriş ve Bot Geliştirme Rehberi

Sosyal medya dünyasında merkezi olmayan, özgür ve açık kaynaklı bir platform arıyorsanız, Mastodon tam size göre. Bu yazıda Mastodon’u tanıyacak ve Python kullanarak nasıl bot geliştirebileceğimizi öğreneceğiz.

## Mastodon Nedir?

Mastodon, merkezi olmayan bir mikroblog platformudur. Twitter’a benzer ancak önemli farklarla ayrılır. En önemli farkı, tek bir merkezi sunucu yerine birçok bağımsız sunucudan (instance) oluşmasıdır. Her instance kendi kurallarını belirleyebilir, ancak diğer instance’larla iletişim kurabilir.

### Mastodon’un Temel Özellikleri:

– **Tootlar**: Tweet yerine “toot” olarak adlandırılan paylaşımlar
– **Boost**: Retweet benzeri paylaşım özelliği
– **Instance’lar**: Bağımsız sunucular
– **Federe Yapı**: Instance’ların birbiriyle iletişim kurabilmesi
– **500 karakter limit**: Twitter’dan daha uzun paylaşımlar
– **Reklamsız Deneyim**: Ticari kaygılardan uzak platform

## Neden Bot Geliştirmeliyiz?

Mastodon botları, platformun etkileşimini artırmak ve otomatik işlemler gerçekleştirmek için önemli araçlardır. Botlar sayesinde:

1. Otomatik içerik paylaşımı yapabilirsiniz
2. Belirli hashtag’leri takip edebilirsiniz
3. Topluluğunuzla otomatik etkileşim kurabilirsiniz
4. İstatistikler toplayabilirsiniz

## Bot Geliştirme Süreci

### 1. Hazırlık Aşaması

Bot geliştirmeye başlamadan önce şunlara ihtiyacınız olacak:

– Python programlama dili
– Mastodon.py kütüphanesi
– Mastodon API erişim bilgileri
– Geliştirme ortamı

### 2. API Erişimi Alma

1. Mastodon hesabınızın ayarlarına gidin
2. Geliştirme (Development) bölümünü bulun
3. Yeni uygulama oluşturun
4. Şu bilgileri not alın:
— Client ID
— Client Secret
— Access Token

### 3. Bot Türleri

#### Basit Konsol Botu
Komut satırından çalışan, temel işlevleri yerine getiren botlar.

#### GUI (Grafiksel Arayüz) Botu
Kullanıcı dostu arayüze sahip, kontrol edilmesi kolay botlar.

#### Otomasyon Botu
7/24 çalışabilen, belirli görevleri otomatik yapan botlar.

## İyi Bot Geliştirme Pratikleri

### 1. Etik Kurallar
– Instance kurallarına uyun
– Spam yapmaktan kaçının
– Kullanıcı gizliliğine saygı gösterin

### 2. Teknik En İyi Uygulamalar
– Hata yönetimi implement edin
– Rate limiting kurallarına uyun
– Log tutun
– Düzenli bakım yapın

### 3. Güvenlik Önlemleri
– API anahtarlarını güvende tutun
– HTTPS kullanın
– Kullanıcı verilerini koruyun

## Örnek Kullanım Senaryoları

### 1. Topluluk Yönetimi
– Hashtag takibi
– Otomatik boost ve favori
– İçerik moderasyonu

### 2. İçerik Paylaşımı
– Zamanlanmış paylaşımlar
– RSS feed entegrasyonu
– Otomatik içerik üretimi

### 3. Veri Analizi
– Etkileşim istatistikleri
– Hashtag analizi
– Kullanıcı aktivite takibi

Örnek Bir Python Projesi,

Bu GUI uygulaması ile yapabilecekleriniz:

API Bilgileri Bölümü:

Client ID, Client Secret ve Access Token bilgilerinizi girebilirsiniz
Instance URL’nizi belirleyebilirsiniz (varsayılan: mastodon.social)
“Bağlan” butonu ile Mastodon hesabınıza bağlanabilirsiniz

Bot İşlemleri Bölümü:

Toot Paylaşma: Metin yazıp direkt paylaşabilirsiniz
Hashtag Takibi: İstediğiniz bir hashtag’i takip edebilirsiniz
İşlem Seçimi: Bulunan tootları ya boost edebilir ya da favorilere ekleyebilirsiniz

Log Alanı:

Tüm işlemlerin kaydını buradan takip edebilirsiniz
Hatalar ve başarılı işlemler burada görüntülenir

Kullanmak için:

Önce gerekli kütüphaneleri yükleyin:

bashCopypip install Mastodon.py tkinter

API bilgilerinizi Mastodon’dan alın:

Mastodon hesabınızın ayarlarına gidin
“Geliştirme” bölümüne gidin
Yeni uygulama oluşturun
Client ID, Client Secret ve Access Token bilgilerini alın

Programı çalıştırın ve API bilgilerinizi girin
“Bağlan” butonuna tıklayın
Artık toot paylaşabilir veya hashtag takibi yapabilirsiniz

Bot örneğin şunlar için kullanılabilir:

Belirli bir konudaki paylaşımları otomatik boost etme
Topluluğunuzla ilgili paylaşımları otomatik favorileme
Düzenli içerik paylaşımı yapmaimport tkinter as tk
from tkinter import ttk, scrolledtext, messagebox
from mastodon import Mastodon
import threading
import time

class MastodonGUIBot:
    def __init__(self, root):
        self.root = root
        self.root.title(“Mastodon Bot Kontrol Paneli”)
        self.root.geometry(“800×600”)
        
        # Bot durumu
        self.is_monitoring = False
        self.monitor_thread = None
        
        # API Bilgileri Frame
        self.create_api_frame()
        
        # İşlemler Frame
        self.create_actions_frame()
        
        # Log Alanı
        self.create_log_area()
        
    def create_api_frame(self):
        api_frame = ttk.LabelFrame(self.root, text=”API Bilgileri”, padding=”10″)
        api_frame.pack(fill=”x”, padx=10, pady=5)
        
        # API Bilgileri girişi
        ttk.Label(api_frame, text=”Client ID:”).grid(row=0, column=0, sticky=”w”)
        self.client_id_entry = ttk.Entry(api_frame, width=50)
        self.client_id_entry.grid(row=0, column=1, padx=5, pady=2)
        
        ttk.Label(api_frame, text=”Client Secret:”).grid(row=1, column=0, sticky=”w”)
        self.client_secret_entry = ttk.Entry(api_frame, width=50)
        self.client_secret_entry.grid(row=1, column=1, padx=5, pady=2)
        
        ttk.Label(api_frame, text=”Access Token:”).grid(row=2, column=0, sticky=”w”)
        self.access_token_entry = ttk.Entry(api_frame, width=50)
        self.access_token_entry.grid(row=2, column=1, padx=5, pady=2)
        
        ttk.Label(api_frame, text=”Instance URL:”).grid(row=3, column=0, sticky=”w”)
        self.instance_url_entry = ttk.Entry(api_frame, width=50)
        self.instance_url_entry.insert(0, “https://mastodon.social”)
        self.instance_url_entry.grid(row=3, column=1, padx=5, pady=2)
        
        ttk.Button(api_frame, text=”Bağlan”, command=self.connect_mastodon).grid(row=4, column=1, pady=10)
        
    def create_actions_frame(self):
        actions_frame = ttk.LabelFrame(self.root, text=”Bot İşlemleri”, padding=”10″)
        actions_frame.pack(fill=”x”, padx=10, pady=5)
        
        # Toot Paylaşma
        ttk.Label(actions_frame, text=”Toot Metni:”).grid(row=0, column=0, sticky=”w”)
        self.toot_entry = ttk.Entry(actions_frame, width=50)
        self.toot_entry.grid(row=0, column=1, padx=5, pady=2)
        ttk.Button(actions_frame, text=”Paylaş”, command=self.post_toot).grid(row=0, column=2, padx=5)
        
        # Hashtag Takibi
        ttk.Label(actions_frame, text=”Takip Edilecek Hashtag:”).grid(row=1, column=0, sticky=”w”)
        self.hashtag_entry = ttk.Entry(actions_frame, width=50)
        self.hashtag_entry.grid(row=1, column=1, padx=5, pady=2)
        
        self.monitor_button = ttk.Button(actions_frame, text=”Takibi Başlat”, command=self.toggle_monitoring)
        self.monitor_button.grid(row=1, column=2, padx=5)
        
        # İşlem Seçimi
        ttk.Label(actions_frame, text=”İşlem:”).grid(row=2, column=0, sticky=”w”)
        self.action_var = tk.StringVar(value=”boost”)
        ttk.Radiobutton(actions_frame, text=”Boost”, variable=self.action_var, value=”boost”).grid(row=2, column=1, sticky=”w”)
        ttk.Radiobutton(actions_frame, text=”Favori”, variable=self.action_var, value=”favorite”).grid(row=2, column=1, sticky=”e”)
        
    def create_log_area(self):
        log_frame = ttk.LabelFrame(self.root, text=”Log”, padding=”10″)
        log_frame.pack(fill=”both”, expand=True, padx=10, pady=5)
        
        self.log_area = scrolledtext.ScrolledText(log_frame, wrap=tk.WORD, height=10)
        self.log_area.pack(fill=”both”, expand=True)
        
    def log(self, message):
        self.log_area.insert(tk.END, f”{message}\n”)
        self.log_area.see(tk.END)
        
    def connect_mastodon(self):
        try:
            self.mastodon = Mastodon(
                client_id=self.client_id_entry.get(),
                client_secret=self.client_secret_entry.get(),
                access_token=self.access_token_entry.get(),
                api_base_url=self.instance_url_entry.get()
            )
            self.log(“Mastodon’a başarıyla bağlanıldı!”)
            messagebox.showinfo(“Başarılı”, “Mastodon’a bağlantı kuruldu!”)
        except Exception as e:
            self.log(f”Bağlantı hatası: {str(e)}”)
            messagebox.showerror(“Hata”, “Bağlantı kurulamadı!”)
            
    def post_toot(self):
        if hasattr(self, ‘mastodon’):
            try:
                self.mastodon.status_post(self.toot_entry.get())
                self.log(f”Toot paylaşıldı: {self.toot_entry.get()}”)
                self.toot_entry.delete(0, tk.END)
            except Exception as e:
                self.log(f”Toot paylaşma hatası: {str(e)}”)
        else:
            messagebox.showwarning(“Uyarı”, “Önce Mastodon’a bağlanın!”)
            
    def monitor_hashtag(self):
        while self.is_monitoring:
            try:
                toots = self.mastodon.timeline_hashtag(self.hashtag_entry.get())
                for toot in toots:
                    try:
                        if self.action_var.get() == “boost”:
                            self.mastodon.status_reblog(toot[‘id’])
                            self.log(f”Toot boost edildi: {toot[‘id’]}”)
                        else:
                            self.mastodon.status_favourite(toot[‘id’])
                            self.log(f”Toot favorilere eklendi: {toot[‘id’]}”)
                    except Exception as e:
                        self.log(f”İşlem hatası: {str(e)}”)
                time.sleep(300)  # 5 dakika bekle
            except Exception as e:
                self.log(f”Hashtag takip hatası: {str(e)}”)
                time.sleep(60)
                
    def toggle_monitoring(self):
        if not hasattr(self, ‘mastodon’):
            messagebox.showwarning(“Uyarı”, “Önce Mastodon’a bağlanın!”)
            return
            
        if not self.is_monitoring:
            self.is_monitoring = True
            self.monitor_button.config(text=”Takibi Durdur”)
            self.hashtag_entry.config(state=”disabled”)
            self.monitor_thread = threading.Thread(target=self.monitor_hashtag)
            self.monitor_thread.start()
            self.log(f”#{self.hashtag_entry.get()} hashtag’i takip ediliyor…”)
        else:
            self.is_monitoring = False
            self.monitor_button.config(text=”Takibi Başlat”)
            self.hashtag_entry.config(state=”normal”)
            self.log(“Hashtag takibi durduruldu.”)

if __name__ == “__main__”:
    root = tk.Tk()
    app = MastodonGUIBot(root)
    root.mainloop()

örnek #Antalya tag i ile ilgili yazıları sayfada paylaşmaya başadığını görebiliyoruz

Mastodon, merkezi olmayan yapısı ve özgür ruhuyla sosyal medyanın geleceğini temsil ediyor. Bot geliştirme ise bu platformda topluluk oluşturma ve yönetme konusunda büyük kolaylıklar sağlıyor. Doğru yaklaşım ve etik kurallarla geliştirilen botlar, Mastodon ekosisteminin değerli bir parçası olabilir.

## Kaynaklar

– Mastodon Resmi Dokümantasyon
– Mastodon.py GitHub Sayfası
– Python Bot Geliştirme Kaynakları
– Mastodon API Dokümantasyonu

— –

Bu rehber size Mastodon ve bot geliştirme konusunda temel bir bakış açısı sunmayı amaçlamaktadır. Daha detaylı bilgi için resmi dokümantasyonu incelemenizi ve topluluk forumlarını takip etmenizi öneririz.