Yapayzeka ve PHP ile Yemek Tarifleri Botu Yapımı (Veri çekme, listeleme)

Yemek tarifleri, özellikle günümüzde internet üzerinden kolayca erişilebilen bilgiler arasında yer alıyor. Ancak bu tarifleri tek tek aramak ve düzenlemek zaman alıcı olabilir. Peki, bu işlemi otomatikleştirebileceğiniz bir yemek tarifleri botu oluşturmak ister misiniz? PHP ve Visual Studio Code kullanarak, simple_html_dom kütüphanesi yardımıyla lezzetli yemek tariflerini toplayan ve organize eden bir bot yapabilirsiniz. Bu makalede, böyle bir botu adım adım nasıl yapacağınızı anlatacağız.

Gerekli Araçlar ve Kurulum

Öncelikle, aşağıdaki araçlara ihtiyacınız olacak:

PHP: Web geliştirme için popüler bir programlama dili. (localhost xamp kullandım)
Visual Studio Code: Gelişmiş bir kod editörü.
simple_html_dom Kütüphanesi: PHP ile web scraping işlemleri için kullanılan bir kütüphane.

PHP ve Visual Studio Code’un bilgisayarınıza nasıl kurulacağını adım adım anlatan birçok kaynak mevcut. Bu araçları indirip kurduktan sonra, ilk PHP dosyanızı oluşturmak için Visual Studio Code’u açın ve yeni bir dosya oluşturun. simple_html_dom kütüphanesini projenize eklemek için öncelikle simple_html_dom sayfasından kütüphaneyi indirin. Daha sonra bu kütüphaneyi projenizin içine dahil edin.

Tam olarak nasıl yapıldığıyla alakalı videomuzu izleyebilirsiniz:

Yapay Zeka ile Trendyol’dan Ürün Çeken Bot Yapıyoruz!

E-ticaret dünyası hızla büyürken, veri çekme ve analiz işlemleri de önemli bir hale gelmiştir. Özellikle popüler alışveriş sitelerinden ürün bilgileri çekmek, stok durumu ve fiyat değişikliklerini takip etmek için kullanışlıdır. Bu makalede, PHP ve simple_html_dom.php kütüphanesini kullanarak Trendyol’dan ürün çeken bir bot oluşturmanın adımlarını inceleyeceğiz. Bunu yaparken Chatgpt’den yardım alarak işimizi ne kadar kolaylaştırdığını birlikte tecrübe ederken PHP ile bot yazma konusuna güzel bir giriş yapmış olacağız.

Gerekli Araçlar ve Kütüphaneler
Botumuzu oluşturmak için aşağıdaki araçlara ve kütüphanelere ihtiyacımız olacak:

PHP: Sunucu tarafında çalışan ve web tabanlı uygulamalar geliştirmek için kullanılan popüler bir programlama dili.
simple_html_dom.php: PHP ile HTML parse etmek için kullanılan bir kütüphane. Bu kütüphane sayesinde HTML içeriğini kolayca manipüle edebiliriz.
simple_html_dom.php Kütüphanesini Kurma
İlk olarak, simple_html_dom.php kütüphanesini indirip projemize dahil etmemiz gerekiyor. Kütüphaneyi buradan indirebilirsiniz. İndirdiğiniz dosyayı projenizin kök dizinine yerleştirin.

Adım Adım Bot Oluşturma

Proje Dizini Oluşturma
Öncelikle, projemiz için bir dizin oluşturalım ve gerekli dosyaları buraya koyalım:

trendyol-bot/
│
├── simple_html_dom.php
└── index.php
<?php
require_once 'simple_html_dom.php';
$html = file_get_html('https://www.trendyol.com/sr?fl=encokonecikanurunler');
$i = 1;
foreach($html->find('.p-card-wrppr') as $li) {
    echo $i. ". - ".$name = $li->find('h3', 0)->plaintext." ".$li->find('.prc-box-dscntd', 0)->plaintext."<br>";
 $i++;
}
?>

Bu makalede, PHP ve simple_html_dom.php kütüphanesini kullanarak, Google IDX platformunda Trendyol’dan ürün bilgileri çeken basit bir bot oluşturduk. Bu botu geliştirerek daha kapsamlı veri çekme ve analiz işlemleri yapabilirsiniz. Botunuzu düzenli olarak çalıştırarak fiyat değişikliklerini ve stok durumunu takip edebilir, e-ticaret stratejilerinizi buna göre optimize edebilirsiniz.

