El Kontrolü ile Mouse Kullanmak – Kamera – Python

Elinizle havada işaretler yaparak bilgisayarınızın faresini kontrol edebileceğiniz harika bir Python projesi!

Neler Yapabileceksiniz?

  • Elinizi gösterdiğinizde: Ekranda yeşil çizgiler
  • İşaret parmağını kaldırdığınızda: Fare imleci hareketi
  • Baş parmak ve işaret parmağı birleşince: Sürükleme
  • Elinizi açtığınızda: Sürüklemeyi bırakma
  • İşaret ve orta parmak yan yana: Tıklama
  • Yumruk + serçe parmak: Sağ tıklama

Gerekli Malzemeler

  • Bilgisayar ve kamera
  • Python
  • OpenCV, MediaPipe ve PyAutoGUI kütüphaneleri

Kurulum

Projeyi çalıştırmak için şu adımları izleyin:

  1. Öncelikle Python’u bilgisayarınıza kurun (eğer yoksa)
  2. Şu kütüphaneleri cmd kullanarak yükleyin:
    pip install opencv-python
    pip install mediapipe
    pip install pyautogui
    pip install numpy
  3. Kodu bir Python dosyasına (örneğin el_kontrolu.py) kaydedip çalıştırın
  4. Çıkmak için ‘q’ tuşuna basın

Haydi Kodlamaya Başlayalım!

import cv2
import numpy as np
import mediapipe as mp
import pyautogui
import math

# Ekran boyutlarını al
screen_width, screen_height = pyautogui.size()
# Pencere kontrolü için gerekli değişkenler
is_dragging = False
prev_hand_position = None

# MediaPipe modellerini yükle
mp_hands = mp.solutions.hands
mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_styles

# El işaretlerini algılama modelini başlat
hands = mp_hands.Hands(
    model_complexity=1,
    min_detection_confidence=0.5,
    min_tracking_confidence=0.5,
    max_num_hands=1
)

# Kamera yakalama
cap = cv2.VideoCapture(0)

def calculate_distance(point1, point2):
    """İki nokta arasındaki mesafeyi hesapla"""
    return math.sqrt((point1.x - point2.x)**2 + (point1.y - point2.y)**2)

def is_thumb_index_touching(hand_landmarks):
    """Baş parmak ve işaret parmağı dokunuyor mu kontrol et"""
    thumb_tip = hand_landmarks.landmark[mp_hands.HandLandmark.THUMB_TIP]
    index_tip = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP]
    distance = calculate_distance(thumb_tip, index_tip)
    return distance < 0.05

def is_fist_with_pinky_up(hand_landmarks):
    """Yumruk yapılmış ve sadece serçe parmak yukarıda mı kontrol et"""
    pinky_tip = hand_landmarks.landmark[mp_hands.HandLandmark.PINKY_TIP]
    pinky_pip = hand_landmarks.landmark[mp_hands.HandLandmark.PINKY_PIP]
    
    ring_tip = hand_landmarks.landmark[mp_hands.HandLandmark.RING_FINGER_TIP]
    ring_pip = hand_landmarks.landmark[mp_hands.HandLandmark.RING_FINGER_PIP]
    
    middle_tip = hand_landmarks.landmark[mp_hands.HandLandmark.MIDDLE_FINGER_TIP]
    middle_pip = hand_landmarks.landmark[mp_hands.HandLandmark.MIDDLE_FINGER_PIP]
    
    index_tip = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP]
    index_pip = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_PIP]
    
    # Serçe parmak yukarıda mı?
    pinky_up = pinky_tip.y < pinky_pip.y
    
    # Diğer parmaklar kapalı mı?
    other_fingers_down = (
        ring_tip.y > ring_pip.y and
        middle_tip.y > middle_pip.y and
        index_tip.y > index_pip.y
    )
    
    return pinky_up and other_fingers_down

def is_index_middle_together(hand_landmarks):
    """İşaret ve orta parmak yan yana mı kontrol et"""
    index_tip = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP]
    middle_tip = hand_landmarks.landmark[mp_hands.HandLandmark.MIDDLE_FINGER_TIP]
    
    index_pip = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_PIP]
    middle_pip = hand_landmarks.landmark[mp_hands.HandLandmark.MIDDLE_FINGER_PIP]
    
    # İki parmak da yukarıda mı?
    fingers_up = index_tip.y < index_pip.y and middle_tip.y < middle_pip.y
    
    # Parmaklar birbirine yakın mı?
    horizontal_distance = abs(index_tip.x - middle_tip.x)
    return fingers_up and horizontal_distance < 0.04

