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