PHP’de Türkçe Karakterli Başlığı Link Yapısına Uyarlama Fonksiyonu

PHP’de seo uyumlu seo kankası urller resim adları oluşturmak isteyebilirsiniz işte bunun için yazılmış bir fonksiyon

Fonksiyonu Bir Değişkene Atayarak Kullanmak:

$transliterate = function($string, $separator = '-') {
    $_transliteration = ["/ö|œ/" => "o",
        "/ü/" => "u",
        "/Ä/" => "A",
        "/Ü/" => "U",
        "/Ö/" => "O",
        "/À|Á|Â|Ã|Å|Ǻ|Ā|Ă|Ą|Ǎ/" => "A",
        "/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª/" => "a",
        "/Ç|Ć|Ĉ|Ċ|Č/" => "C",
        "/ç|ć|ĉ|ċ|č/" => "c",
        "/Ð|Ď|Đ/" => "D",
        "/ð|ď|đ/" => "d",
        "/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě/" => "E",
        "/è|é|ê|ë|ē|ĕ|ė|ę|ě/" => "e",
        "/Ĝ|Ğ|Ġ|Ģ/" => "G",
        "/ĝ|ğ|ġ|ģ/" => "g",
        "/Ĥ|Ħ/" => "H",
        "/ĥ|ħ/" => "h",
        "/Ì|Í|Î|Ï|Ĩ|Ī| Ĭ|Ǐ|Į|İ/" => "I",
        "/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı/" => "i",
        "/Ĵ/" => "J",
        "/ĵ/" => "j",
        "/Ķ/" => "K",
        "/ķ/" => "k",
        "/Ĺ|Ļ|Ľ|Ŀ|Ł/" => "L",
        "/ĺ|ļ|ľ|ŀ|ł/" => "l",
        "/Ñ|Ń|Ņ|Ň/" => "N",
        "/ñ|ń|ņ|ň|ʼn/" => "n",
        "/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ/" => "O",
        "/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º/" => "o",
        "/Ŕ|Ŗ|Ř/" => "R",
        "/ŕ|ŗ|ř/" => "r",
        "/Ś|Ŝ|Ş|Ș|Š/" => "S",
        "/ś|ŝ|ş|ș|š|ſ/" => "s",
        "/Ţ|Ț|Ť|Ŧ/" => "T",
        "/ţ|ț|ť|ŧ/" => "t",
        "/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ/" => "U",
        "/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ/" => "u",
        "/Ý|Ÿ|Ŷ/" => "Y",
        "/ý|ÿ|ŷ/" => "y",
        "/Ŵ/" => "W",
        "/ŵ/" => "w",
        "/Ź|Ż|Ž/" => "Z",
        "/ź|ż|ž/" => "z",
        "/Æ|Ǽ/" => "E",
        "/ß/" => "s",
        "/IJ/" => "J",
        "/ij/" => "j",
        "/Œ/" => "E",
        "/ƒ/" => ""];
    $quotedReplacement = preg_quote($separator, '/');
    $merge = [
        '/[^\s\p{Zs}\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]/mu' => ' ',
        '/[\s\p{Zs}]+/mu' => $separator,
        sprintf('/^[%s]+|[%s]+$/', $quotedReplacement, $quotedReplacement) => '',
    ];
    $map = $_transliteration + $merge;
    unset($_transliteration);
    return preg_replace(array_keys($map), array_values($map), $string);
};
 
// Kullanım örneği
$string = "Äpfel Über Öl und Übel!";
$result = $transliterate($string);
echo $result; // Apfel-Uber-Ol-und-Ubel

Fonksiyonu Bir Sınıf İçinde Tanımlayarak Kullanmak