def is_single_finger_up(hand_landmarks):
    """Sadece tek parmak yukarıda mı kontrol et (işaret parmağı)"""
    index_tip = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP]
    index_pip = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_PIP]
    
    middle_tip = hand_landmarks.landmark[mp_hands.HandLandmark.MIDDLE_FINGER_TIP]
    middle_pip = hand_landmarks.landmark[mp_hands.HandLandmark.MIDDLE_FINGER_PIP]
    
    ring_tip = hand_landmarks.landmark[mp_hands.HandLandmark.RING_FINGER_TIP]
    ring_pip = hand_landmarks.landmark[mp_hands.HandLandmark.RING_FINGER_PIP]
    
    pinky_tip = hand_landmarks.landmark[mp_hands.HandLandmark.PINKY_TIP]
    pinky_pip = hand_landmarks.landmark[mp_hands.HandLandmark.PINKY_PIP]
    
    # İşaret parmağı yukarıda mı?
    index_up = index_tip.y < index_pip.y
    
    # Diğer parmaklar aşağıda mı?
    others_down = (
        middle_tip.y > middle_pip.y and
        ring_tip.y > ring_pip.y and
        pinky_tip.y > pinky_pip.y
    )
    
    return index_up and others_down

def is_open_palm(hand_landmarks):
    """El açık mı kontrol et"""
    fingers_tips = [
        hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP],
        hand_landmarks.landmark[mp_hands.HandLandmark.MIDDLE_FINGER_TIP],
        hand_landmarks.landmark[mp_hands.HandLandmark.RING_FINGER_TIP],
        hand_landmarks.landmark[mp_hands.HandLandmark.PINKY_TIP]
    ]
    
    fingers_pips = [
        hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_PIP],
        hand_landmarks.landmark[mp_hands.HandLandmark.MIDDLE_FINGER_PIP],
        hand_landmarks.landmark[mp_hands.HandLandmark.RING_FINGER_PIP],
        hand_landmarks.landmark[mp_hands.HandLandmark.PINKY_PIP]
    ]
    
    all_fingers_up = all(tip.y < pip.y for tip, pip in zip(fingers_tips, fingers_pips))
    return all_fingers_up

