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