• 25-01-2025, 20:41:39
    #1
    Merhaba, amacım ss alındığında alınan ss'i chatgptye iletip gelen yanıtı da pdf dosyası haline getirip indirilenler kısmında oluşturması. Ancak kodumda tahminimce doğru endpointi kullanmadığım dolayısıyla hata alıyorum. Dokümantasyondan yararlanarak farklı şekillerde denedim ancak yapamadım. Kodu aşağıya bırakıyorum, yardımcı olabilir misiniz?

    Teşekkürler şimdiden.


    import sys
    import os
    import time
    import traceback
    import keyboard
    import pyautogui
    import requests
    from fpdf import FPDF
    from datetime import datetime
    from pathlib import Path
    
    # OpenAI API URL ve Anahtar
    CHAT_GPT_API_URL = "https://api.openai.com/v1/chat/completions"
    OPENAI_FILE_API_URL = "https://api.openai.com/v1/files"
    CHAT_GPT_API_KEY = "API_TOKEN"  # API Anahtarı
    
    def capture_screenshot():
        """
        Ekran görüntüsü alıp geçici bir dosyaya kaydeder.
        """
        try:
            screenshot = pyautogui.screenshot()
            screenshot_path = os.path.join(os.getcwd(), "screenshot.png")
            screenshot.save(screenshot_path)
            return screenshot_path
        except Exception as e:
            print("Hata (capture_screenshot):", e)
            traceback.print_exc()
            return None
    
    def upload_file_to_openai(image_path):
        """
        Görüntüyü OpenAI'nin Dosya API'sine yükler ve file_id döndürür.
        """
        try:
            headers = {
                "Authorization": f"Bearer {CHAT_GPT_API_KEY}"
            }
            with open(image_path, "rb") as image_file:
                files = {
                    "file": image_file,
                    "purpose": (None, "user_data")  # Amaç belirtiyoruz
                }
                response = requests.post(OPENAI_FILE_API_URL, files=files, headers=headers)
            if response.status_code == 200:
                data = response.json()
                return data.get("id")
            else:
                print("OpenAI Dosya API isteği başarısız:", response.status_code, response.text)
                return None
        except Exception as e:
            print("Hata (upload_file_to_openai):", e)
            traceback.print_exc()
            return None
    
    def send_to_chatgpt_with_file(file_id):
        """
        OpenAI'ye yüklenen dosyayı referans alarak analiz eden istek gönderir.
        """
        request_body = {
            "model": "gpt-4",
            "messages": [
                {
                    "role": "user",
                    "content": "Aşağıdaki dosyayı analiz edin."
                }
            ],
            "files": [
                {
                    "id": file_id,
                    "purpose": "user_data"
                }
            ]
        }
    
        headers = {
            "Content-Type": "application/json",
            "Authorization": f"Bearer {CHAT_GPT_API_KEY}"
        }
    
        try:
            response = requests.post(CHAT_GPT_API_URL, json=request_body, headers=headers)
            if response.status_code == 200:
                data = response.json()
                return data["choices"][0]["message"]["content"]
            else:
                print(f"ChatGPT isteği başarısız oldu. Status code: {response.status_code}")
                print("Response body:", response.text)
                return ""
        except Exception as e:
            print("Hata (send_to_chatgpt_with_file):", e)
            traceback.print_exc()
            return ""
    
    def save_to_pdf(response_text):
        """
        Gelen metni PDF olarak oluşturup Downloads klasörüne kaydeder.
        """
        if not response_text.strip():
            print("Kaydedilecek metin boş veya geçersiz.")
            return
    
        try:
            downloads_path = str(Path.home() / "Downloads")
            timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
            pdf_filename = os.path.join(downloads_path, f"DersNotu_{timestamp}.pdf")
    
            # Unicode destekli PDF oluşturma
            pdf = FPDF()
            pdf.add_page()
            font_path = os.path.join(os.getcwd(), "DejaVuSans.ttf")  # Unicode destekli font dosyası
            pdf.add_font("DejaVu", '', font_path, uni=True)
            pdf.set_font("DejaVu", size=12)
    
            pdf.cell(0, 10, "Ders Notu", ln=True)
            pdf.multi_cell(0, 10, response_text)
            pdf.output(pdf_filename)
    
            print(f"PDF kaydedildi: {pdf_filename}")
        except Exception as e:
            print("Hata (save_to_pdf):", e)
            traceback.print_exc()
    
    def process_screenshot_silently():
        """
        Sessizce ekran görüntüsü alır, OpenAI'ye yükler, ChatGPT'ye gönderir,
        gelen yanıtı PDF olarak kaydeder.
        """
        try:
            print("Ekran görüntüsü alınıyor...")
            screenshot_path = capture_screenshot()
            if not screenshot_path:
                print("Ekran görüntüsü alınamadı.")
                return
    
            print("OpenAI'ye yükleniyor...")
            file_id = upload_file_to_openai(screenshot_path)
            if not file_id:
                print("Görsel yüklenemedi.")
                return
    
            print("ChatGPT'ye gönderiliyor...")
            response = send_to_chatgpt_with_file(file_id)
            if not response:
                print("ChatGPT'den yanıt alınamadı ya da boş.")
                return
    
            print("Yanıt PDF olarak kaydediliyor...")
            save_to_pdf(response)
        except Exception as e:
            print("Hata (process_screenshot_silently):", e)
            traceback.print_exc()
    
    def on_print_screen():
        """
        Print Screen tuşuna basıldığında çalışacak fonksiyon.
        """
        print("Print Screen yakalandı. İşleme başlanıyor...")
        process_screenshot_silently()
    
    def main():
        # PrintScreen tuşu yakalandığında on_print_screen fonksiyonunu çağır
        keyboard.add_hotkey("print_screen", on_print_screen)
    
        print("Program çalışıyor. Print Screen tuşuna basarak test edebilirsiniz...")
        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            print("Program sonlandırıldı.")
            sys.exit(0)
    
    if __name__ == "__main__":
        main()
  • 25-01-2025, 20:51:29
    #2
    Bunun çalışması için OpenAI dan api token (koddaki CHAT_GPT_API_KEY) alman gerekiyor. Bu da sana kullanım başına dolar bazlı bir ücret keser. Diğer türlü bu kodun çalışması malesef ki imkansız.
  • 25-01-2025, 21:00:14
    #3
    gemini api key olmaz mı belli bir kısma kadar ucretsiz
  • 25-01-2025, 21:20:14
    #4
    fzerman adlı üyeden alıntı: mesajı görüntüle
    Bunun çalışması için OpenAI dan api token (koddaki CHAT_GPT_API_KEY) alman gerekiyor. Bu da sana kullanım başına dolar bazlı bir ücret keser. Diğer türlü bu kodun çalışması malesef ki imkansız.
    Hocam zaten api anahtarım var, kodu burada paylaşacağım için sansürledim. API'de bakiyem de var, endpoint konusunda sorun yaşıyorum.


    UgurSeyma adlı üyeden alıntı: mesajı görüntüle
    gemini api key olmaz mı belli bir kısma kadar ucretsiz
    Gemini yanıtları çok basit kalıyor hocam, soru çözümleri için kullanacağım bu sebepten lazım.
  • 26-01-2025, 00:04:39
    #5
    AndMex adlı üyeden alıntı: mesajı görüntüle
    Hocam zaten api anahtarım var, kodu burada paylaşacağım için sansürledim. API'de bakiyem de var, endpoint konusunda sorun yaşıyorum.
    OpenAI in kendi clientını kullanın o zaman o tarz bir duruma girmeden işi halledebilirsiniz büyük ihtimalle. durum endpoint haricinde gönderilen dosyanın datası ile de olabilir.
  • 26-01-2025, 14:34:22
    #6
    fzerman adlı üyeden alıntı: mesajı görüntüle
    OpenAI in kendi clientını kullanın o zaman o tarz bir duruma girmeden işi halledebilirsiniz büyük ihtimalle. durum endpoint haricinde gönderilen dosyanın datası ile de olabilir.
    Arkaplanda çalıştırmam gerekiyor hocam. Gönderilen dosyayı base64 şeklinde göndermeyi denediğimde token sayısını aşıyor 400K gibi bir şey oluyor. Direkt file olarak göndermem gerekiyor, onda da compiments endpointinde file inputunu beceremedim.
  • 26-01-2025, 15:30:22
    #7
    pyautogui==0.9.54
    keyboard==0.13.5
    requests==2.31.0
    fpdf==1.7.2
    openai==0.28.1
    pip install -r requirements.txt

    import sys
    import os
    import time
    import traceback
    import keyboard
    import pyautogui
    import base64
    import openai
    from fpdf import FPDF
    from datetime import datetime
    from pathlib import Path
     
    # OpenAI API anahtarını ayarla
    openai.api_key = "sk-proj-xxxxxxxxxxxx"
     
    def capture_screenshot():
        """
        Ekran görüntüsü alıp geçici bir dosyaya kaydeder.
        """
        try:
            screenshot = pyautogui.screenshot()
            screenshot_path = os.path.join(os.getcwd(), "screenshot.png")
            screenshot.save(screenshot_path)
            return screenshot_path
        except Exception as e:
            print("Hata (capture_screenshot):", e)
            traceback.print_exc()
            return None
     
    def encode_image_to_base64(image_path):
        """
        Görüntüyü base64 formatına çevirir.
        """
        try:
            with open(image_path, "rb") as image_file:
                return base64.b64encode(image_file.read()).decode('utf-8')
        except Exception as e:
            print("Hata (encode_image_to_base64):", e)
            traceback.print_exc()
            return None
     
    def analyze_image_with_gpt4(image_path):
        """
        Görüntüyü GPT-4 Vision API kullanarak analiz eder.
        """
        base64_image = encode_image_to_base64(image_path)
        if not base64_image:
            return ""
        try:
            response = openai.ChatCompletion.create(
                model="gpt-4o-mini",
                messages=[
                    {
                        "role": "user",
                        "content": [
                            {
                                "type": "text",
                                "text": "Bu görüntüyü detaylı bir şekilde analiz et ve açıkla."
                            },
                            {
                                "type": "image_url",
                                "image_url": {
                                    "url": f"data:image/jpeg;base64,{base64_image}"
                                }
                            }
                        ]
                    }
                ],
                max_tokens=1000
            )
            return response.choices[0].message.content
        except Exception as e:
            print("Hata (analyze_image_with_gpt4):", e)
            traceback.print_exc()
            return ""
     
    def save_to_pdf(response_text):
        """
        Gelen metni PDF olarak oluşturup Downloads klasörüne kaydeder.
        """
        if not response_text.strip():
            print("Kaydedilecek metin boş veya geçersiz.")
            return
     
        try:
            downloads_path = str(Path.home() / "Downloads")
            timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
            pdf_filename = os.path.join(downloads_path, f"DersNotu_{timestamp}.pdf")
     
            pdf = FPDF()
            pdf.add_page()
            pdf.set_font("Arial", size=12)
            
            # PDF başlığı
            pdf.set_font("Arial", "B", 16)
            pdf.cell(0, 10, "Ders Notu", ln=True, align="C")
            pdf.ln(10)
            
            # Normal metin
            pdf.set_font("Arial", size=12)
            
            # Unicode karakterleri ASCII'ye dönüştür
            text = response_text.encode('ascii', 'replace').decode()
            
            # Metni satır satır yazdır
            for line in text.split('\n'):
                pdf.multi_cell(0, 10, line)
            
            pdf.output(pdf_filename)
            print(f"PDF kaydedildi: {pdf_filename}")
        except Exception as e:
            print("Hata (save_to_pdf):", e)
            traceback.print_exc()
     
    def process_screenshot_silently():
        """
        Sessizce ekran görüntüsü alır, GPT-4 Vision API ile analiz eder,
        gelen yanıtı PDF olarak kaydeder.
        """
        try:
            print("Ekran görüntüsü alınıyor...")
            screenshot_path = capture_screenshot()
            if not screenshot_path:
                print("Ekran görüntüsü alınamadı.")
                return
            print("GPT-4 Vision API ile analiz ediliyor...")
            response = analyze_image_with_gpt4(screenshot_path)
            if not response:
                print("Görsel analiz edilemedi veya yanıt alınamadı.")
                return
            print("Yanıt PDF olarak kaydediliyor...")
            save_to_pdf(response)
            # İşlem tamamlandıktan sonra geçici screenshot dosyasını sil
            try:
                os.remove(screenshot_path)
            except:
                pass
                
        except Exception as e:
            print("Hata (process_screenshot_silently):", e)
            traceback.print_exc()
     
    def on_print_screen():
        """
        Print Screen tuşuna basıldığında çalışacak fonksiyon.
        """
        print("Print Screen yakalandı. İşleme başlanıyor...")
        process_screenshot_silently()
     
    def main():
        # PrintScreen tuşu yakalandığında on_print_screen fonksiyonunu çağır
        keyboard.add_hotkey("print_screen", on_print_screen)
     
        print("Program çalışıyor. Print Screen tuşuna basarak test edebilirsiniz...")
        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            print("Program sonlandırıldı.")
            sys.exit(0)
     
    if __name__ == "__main__":
        main()
    Bu şekilde çalışması lazım.
  • 28-01-2025, 16:58:59
    #8
    F.Gungor adlı üyeden alıntı: mesajı görüntüle
    pyautogui==0.9.54
    keyboard==0.13.5
    requests==2.31.0
    fpdf==1.7.2
    openai==0.28.1
    pip install -r requirements.txt

    import sys
    import os
    import time
    import traceback
    import keyboard
    import pyautogui
    import base64
    import openai
    from fpdf import FPDF
    from datetime import datetime
    from pathlib import Path
     
    # OpenAI API anahtarını ayarla
    openai.api_key = "sk-proj-xxxxxxxxxxxx"
     
    def capture_screenshot():
        """
        Ekran görüntüsü alıp geçici bir dosyaya kaydeder.
        """
        try:
            screenshot = pyautogui.screenshot()
            screenshot_path = os.path.join(os.getcwd(), "screenshot.png")
            screenshot.save(screenshot_path)
            return screenshot_path
        except Exception as e:
            print("Hata (capture_screenshot):", e)
            traceback.print_exc()
            return None
     
    def encode_image_to_base64(image_path):
        """
        Görüntüyü base64 formatına çevirir.
        """
        try:
            with open(image_path, "rb") as image_file:
                return base64.b64encode(image_file.read()).decode('utf-8')
        except Exception as e:
            print("Hata (encode_image_to_base64):", e)
            traceback.print_exc()
            return None
     
    def analyze_image_with_gpt4(image_path):
        """
        Görüntüyü GPT-4 Vision API kullanarak analiz eder.
        """
        base64_image = encode_image_to_base64(image_path)
        if not base64_image:
            return ""
        try:
            response = openai.ChatCompletion.create(
                model="gpt-4o-mini",
                messages=[
                    {
                        "role": "user",
                        "content": [
                            {
                                "type": "text",
                                "text": "Bu görüntüyü detaylı bir şekilde analiz et ve açıkla."
                            },
                            {
                                "type": "image_url",
                                "image_url": {
                                    "url": f"data:image/jpeg;base64,{base64_image}"
                                }
                            }
                        ]
                    }
                ],
                max_tokens=1000
            )
            return response.choices[0].message.content
        except Exception as e:
            print("Hata (analyze_image_with_gpt4):", e)
            traceback.print_exc()
            return ""
     
    def save_to_pdf(response_text):
        """
        Gelen metni PDF olarak oluşturup Downloads klasörüne kaydeder.
        """
        if not response_text.strip():
            print("Kaydedilecek metin boş veya geçersiz.")
            return
     
        try:
            downloads_path = str(Path.home() / "Downloads")
            timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
            pdf_filename = os.path.join(downloads_path, f"DersNotu_{timestamp}.pdf")
     
            pdf = FPDF()
            pdf.add_page()
            pdf.set_font("Arial", size=12)
            
            # PDF başlığı
            pdf.set_font("Arial", "B", 16)
            pdf.cell(0, 10, "Ders Notu", ln=True, align="C")
            pdf.ln(10)
            
            # Normal metin
            pdf.set_font("Arial", size=12)
            
            # Unicode karakterleri ASCII'ye dönüştür
            text = response_text.encode('ascii', 'replace').decode()
            
            # Metni satır satır yazdır
            for line in text.split('\n'):
                pdf.multi_cell(0, 10, line)
            
            pdf.output(pdf_filename)
            print(f"PDF kaydedildi: {pdf_filename}")
        except Exception as e:
            print("Hata (save_to_pdf):", e)
            traceback.print_exc()
     
    def process_screenshot_silently():
        """
        Sessizce ekran görüntüsü alır, GPT-4 Vision API ile analiz eder,
        gelen yanıtı PDF olarak kaydeder.
        """
        try:
            print("Ekran görüntüsü alınıyor...")
            screenshot_path = capture_screenshot()
            if not screenshot_path:
                print("Ekran görüntüsü alınamadı.")
                return
            print("GPT-4 Vision API ile analiz ediliyor...")
            response = analyze_image_with_gpt4(screenshot_path)
            if not response:
                print("Görsel analiz edilemedi veya yanıt alınamadı.")
                return
            print("Yanıt PDF olarak kaydediliyor...")
            save_to_pdf(response)
            # İşlem tamamlandıktan sonra geçici screenshot dosyasını sil
            try:
                os.remove(screenshot_path)
            except:
                pass
                
        except Exception as e:
            print("Hata (process_screenshot_silently):", e)
            traceback.print_exc()
     
    def on_print_screen():
        """
        Print Screen tuşuna basıldığında çalışacak fonksiyon.
        """
        print("Print Screen yakalandı. İşleme başlanıyor...")
        process_screenshot_silently()
     
    def main():
        # PrintScreen tuşu yakalandığında on_print_screen fonksiyonunu çağır
        keyboard.add_hotkey("print_screen", on_print_screen)
     
        print("Program çalışıyor. Print Screen tuşuna basarak test edebilirsiniz...")
        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            print("Program sonlandırıldı.")
            sys.exit(0)
     
    if __name__ == "__main__":
        main()
    Bu şekilde çalışması lazım.
    Çok teşekkür ederim hocam, evet çalıştı R10+