class Transliterator {
    public static function transliterate($string, $separator = '-') {
        $_transliteration = ["/ö|œ/" => "o",
            "/ü/" => "u",
            "/Ä/" => "A",
            "/Ü/" => "U",
            "/Ö/" => "O",
            "/À|Á|Â|Ã|Å|Ǻ|Ā|Ă|Ą|Ǎ/" => "A",
            "/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª/" => "a",
            "/Ç|Ć|Ĉ|Ċ|Č/" => "C",
            "/ç|ć|ĉ|ċ|č/" => "c",
            "/Ð|Ď|Đ/" => "D",
            "/ð|ď|đ/" => "d",
            "/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě/" => "E",
            "/è|é|ê|ë|ē|ĕ|ė|ę|ě/" => "e",
            "/Ĝ|Ğ|Ġ|Ģ/" => "G",
            "/ĝ|ğ|ġ|ģ/" => "g",
            "/Ĥ|Ħ/" => "H",
            "/ĥ|ħ/" => "h",
            "/Ì|Í|Î|Ï|Ĩ|Ī| Ĭ|Ǐ|Į|İ/" => "I",
            "/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı/" => "i",
            "/Ĵ/" => "J",
            "/ĵ/" => "j",
            "/Ķ/" => "K",
            "/ķ/" => "k",
            "/Ĺ|Ļ|Ľ|Ŀ|Ł/" => "L",
            "/ĺ|ļ|ľ|ŀ|ł/" => "l",
            "/Ñ|Ń|Ņ|Ň/" => "N",
            "/ñ|ń|ņ|ň|ʼn/" => "n",
            "/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ/" => "O",
            "/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º/" => "o",
            "/Ŕ|Ŗ|Ř/" => "R",
            "/ŕ|ŗ|ř/" => "r",
            "/Ś|Ŝ|Ş|Ș|Š/" => "S",
            "/ś|ŝ|ş|ș|š|ſ/" => "s",
            "/Ţ|Ț|Ť|Ŧ/" => "T",
            "/ţ|ț|ť|ŧ/" => "t",
            "/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ/" => "U",
            "/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ/" => "u",
            "/Ý|Ÿ|Ŷ/" => "Y",
            "/ý|ÿ|ŷ/" => "y",
            "/Ŵ/" => "W",
            "/ŵ/" => "w",
            "/Ź|Ż|Ž/" => "Z",
            "/ź|ż|ž/" => "z",
            "/Æ|Ǽ/" => "E",
            "/ß/" => "s",
            "/IJ/" => "J",
            "/ij/" => "j",
            "/Œ/" => "E",
            "/ƒ/" => ""];
        $quotedReplacement = preg_quote($separator, '/');
        $merge = [
            '/[^\s\p{Zs}\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]/mu' => ' ',
            '/[\s\p{Zs}]+/mu' => $separator,
            sprintf('/^[%s]+|[%s]+$/', $quotedReplacement, $quotedReplacement) => '',
        ];
        $map = $_transliteration + $merge;
        unset($_transliteration);
        return preg_replace(array_keys($map),
Örnek Başlık: Keramet Sosunda: Fırın Poşetinde Çipura Tarifi
Çıktı Başlık: Keramet-Sosunda-Firin-Posetinde-Cipura-Tarifi

ChatGpt API PHP Kullanımı – Örnek Proje Kodlaması

Postman api kullanımı, chatgpt postman kullanımı ve örnek bir proje nasıl geliştirilir süreçleri izleyerek öğrenebilirsiniz ayrıca chatgpt php curl kodları içinde değişken nasıl kullanılır bunun yöntemini de vermiş oldum:

projenin kodları:

hesapla.php

<?php
if($_POST) {
 
$mesaj = $_POST['mesaj'];
 
$curl = curl_init();
 
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.openai.com/v1/chat/completions',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  $postData = [
    "model" => "gpt-3.5-turbo",
    "messages" => [
        [
            "role" => "system",
            "content" => "Sana verilecek şehirler arasındaki mesafeyi km cinsinden hesapla"
        ],
        [
            "role" => "user",
            "content" => $mesaj
        ]
    ],
    "temperature" => 1,
    "top_p" => 1,
    "n" => 1,
    "stream" => false,
    "max_tokens" => 250,
    "presence_penalty" => 0,
    "frequency_penalty" => 0
],
CURLOPT_POSTFIELDS => json_encode($postData),
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'Accept: application/json',
    'Authorization: Bearer CHAT-GPT-API-KEY',
    'Cookie: __cf_bm=vZOEmnB.iBoARA5jNlzl_3fmVT5kf7XS5XGVJIULbzU-1707949206-1.0-Ab4yfu/SgkWvujszh3GgRmWFp+Yrn08466/17QdbMNzsExMjBK+iMYSXzmFjSaSxije1GChN+znSDrZVbagYXIw=; _cfuvid=4EBhWeYHBHCUPtDL8MCwyNKaINeeK3AkDRyEEqhKcAo-1707942992182-0.0-604800000'
  ),
));
 