try:
    while cap.isOpened():
        success, image = cap.read()
        if not success:
            print("Kamera görüntüsü alınamadı.")
            continue
            
        # Görüntüyü yatay olarak çevir (ayna etkisi)
        image = cv2.flip(image, 1)
        
        # BGR'dan RGB'ye dönüştür
        results = hands.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
        
        # Görüntü boyutlarını al
        image_height, image_width, _ = image.shape
        
        # Eli gösterdiğimde yeşil renklendir
        if results.multi_hand_landmarks:
            for hand_landmarks in results.multi_hand_landmarks:
                # Eli yeşil renkle çiz
                mp_drawing.draw_landmarks(
                    image,
                    hand_landmarks,
                    mp_hands.HAND_CONNECTIONS,
                    mp_drawing_styles.get_default_hand_landmarks_style(),
                    mp_drawing_styles.get_default_hand_connections_style())
                
                # İmleci hareket ettirmek için el pozisyonu
                index_tip = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP]
                hand_x = int(index_tip.x * image_width)
                hand_y = int(index_tip.y * image_height)
                
                # Ekran koordinatlarına dönüştür (daha yumuşak hareket için)
                smooth_x = np.interp(hand_x, (100, image_width-100), (0, screen_width))
                smooth_y = np.interp(hand_y, (100, image_height-100), (0, screen_height))
                
                # El hareketlerini kontrol et
                
                # 1. Sadece işaret parmağı: imleci hareket ettir
                if is_single_finger_up(hand_landmarks):
                    # İmleci hareket ettir
                    pyautogui.moveTo(smooth_x, smooth_y)
                
                # 2. Baş parmak ve işaret parmağı birleşince: sürükleme başlat
                elif is_thumb_index_touching(hand_landmarks):
                    if not is_dragging:
                        pyautogui.mouseDown()
                        is_dragging = True
                    # El pozisyonu değiştikçe pencereyi taşı (imleç zaten hareket ediyor)
                    pyautogui.moveTo(smooth_x, smooth_y)
                
                # 3. Açık el: sürüklemeyi bırak
                elif is_open_palm(hand_landmarks):
                    if is_dragging:
                        pyautogui.mouseUp()
                        is_dragging = False
                
                # 4. İşaret ve orta parmak yan yana: tıkla
                elif is_index_middle_together(hand_landmarks):
                    pyautogui.click()
                    # Çift tıklamayı önlemek için kısa bir bekleme
                    cv2.waitKey(500)
                
                # 5. Yumruk + serçe parmak: sağ tıklama
                elif is_fist_with_pinky_up(hand_landmarks):
                    pyautogui.rightClick()
                    # Çift tıklamayı önlemek için kısa bir bekleme
                    cv2.waitKey(500)
        
        # FPS ve kontrol bilgilerini göster
        cv2.putText(image, "El Kontrolu Aktif", (10, 30), 
                    cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
        
        # Komutları ekranda göster
        commands = [
            "Eli Goster: Yesil Cizimler",
            "Tek Parmak: Imlec Hareketi",
            "Bas ve Isaret Parmagi Birlesik: Surukle",
            "Acik El: Birak",
            "Isaret ve Orta Parmak Yan Yana: Tikla",
            "Yumruk + Serce Parmak: Sag Tikla"
        ]
        
        y_offset = 60
        for cmd in commands:
            cv2.putText(image, cmd, (10, y_offset), 
                        cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1)
            y_offset += 25
            
        # Pencereyi göster
        cv2.imshow('El Haraketleri ile Kontrol', image)
        
        # Çıkış için 'q' tuşuna bas
        if cv2.waitKey(5) & 0xFF == ord('q'):
            break

finally:
    hands.close()
    cap.release()
    cv2.destroyAllWindows()

Detaylı Sistem Bilgisi Görüntüleyici

pip install psutil pyperclip
import platform
import psutil
import wmi
import tkinter as tk
from tkinter import messagebox
import pyperclip
import subprocess

def get_detailed_system_info():
    info = []
    c = wmi.WMI()

    # Temel Bilgiler
    info.append(f"İşletim Sistemi: {platform.system()} {platform.release()}")
    info.append(f"OS Sürümü: {platform.version()}")
    info.append(f"Mimari: {platform.architecture()[0]}")
    info.append(f"İşlemci: {platform.processor()}")

    # CPU Bilgileri
    cpu_freq = psutil.cpu_freq()
    if cpu_freq:
        info.append(f"CPU Frekansı: {cpu_freq.max:.2f} MHz")
    info.append(f"CPU Çekirdekleri (Mantıksal): {psutil.cpu_count(logical=True)}")
    info.append(f"CPU Çekirdekleri (Fiziksel): {psutil.cpu_count(logical=False)}")

    # RAM Bilgileri
    virtual_memory = psutil.virtual_memory()
    info.append(f"RAM: {round(virtual_memory.total / (1024**3), 2)} GB")
    
    # Anakart Bilgileri
    for board in c.Win32_BaseBoard():
        info.append(f"Anakart: {board.Manufacturer} {board.Product}")
    
    # GPU Bilgileri
    for gpu in c.Win32_VideoController():
        memory = get_gpu_info_wmic()
        info.append(f"Ekran Kartı: {gpu.Name} ({memory} MB)")

    # Disk Bilgileri
    for disk in c.Win32_DiskDrive():
        size = int(disk.Size) / (1024**3) if disk.Size else 'Bilinmiyor'
        info.append(f"Disk: {disk.Model} ({size:.2f} GB)")

    # RAM Detayları
    for memory in c.Win32_PhysicalMemory():
        capacity = int(memory.Capacity) / (1024**3) if memory.Capacity else 'Bilinmiyor'
        speed = memory.Speed if memory.Speed else 'Bilinmiyor'
        info.append(f"RAM Slotu: {memory.Manufacturer} {capacity:.2f} GB {speed} MHz")

    return "\n".join(info)


def get_gpu_info_wmic():
    try:
        # wmic komutunu çalıştırarak ekran kartı belleğini al
        result = subprocess.run(
            ['wmic', 'path', 'Win32_VideoController', 'get', 'AdapterRAM'],
            capture_output=True,
            text=True
        )
        # Çıktıyı işleyerek bellek boyutunu MB cinsinden hesapla
        lines = result.stdout.strip().split('\n')
        if len(lines) > 1:
            memory_str = lines[2].strip()
            if memory_str:
                memory_bytes = int(memory_str)
                memory_mb = memory_bytes / (1024**2)
                return f"{memory_mb:.2f}"
            else:
                return "Ekran Kartı Belleği: Bilinmiyor"
        else:
            return "Ekran Kartı: Bilinmiyor"
    except Exception as e:
        return f"Ekran Kartı: Hata ({str(e)})"



def display_info():
    info = get_detailed_system_info()
    text_box.delete("1.0", "end")
    text_box.insert("end", info)

def save_to_file():
    info = get_detailed_system_info()
    with open("detaylı_sistem_raporu.txt", "w", encoding="utf-8") as file:
        file.write(info)
    messagebox.showinfo("Kaydedildi", "Sistem raporu 'detaylı_sistem_raporu.txt' dosyasına kaydedildi.")

def copy_to_clipboard():
    info = get_detailed_system_info()
    pyperclip.copy(info)
    messagebox.showinfo("Kopyalandı", "Sistem raporu panoya kopyalandı.")

# GUI Ayarları
root = tk.Tk()
root.title("Detaylı Sistem Bilgisi Görüntüleyici")

text_box = tk.Text(root, wrap="word", width=80, height=30)
text_box.pack(pady=10, padx=10)

btn_display = tk.Button(root, text="Bilgileri Göster", command=display_info, width=20)
btn_display.pack(pady=5)

btn_save = tk.Button(root, text="Dosyaya Kaydet", command=save_to_file, width=20)
btn_save.pack(pady=5)

btn_copy = tk.Button(root, text="Panoya Kopyala", command=copy_to_clipboard, width=20)
btn_copy.pack(pady=5)

# Uygulama başlatıldığında bilgileri göster
display_info()

root.mainloop()

Bu Python uygulaması, kullanıcılara bilgisayarlarının donanım ve yazılım bileşenleri hakkında kapsamlı bilgiler sunan bir grafiksel kullanıcı arayüzü (GUI) sağlar. Tkinter kütüphanesi kullanılarak geliştirilen bu uygulama, sistem bilgilerini görsel olarak sunar ve kullanıcı etkileşimini kolaylaştırır.

Ana Özellikler:

  • İşletim Sistemi Bilgileri: Uygulama, işletim sistemi türünü, sürümünü, mimarisini ve işlemci bilgilerini görüntüler.
  • CPU Bilgileri: CPU’nun maksimum frekansı, mantıksal ve fiziksel çekirdek sayısı gibi detaylar sunulur.
  • RAM Bilgileri: Toplam RAM miktarı ve her bir RAM slotunun kapasitesi ve hızı hakkında bilgiler sağlar.
  • Anakart Bilgileri: Anakart üreticisi ve modeli gibi temel bilgiler sunar.
  • GPU Bilgileri: Ekran kartı adı ve belleği hakkında bilgiler içerir.
  • Disk Bilgileri: Disk modelleri ve kapasiteleri hakkında bilgiler sunar.

Kullanıcı Etkileşimi:

Uygulama, kullanıcıların sistem bilgilerini görüntülemelerini, bu bilgileri bir dosyaya kaydetmelerini veya panoya kopyalamalarını sağlayan üç ana buton içerir:

  • Bilgileri Göster: Sistem bilgilerini GUI üzerinde görüntüler.
  • Dosyaya Kaydet: Görüntülenen bilgileri bir metin dosyasına kaydeder.
  • Panoya Kopyala: Görüntülenen bilgileri panoya kopyalar.

Gerekli Kütüphaneler:

Uygulamanın çalışabilmesi için aşağıdaki Python kütüphanelerinin yüklü olması gerekmektedir:

  • platform
  • psutil
  • wmi
  • tkinter
  • pyperclip
  • subprocess

Bu kütüphaneler, sistem bilgilerini toplamak ve GUI bileşenlerini oluşturmak için kullanılır.

Kurulum ve Çalıştırma:

Gerekli kütüphaneleri yüklemek için aşağıdaki pip komutlarını kullanabilirsiniz:

pip install psutil wmi pyperclip

tkinter kütüphanesi, Python’un standart kütüphanelerinden biridir ve genellikle varsayılan olarak gelir.

Uygulamayı çalıştırmak için, yukarıdaki Python kodunu bir dosyaya kaydedip çalıştırmanız yeterlidir.

Sonuç:

Bu uygulama, kullanıcıların bilgisayarlarının donanım ve yazılım bileşenleri hakkında hızlı ve kolay bir şekilde bilgi edinmelerini sağlar. Grafiksel arayüzü sayesinde, teknik bilgiye sahip olmayan kullanıcılar bile sistem bilgilerini rahatlıkla görüntüleyebilir ve dışa aktarabilirler.

Constant FILTER_SANITIZE_STRING is deprecated hatası çözümü

FILTER_SANITIZE_STRING filtresi PHP 8.1 ve üstü sürümlerde kaldırıldı. Bunun yerine FILTER_SANITIZE_FULL_SPECIAL_CHARS filtresini kullanabilirsiniz.

Örnek Kullanım:

function sqlFilter($value ,$status = true)
{
	if ($status) {
		return filter_var($value, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
	} else {
		return $value;
	}
}

Txt Dosyasını Veritabanı Olarak Kullanmak

PHP
50 lines
<?php
// Verileri okuyan ve şifresini çözen fonksiyon
function oku($fileName, $secretKey, $encryptionMethod)
{
$fileContent = file_get_contents($fileName);
$fileData = json_decode($fileContent, true);
$iv = base64_decode($fileData['iv']);
$decryptedData = openssl_decrypt(base64_decode($fileData['data']), $encryptionMethod, $secretKey, 0, $iv);
return json_decode($decryptedData, true);
}
// Verileri yazan ve şifreleyen fonksiyon
function yaz($fileName, $data, $secretKey, $encryptionMethod)
{
$jsonData = json_encode($data);
$ivLength = openssl_cipher_iv_length($encryptionMethod);
$iv = openssl_random_pseudo_bytes($ivLength);
$encryptedData = openssl_encrypt($jsonData, $encryptionMethod, $secretKey, 0, $iv);
$encryptedFileContent = json_encode([
'data' => base64_encode($encryptedData),
'iv' => base64_encode($iv),
]);
file_put_contents($fileName, $encryptedFileContent);
}
//VERİTABANI BAĞLANTI
$fileName = 'lisanslar.txt'; // tablo adı
$secretKey = "Alp123*_.";
$encryptionMethod = "AES-256-CBC";
//OKUMA - SELECT
$data = oku($fileName, $secretKey, $encryptionMethod);
print_r($data);
//YAZMA - INSERT
$data[] = ["name" => "Alperen", "price" => 1000];
writeData($fileName, $data, $secretKey, $encryptionMethod);
//SİLME - DELETE
$id = 0; //dizi index no
unset($data[$id]);
$data = array_values($data);
writeData($fileName, $data, $secretKey, $encryptionMethod);
//GÜNCELLEME - UPDATE
$id = 0;//güncellenecek veri id
$name= "Mehmet"; //yeni isim
$data[$id]['name'] = $name;
writeData($fileName, $data, $secretKey, $encryptionMethod);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Php ve Yapay Zeka İle Kullanıcı Adı Kontrolü. Prompt Tasarım by Tayfun Erbilen

PHP
101 lines
<?php
class ChatApp {
private $model= "gpt-3.5-turbo-0301";
private $messages= array();
public $api_key;
public function chat($message) {
$prompt_messages[] = array("role" => "system", "content" => '
Sen sadece JSON çıktı yazabilen ve kullanıcı adlarını denetleyen bir uzmansın.
- kullanıcı adı siyasi, dini, ırkçı, hakaret içeremez.
- kullanıcı adı rastgele bir değer olamaz.
- kullanıcı adı anlamsız bir değer olamaz.
- kullanıcı adı, yönetici gibi anlaşılacak isimler olamaz.
- kullanıcı adı küfür içeremez, küfüre benzer diğer değerler
içeremez.
kullanıcı adlarında türkçe karakterler olmadığı için bazı
küfürler örneğin ”oç" farklı şekillerde gelebilir. Örneğin ”oc”
gibi, bunları düşünerek mantıklı bir filtreleme yap.
eğer yukarıdaki koşullara göre uymayan bir kullanıcı adı
girilmişse JSON formatında success: false ve reason içinde
sebebini döndür.
eğer bir sorun yoksa success: true döndür.
JSON formatı hariç hiçbir veri döndürme.
Açıklama yazma sadece json sonucunu döndür.
örneğin
{
"success": false,
"reason": "Kullanıcı adı küfür içeremez veya küfre benzer değerler içeremez."
}
veya
{
"success": true,
}
döndürmen yeterli.
');
$prompt_messages[] = array("role" => "user", "content" => $message);
$post_fields = array(
"model" => $this->model,
"messages" => $prompt_messages
);
$header = array(
'Content-Type: application/json',
'Authorization: Bearer ' . $this->api_key
);
$ch = curl_init();
$url = 'https://api.openai.com/v1/chat/completions';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_fields));
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error: ' . curl_error($ch);
}
curl_close($ch);
$response = json_decode($result, true);
$assistant_message = $response["choices"][0]["message"]["content"];
return $assistant_message;
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Kayıt Form</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1>Kayıt Ol</h1>
<form method="POST" action="">
<div class="form-group">
<label for="username">Kullanıcı:</label>
<input type="text" class="form-control" id="username" name="username" placeholder="Kullanıcı adınızı girin.">
</div>
<button type="submit" class="btn btn-primary">Kayıt GPT</button>
</form>
</div>
<?php
if (isset($_POST["username"])){
$username = $_POST["username"];
$chatApp = new ChatApp();
$chatApp->api_key = "sk-lyaikhPwDdeneme1234567"; // bunu kendiniz değiştirin
$response = $chatApp->chat($username);
$is_valid_json = (json_decode($response) !== null);
if ($is_valid_json) {
$result=json_decode($response,true);
if($result["success"]==true){
echo "<div class='container mt-3'>";
echo "<div class='alert alert-success'>".$_POST["username"]." Kullanıcı adı kurallara uygun.</div>";
echo "</div>";
}elseif($result["success"]==false){
echo "<div class='container mt-3'>";
echo "<div class='alert alert-danger'>".$_POST["username"]." ".$result["reason"]."</div>";
echo "</div>";
}
}
}
?>
</body>
</html>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Php Twitter Api v2 ve Oauth1.0a Sınıfı – Tweet API 2023

PHP
254 lines
<?php
session_start();
define("CONSUMER_KEY", "iybjF4ucDqQ9VeSJm0....");
define("CONSUMER_SECRET", "xhLbOYuQyGSE2DyrAfpwgQ4o40Z1tgq0eh07CEcAPG....");
define("OAUTH_TOKEN", "1580647705633869826-YHuT8vIGTkZCMZRDVz5IUYN.....");
define("OAUTH_TOKEN_SECRET", "kYq4PFeCHHVkjjTw6xC47q7TJDvCBQDTqyMBb....");
define("OAUTH_CALLBACK", "http://localhost:80/callback.php");
class API{
protected $consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret;
protected $apiUrl = 'https://api.twitter.com/';
protected $apiStandardUrl = 'https://api.twitter.com/1.1/';
protected $apiUploadUrl = 'https://upload.twitter.com/1.1/';
protected $oauth = [];
public function __construct($consumer_key, $consumer_secret, $oauth_token = false, $oauth_token_secret = false){
$this->consumer_key = $consumer_key;
$this->consumer_secret = $consumer_secret;
$this->oauth_token = $oauth_token;
$this->oauth_token_secret = $oauth_token_secret;
if ($oauth_token == false && $oauth_token_secret == false) {
$this->oauth = [
'oauth_consumer_key' => $this->consumer_key,
'oauth_nonce' => time(),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_timestamp' => time(),
'oauth_version' => '1.0',
];
} elseif ($oauth_token !== false && $oauth_token_secret == false) {
$this->oauth = $oauth_token;
} else {
$this->oauth = [
'oauth_consumer_key' => $this->consumer_key,
'oauth_nonce' => time(),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_token' => $this->oauth_token,
'oauth_timestamp' => time(),
'oauth_version' => '1.0',
];
}
}
protected function buildAutheaders($oauth){
$headers = 'Authorization: OAuth ';
$values = [];
foreach ($oauth as $key => $value) {
$values[] = "$key=\"" . rawurlencode($value) . "\"";
}
$headers .= implode(', ', $values);
return $headers;
}
protected function buildBearerheaders($oauth){
$headers = 'Authorization: Bearer ' . $oauth;
return $headers;
}
protected function buildString($method, $url, $params){
$headers = [];
ksort($params);
foreach ($params as $key => $value) {
$headers[] = "$key=" . rawurlencode($value);
}
return $method . "&" . rawurlencode($url) . '&' . rawurlencode(implode('&', $headers));
}
protected function buildSignature($baseInfo){
$encodeKey = rawurlencode($this->consumer_secret) . '&' . rawurlencode($this->oauth_token_secret);
$oauthSignature = base64_encode(hash_hmac('sha1', $baseInfo, $encodeKey, true));
return $oauthSignature;
}
protected function getSignature($method, $url, $params = false){
$oauth = $this->oauth;
if ($params == false) {
$baseInfo = $this->buildString($method, $url, $oauth);
$oauth['oauth_signature'] = $this->buildSignature($baseInfo);
} else {
$oauth = array_merge($oauth, $params);
$baseInfo = $this->buildString($method, $url, $oauth);
$oauth['oauth_signature'] = $this->buildSignature($baseInfo);
}
return $oauth;
}
protected function reqCurl($method = 'GET', $url, $params = false, $headers = false, $postfields = false, $userpwd = false){
$ch = curl_init();
if ($params == false) {
curl_setopt($ch, CURLOPT_URL, $url);
}
if ($params == true) {
curl_setopt($ch, CURLOPT_URL, $url . "?" . http_build_query($params));
}
if ($method == 'POST') {
curl_setopt($ch, CURLOPT_POST, true);
}
if ($method == 'DELETE') {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
}
if ($postfields == true) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
}
if ($headers == true) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
if ($userpwd == true) {
curl_setopt($ch, CURLOPT_USERPWD, $this->consumer_key . ':' . $this->consumer_secret);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
return $result;
}
protected function request2($method, $req, $params = false){
$req = substr($req, 1);
$url = $this->apiUrl . $req;
if ($this->oauth_token !== false && $this->oauth_token_secret == false) {
$oauth = $this->buildBearerheaders($this->oauth);
$headers = [];
$headers[] = $oauth;
} else {
$oauth = $this->getSignature($method, $url);
$headers = [];
$headers[] = 'Content-type: application/json';
$headers[] = $this->buildAutheaders($oauth);
}
$result = $this->reqCurl($method, $url, null, $headers, $params);
return json_decode($result, true);
}
public function request($method, $req, $params = false){
$method = strtoupper($method);
if ($req == 'media/upload') {
return $this->upload($method, $req, $params);
}
$version = explode('/', $req);
if ($version[0] == '2') {
$req = "/$req";
return $this->request2($method, $req, $params);
}
if ($version[1] == '2') {
return $this->request2($method, $req, $params);
}
if ($version[0] == 'labs') {
$req = "/$req";
return $this->request2($method, $req, $params);
}
if ($version[1] == 'labs') {
return $this->request2($method, $req, $params);
}
$url = $this->apiStandardUrl . $req . ".json";
if ($this->oauth_token !== false && $this->oauth_token_secret == false) {
$oauth = $this->buildBearerheaders($this->oauth);
$headers = [];
$headers[] = $oauth;
} else {
$oauth = $this->getSignature($method, $url, $params);
$headers = [];
$headers[] = $this->buildAutheaders($oauth);
}
$result = $this->reqCurl($method, $url, $params, $headers, null);
return json_decode($result, true);
}
protected function reqUpload($method, $req, $params){
$url = $this->apiUploadUrl . $req . ".json";
$oauth = $this->getSignature($method, $url);
$headers = [];
$headers[] = $this->buildAutheaders($oauth);
$headers[] = 'Content-Type: multipart/form-data';
$result = $this->reqCurl($method, $url, null, $headers, $params);
return json_decode($result, true);
}
protected function uploadChunked($req, $params){
$_params = [
'command' => 'INIT',
'total_bytes' => filesize($params['media']),
'media_type' => $params['media_type'],
];
if (isset($params['additional_owners'])) {
$_params['additional_owners'] = $params['additional_owners'];
}
if (isset($params['media_category'])) {
$_params['media_category'] = $params['media_category'];
}
$req = $this->reqUpload('POST', 'media/upload', $_params);
$fp = fopen($params['media'], 'r');
$segment_id = 0;
while (!feof($fp)) {
$chunk = fread($fp, 40960);
$__params = [
"command" => "APPEND",
"media_id" => $req['media_id'],
"segment_index" => $segment_id++,
'media_data' => base64_encode($chunk),
];
$this->reqUpload('POST', 'media/upload', $__params);
}
fclose($fp);
$lastParams = array(
"command" => "FINALIZE",
"media_id" => $req['media_id'],
);
$result = $this->reqUpload('POST', 'media/upload', $lastParams);
return $result;
}
public function upload($method, $req, $params){
if ($method == 'GET') {
return "METHOD MUST BE POST";
}
$url = $this->apiUploadUrl . $req . ".json";
$c = count($params);
if ($c == 1 && isset($params['media'])) {
$filename = file_get_contents($params['media']);
$base64 = base64_encode($filename);
$_params = ['media_data' => $base64];
return $this->reqUpload('POST', 'media/upload', $_params);
} elseif ($c == 1 && isset($params['media_data'])) {
$base64 = $params['media_data'];
$_params = ['media_data' => $base64];
return $this->reqUpload('POST', 'media/upload', $_params);
} else {
return $this->uploadChunked($req, $params);
}
}
public function file($oauthUrl){
$oauth = $this->getSignature("GET", $oauthUrl);
$headers = [];
$headers[] = $this->buildAutheaders($oauth);
$result = $this->reqCurl("GET", $oauthUrl, null, $headers, null);
return $result;
}
public function oauth($req, $params){
$url = $this->apiUrl . $req;
$oauth = $this->getSignature("POST", $url, $params);
$headers = [];
$headers[] = $this->buildAutheaders($oauth);
$result = $this->reqCurl("POST", $url, $params, $headers, null);
parse_str($result, $arr);
return $arr;
}
public function url($req, $params){
$url = $this->apiUrl . $req . "?" . http_build_query($params);
return $url;
}
public function oauth2($req, $params){
$url = $this->apiUrl . $req;
$result = $this->reqCurl("POST", $url, $params, null, null, true);
return json_decode($result, true);
}
}
// ÖRNEK TWEET ÇEKME
$conn = new API(CONSUMER_KEY, CONSUMER_SECRET);
$params = ['grant_type' => 'client_credentials'];
$bearerToken = $conn->oauth2('oauth2/token', $params);
$conn2 = new API(CONSUMER_KEY, CONSUMER_SECRET, $bearerToken['access_token']);
$res = $conn2->request('GET', '/2/users/by/username/senggolbaok');
print_r($res);
// ÖRNEK TWEET ATMA
$conn = new API(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET);
$postfields = "{\"text\":\"Merhaba Dünya\"}";
$res = $conn->request('POST', '/2/tweets', $postfields);
print_r($res);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Kaynak: composer require ferrysyahrinal/twifer

Php ile Chatgpt yapay zeka sohbet botu sorgulama ve geçmişi hafızaya alarak cevap verme

PHP
77 lines
<?php
class ChatApp {
private $model;
private $messages;
public $api_key;
public function __construct($model = "gpt-3.5-turbo", $load_file = "") {
$this->model = $model;
$this->messages = array();
if ($load_file != '') {
$this->load($load_file);
}
}
public function chat($message) {
if ($message == "exit") {
$this->save();
exit();
} elseif ($message == "save") {
$this->save();
return "(saved)";
}
$this->messages[] = array("role" => "user", "content" => $message);
$post_fields = array(
"model" => $this->model,
"messages" => $this->messages
);
$header = array(
'Content-Type: application/json',
'Authorization: Bearer ' . $this->api_key
);
$ch = curl_init();
$url = 'https://api.openai.com/v1/chat/completions';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_fields));
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error: ' . curl_error($ch);
}
curl_close($ch);
$response = json_decode($result, true);
$assistant_message = $response["choices"][0]["message"]["content"];
$this->messages[] = array("role" => "assistant", "content" => $assistant_message);
return $assistant_message;
}
public function save() {
try {
$ts = time();
$json_object = json_encode($this->messages, JSON_PRETTY_PRINT);
$filename_prefix = preg_replace('/[^0-9a-zA-Z]+/', '-', substr($this->messages[0]["content"], 0, 30));
$filename = "chat_model_" . $filename_prefix . "_" . $ts . ".json";
file_put_contents($filename, $json_object);
} catch (Exception $e) {
exit();
}
}
public function load($load_file) {
$json_data = file_get_contents($load_file);
$this->messages = json_decode($json_data, true);
}
}
//Not: Bu sınıf yüksek ücretlere sebep olabilir.
$chatApp = new ChatApp();
$chatApp->api_key="sk-lyaikhPwD73bPVtUMO5FT3BlbkFJ"; // OpenAI API anahtarını buraya girin
//Yazışma geçmişi
$assistant_message = $chatApp->chat("Merhaba, nasılsın?");
$assistant_message = $chatApp->chat("Hava durumu hakkında bilgi verir misin?");
$assistant_message = $chatApp->chat("Konya");
//Sonuç
echo $assistant_message;
/* Çıktısı
Tamam, şu anda Konya'da hava durumu nasıl diye bakayım. Konya' da hava parçalı bulutlu olarak devam ediyor. Sıcaklık ise yaklaşık 16 derece civarında. Bugün için yağış beklenmiyor. Ancak yarın öğleden sonra hafif yağmur tahmini yapılmaktadır.
*/
// Çıkış yapmak istediğinizde "exit" komutunu kullanabilirsiniz
$chatApp->chat("exit");
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Xampp Php 7.4 x86 32bit VC15

 XAMPP for Windows 7.4.29 sürümü 64 bit olduğundan sizlere 32 bitlik sürümünü hazırladım.

  • Apache/2.4.38 (Win32) OpenSSL/1.1.1a PHP/7.4.29
  • Veritabanı istemcisi sürümü: libmysql – mysqlnd 7.4.29
  • PHP uzantısı: mysqli  curl  mbstring 
  • PHP sürümü: 7.4.29
  • Sunucu sürümü: 10.1.38-MariaDB – mariadb.org binary distribution
  • phpMyAdmin Sürüm bilgisi: 5.2.0
