BEYBABA Açıkçası bu kodları bu hale getirene kadar 1-2 ay uğraştım ve paylaşma konusunda kararsızdım. Yukarıda verdiğim linkleri inceleyin ve sonra aşağıda benim yazdığım kodlara uyarlayın. Zor olacağını düşünmüyorum. Sorun yaşadığınız yerde bana ulaşın. Bu tartışmayı kullanmak yerine lütfen yeni bir tartışma ile açın veya direkt bana özelden (telegram, mail) yazın.
<?php
$header = array(
"Authorization: Token <<BURAYA KENDI FORUMUNA AİT TOKENİ GİR>> ",
"Content-Type: application/json"
);
// Create DB connection
$servername = "localhost";
$login = "VERİTABANI KULLANICI ADI";
$dbpw = "VERİTABANI ŞİFRESİ";
$dbname = "VERİTABANI ADI";
$conn = new mysqli($servername, $login, $dbpw, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
else
{
echo "Connected to database\n";
}
?>
<?php
include("details-txt.php");
require 'vendor/autoload.php';
// Hata ayıklama için daha fazla bilgi göster
error_reporting(E_ALL);
ini_set('display_errors', 1);
// API URL'sini tanımlayın
$apiUrl = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro-latest:generateContent?key=<<BURAYA KENDİ APİ KEYİNİ GİR>>';
// TXT dosyasının yolunu belirtin
$filePath = 'keywords-gemini.txt';
// Dosyayı satır satır okuyun ve hata kontrolü ekleyin
if (!file_exists($filePath) || !is_readable($filePath)) {
die("Dosya bulunamadı veya okunamıyor: " . $filePath);
}
$keywords = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// Veritabanından son eklenen kaydın başlığını alalım
$lastTitleStmt = $conn->prepare('SELECT title FROM ai_queue ORDER BY id DESC LIMIT 1');
if (!$lastTitleStmt) {
die("Veritabanı hazırlama hatası: " . $conn->error);
}
$lastTitleStmt->execute();
$lastTitleStmt->bind_result($lastTitle);
$lastTitleStmt->fetch();
$lastTitleStmt->close();
echo "Veritabanındaki son başlık: $lastTitle\n";
// Son eklenen başlığı keywords dosyasında bul ve sonraki satırı kullan
$keywordIndex = array_search($lastTitle, $keywords);
if ($keywordIndex !== false && isset($keywords[$keywordIndex + 1])) {
$keyword = $keywords[$keywordIndex + 1];
echo "Sonraki anahtar kelime: $keyword\n";
} else {
// Eğer veritabanındaki son başlık txt dosyasında yoksa veya sonraki kelime bulunamıyorsa ilk kelimeyi kullan
$keyword = $keywords[0];
echo "İlk anahtar kelime: $keyword\n";
}
// Önce veritabanında anahtar kelimenin olup olmadığını kontrol et
$selectStmt = $conn->prepare('SELECT title FROM ai_queue WHERE title = ?');
$selectStmt->bind_param('s', $keyword);
$selectStmt->execute();
$selectStmt->store_result();
if ($selectStmt->num_rows === 0) {
// Eğer anahtar kelime veritabanında yoksa Gemini API'ye istek gönder
$prompt = "Aşağıdaki keyword ile Türkçe FORUMİSMİ forumunda konu açacaksın. Yazım hataları ve kısaltmalar kullanabilirsin, noktalama işaretlerini pek kullanma. SEO odaklı olmaya, keywordü kullanmaya dikkat et. Yapay zeka olduğunu belli etme, doğal bir dil kullan. Markdown, tablo, HTML gibi formatlama kullanma. Yalnızca düz metin kullan. Lütfen sadece şu formatta bir yanıt ver;\n\n"
. "Konu: [Başlık metni (75 karakterden kısa olmalı)]\n"
. "Soru: [Yanıt metni]\n\n"
. "Keyword: $keyword";
// JSON formatında istek gövdesi
$requestData = [
"contents" => [
[
"parts" => [
["text" => $prompt]
]
]
]
];
// cURL isteği
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requestData));
$response = curl_exec($ch);
// Hata kontrolü
if (curl_errno($ch)) {
echo "cURL Hatası: " . curl_error($ch) . "\n";
return;
}
$httpStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// Gelen cevabı ekrana yazdır
echo "Gemini API Yanıtı:\n$response\n\n";
if ($httpStatus !== 200) {
echo "API Hatası: HTTP Durum Kodu $httpStatus\n";
return;
}
// Cevabı ayrıştır ve işle
$responseData = json_decode($response, true);
if (isset($responseData['candidates'][0]['content']['parts'][0]['text'])) {
$geminiResponse = $responseData['candidates'][0]['content']['parts'][0]['text'];
// Başlık ve yanıtı ayrıştır
if (preg_match('/^Konu: (.+)\nSoru: (.+)$/s', $geminiResponse, $matches)) {
$title = trim($matches[1]);
$body = trim($matches[2]);
// Flarum API'sini kullanarak foruma yeni konu ekleyin
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://forum.siteismi.com/api/discussions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array(
'data' => array(
'type' => "discussions",
'attributes' => array(
'title' => "$title", // Konunun başlığı olarak satırdan alınan başlık kullanılıyor
'content' => "$body" // Konunun içeriği olarak satırdan alınan içerik kullanılıyor
),
'relationships' => array(
'tags' => array(
'data' => array(
array(
'type' => 'tags',
'id' => "2" // Bu konuya belirli bir tag (kategori) atamak için sabit bir tag ID'si kullanılıyor
)
)
)
)))));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode != 201) {
echo "HTTP Error Code: " . $httpCode . "\n";
echo "API Response: " . $result . "\n";
die("Forum API request failed.\n");
}
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch) . "\n";
}
curl_close($ch);
echo "Forumda yeni konu oluşturuldu: $title\n";
// Başarılıysa veritabanına yeni kayıt ekle
$insertStmt = $conn->prepare('INSERT INTO ai_queue (title, seen) VALUES (?, 1)');
$insertStmt->bind_param("s", $keyword);
$insertStmt->execute();
$insertStmt->close();
echo "Yeni anahtar kelime veritabanına eklendi: " . $keyword . "\n";
} else {
echo "Gemini API'den gelen cevap beklenen formatta değil.\n";
}
} else {
echo "Gemini API'den geçerli bir içerik alınamadı.\n";
}
} else {
echo "Başlık zaten var, atlanıyor: " . $keyword . "\n";
}
$selectStmt->close();
?>
txt dosyası alt alta bu şekilde olacak.
keyword 1
keyword 2
keyword 3