$response = curl_exec($curl);
 
curl_close($curl);
 
$response = json_decode($response);
 
echo $response->choices[0]->message->content;
 
 
//print_r($response);
//echo $response;
 
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <form method="post">
    <textarea name="mesaj" rows="6"></textarea>
<button type="submit">Hesapla</button>
  </form>
 
</body>
</html>

ChatGpt Api Kullanarak Masal Yazdırma Projesi – ChatGpt For PHP Code

işte ChatGpt Api kullanarak bir hikaye/masal yazdırma projesi basit bir input alanından gelen veriyi bir değişkene atayıp prompt içinde kullanarak ekrana bir masal yazdırıyoruz.

<?php
 
//$input = "anahtar kelime, kelime2, başkabirşey";
 
if($_POST) {
 
 
  $input = $_POST['prompt'];
 
$curl = curl_init();
 
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.openai.com/v1/completions',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  $postData = [
  "model" => "gpt-3.5-turbo-instruct",
  "prompt" => "Şu anahtar kelimelerle alakalı bir masal yaz: $input",
  "max_tokens" => 500,
  "temperature" => 0.7
],
  CURLOPT_POSTFIELDS => json_encode($postData),
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer CHAT-GPT-API-KEY',
    'Content-Type: application/json',
    'Cookie: __cf_bm=y5nFmlyys1DPwTtjCpj.pBevVryHN0TF6YLT1GWupkM-1706396921-1-AfYdSPVEQD1klX01+A+pFOeBJa1Q6CEeTN7fD99l7XJZu74miS5Ga4wAMuPgD/LaSIr0yjI6NT3Sp86lXVMfvAQ=; _cfuvid=DlcMs.nAdBoxgWFBSesVC0W8VMU8sZNGz2rkNOsG0xg-1706396921015-0-604800000'
  ),
));
 
$response = curl_exec($curl);
 
curl_close($curl);
 
$response = json_decode($response);
 
echo $response->choices[0]->text;
//print_r($response);
 
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
 
  <form method="post">
 
<textarea name="prompt" placeholder="Lütfen yazmamı istediğiniz masalınızın içeriğiyle alakalı anahtar kelimeler girin" rows="6"></textarea>
 
<button name="submit" type="submit">Gönder</button>
 
  </form>
 
</body>
</html>

WordPress Bootsrap Temasında Adminbar Navbar alanının üstüne geliyor (SORUN ÇÖZÜLDÜ)

WordPresste giriş yaptıktan sonra admin bar eğer temanızın navbar yada header alanınızı kaplıyorsa bunun için farklı çözüm yolları var ben kullandığım çözüm yolunu paylaşıyorum; temel mantığımız altta kalan divin class yada id değerine top değeri tanımlayarak aşağı indirmek olacaktır.

<style type="text/css">header.fixed-top { top: 34px; }</style>

Fakat bunu yapınca giriş yapmayan yada admin olmayan kullanıcılar için istenmeyen bir görüntü ortaya çıkabilir bu sorunu aşmak için yapmamız gereken wordpressin fonksyonlarıyla kullanıcıyı bulup admin olup olmadığına bakmak ve ona göre style uygulamasını sağlamak olacaktır.
header.php içinde şu kodu yazarak ve top:34px değeriyle oynama yaparak sorunu çözebilirsiniz

  <?php $wpUser = wp_get_current_user();
if (user_can( $wpUser, 'administrator' )) { ?>
<style type="text/css">header.fixed-top { top: 34px; }</style>
<?php } ?>

WordPress Admin Bar Overlapping Twitter Bootstrap Navigation, WordPress Admin Bar Covering & Overlapping Fixed Menu Header

PHP Warning: Attempt to read property HATA ÇÖZÜMÜ

