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