<?php //32bit
$whitelist = array('127.0.0.1','::1');
if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
  $mysqli= @new mysqli("localhost","root","");
}
?>

Tıkla İndir 203MB

Phpmyadmin Güncellemesi İndir 13MB

Mysql Sıradaki Atlanmış Boş Otomatik Id Numaralarını Bulma

Bazen auto increment kullanırken aradan veriler silinebiliyor. Bu şekilde bir kullanım ile tekrar boş idleri doldurabilirsiniz

SELECT t1.id+1 AS siradaki FROM urun AS t1 WHERE 0=(SELECT COUNT(t2.id) FROM urun AS t2 WHERE t2.id=t1.id+1 order by t2.id asc) order by t1.id asc LIMIT 1

Yukarıdaki örnekte urun adlı tablodaki id sütununa göre arama yapar ve sıradaki boş id leri çağırır.

Örneğin 1,2,3,5,6 gibi bir veride 4 sonucunu verir.

SELECT t1.id+1 AS siradaki FROM urun AS t1 WHERE 0=(SELECT COUNT(t2.id) FROM urun AS t2 WHERE t2.id>=t1.id+1 and t2.id<=t1.id+21 order by t2.id asc) and t1.id>1000 order by t1.id asc LIMIT 1

Yukarıdaki örnekte urun adlı tablodaki id sütununa göre arama yapar,1000 nolu id’den büyük ve arada 20 adet ardışık boş id bulunan değerleri döndürür.

Örneğin 1025,1028,1030,1051 gibi bir veride 1031 sonucunu verir