simple_html_dom.php ile işlem yaparken file_get_html kullanırken almanız çekmeye çalıştığınız veri/obje her içerikte olmayabilir bu sefer de aşağıdaki hatayı almanız muhtemeldir.
xamp hata kodum: Warning: Attempt to read property “plaintext” on null in C:\xampp\htdocs…
Sunucularda da muhtemelen alacağınız hata kodu bu şekilde olacaktır, ulaşmaya çalıştığınız,

Bu hatanın nedeni Basitçe ifade etmek gerekirse, nesne olmayan bir değişkenden bir özelliğe veya yönteme erişmeye çalıştığımızda “PHP Uyarısı: Bir dize veya dizideki ‘…’ özelliğine erişme girişimi” ortaya çıkar. Bu uyarıyı önlemek için, verilen değişkenin object türünde olup olmadığını doğrulamak amacıyla komut dosyamıza koşullu bir parametre eklemek çok önemlidir. Ek olarak, tanımlanan değişkenin tipini kontrol etmek için PHP’nin is_object() yerleşik fonksiyonunu kullanmak önemlidir.

örnek kullanım:

 $source= $html->find('.ornekclass',0);
 
if(is_object($source)){ echo $haber_kaynak->plaintext; }

PHP Pdo Veritabanı Bağlantısı ve Veri Kontrolü (Bu veri var mı yoksa ekle)

PHP PDO veritabanı bağlantı kodlarımız:

$servername = "localhost";
$username = "root";
$password = "";
 
try {
  $conn = new PDO("mysql:host=$servername;dbname=kodgunlugum", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo "Connected successfully";
} catch(PDOException $e) {
  echo "Connection failed: " . $e->getMessage();

Bu veri var mı select işlemiyle sorgulayıp sayısına göre işlem yapmak için

// veri kontrolü
   $kontrol = $conn->query("SELECT * FROM tabloAdi WHERE baslik='{$baslik}'");
   ## kontrol için koşul belirttik.

 
if ($kontrol->rowCount()>0) {
 
echo "bu kayıt zaten var";
 
 
} else {
 
// bu kayıt yok insert işlemleri burada yapılabilir.
}

PDO ile insert işlemi örneği (ad soyad ve gsm değişkenlerinden veri geldiğini düşünerek çalıştıracak olursak)

 
   $sql=$conn->prepare("insert into tabloAdi set ad=?,soyad=?,gsm=?");
$sql->execute([$ad,$soyad,$gsm]);
 
 
if ($sql->rowCount()>0) {
 
   echo "Kayıt Başarılı";
 
 
}else {
 
   echo "kayıt eklenemedi";
}

Php Resim Kaydederken Bozuk URL Düzeltme

Php ile farklı bir kaynaktan resim çekip kendi sunucumuza kaydederken bazı problemler çıkabilir & gibi karakterleri urldecode işlemi yaparak temizleyip resim linkini okunaklı hale getirmekte fayda var
Bozuk yapı:

https://yemek.com/_next/image/?url=https%3A%2F%2Fcdn.yemek.com%2Fmnresize%2F1250%2F833%2Fuploads%2F2022%2F04%2Fcitir-tavuk-dilimleri-yemekcom.jpg&w=1920&q=75

Düzelmiş hali:

https://yemek.com/_next/image/?url=https://cdn.yemek.com/mnresize/1250/833/uploads/2022/04/citir-tavuk-dilimleri-yemekcom.jpg&w=1920&q=75

Düzeltmek ve kaydetmek için:

 
 $url = str_replace( "&amp;", "&", urldecode(trim($resim)) );
 
$veri2 = file_get_contents($url);
$kayit = fopen('images/'.uniqid().".jpg","w+");
fwrite($kayit, $veri2);
fclose($kayit);

Foreach döngü içindeki ilk veriyi dışarıya taşımak

Bunu yapmak için öncelikle foreach döngü sayısı aşağıdaki gibi bir kereyle sınırlıyoruz ardından ilgili değişkeni dışarıdan çağırarak veriyi dışarıya aktarabiliyoruz.

$i = 0;
foreach ($rss->channel->item as $item) {
 
 
$temizBaslik = "veri1";
 
 
 
// 1 kayıt getir ve dur
  if(++$i > 0) break;
 
 
 
}
 
echo $temizBaslik;