robotEvet arkadaşlar, bazı arkadaşlarımız için bot çok gerekli. Bazılarının da ekmek teknesi. Ben de bu yazıda bot yazanların affına sığınarak bot nasıl yazılır genel hatlarıyla anlatmaya çalışacağım. Bu yazıda PHP Bot Yapımı konusundaki botun bir benzerini yapacağız. Sadece oradaki kod biraz hatalı. Ben onu editledim ve burada yazıyorum.

 

İlk önce bot’un ne demek olduğunu kouşalım. Botlar, web sitelerini gezerler ve sitedeki verileri toplarlar. Bunlar, arama motoru botu olabilir, adsense botu olabilir yada içeriklerimizi kendi siteleri için [Ç]alan botlar olabilir. Biz burada içerikleri ödün[ç]alan bir bot yapacağız. Botumuz verileri web sitesinden alacak ve veritabanızıma ekleyecek. Bu yüzden bize gerekenler:

  • index.php
  • db.php
  • içerik çekilecek bir site
  • ve yazdıklarımı uygulayacak bir beyin.

Şimdi, ilk olarak botumuzun hangi siteden veri çekeceğine karar verelim. Ben, hayali bir baranzorlucom.com/botdeneme deki makaleleri çekeceğim ve makaleleri Başlık, içerik, tarih ve kategori olarak kaydedeceğim. Siz de buna benzer bir bot yapabilirsiniz.

Hadi kod yazmaya başlayalım…

Veritabanı bağlantısı için db.php oluşturalım.

<?php
$baglan = mysql_connect("localhost","veritabanıadı","veritabanışifre");
if (!$baglan)
{
die("Bağlantı Hatası");
}
mysql_select_db("veritabanıadı", $baglan);
?>

Öncelikle php tagımızı açalım ve veritabanı bilgilerimizi import edelim.

<?

include('db.php');

Sonra örnek bir makale urlsini yazalım. Ben http://blogyaziyoruz.biz/botdeneme/Makaleler.php?makaleid=15 adresindeki makaleyi çekiyim. O zaman kodumuza

$site=file_get_contents("http://blogyaziyoruz.biz/botdeneme/Makaleler.php?makaleid=15");

satırlarını ekleyelim. Bu sitenin kaynak kodunu $site değişkenine atar. 2. adımda ise yazı başlığını alalım. Örneğin başlığın kodu

<h2 class="yazibaslik">SEO Teknikleri</h2>

olsun. Biz SEO Teknikleri bölümünü alacağımız için. Onun yerine (.*?) kodunu koyuyoruz. bu kod bizim almak istediğimiz yeri temsil ediyor yani kodumuz.

<h2 class="yazibaslik">(.*?)</h2>

oldu. Hemen bunu botumuza ekleyelim ve bir değişkene atayalım. Ben $baslik a atıyorum. Bu arada kodlar karışmasın diye / ve ”  işaretlerinin önüne koyuyoruz.

$baslik='#<h2 class="yazibaslik">(.*?)</h2>#si';

şimdi bunu preg match ile arıyoruz. preg_match kodu, sitede bu kodu arar ve aradığımız kod varsa istediğimiz kodu bizim için bir değişkene atar. Preg match’ı kullanırken ilk bölüme aranacak kod, ikinci bölüme aranacak site, üçüncü bölüme ise atanacak değişken yazılır. Örneğin;

preg_match($baslik,$site,$baslikfonksiyon);

kodu, ile <h2 class=”yazibaslik>SEO Teknikleri</h2> kısmındaki SEO Teknikleri bölümünü $baslikfonksiyon a atadık.

Şimdi aynı şekilde içerik ve kategoriyi de çekelim. Kategori’nin

<div class="kategori">...</div>

içinde olduğunu; içeriğin de

<article>...</article>

içinde olduğunu varsayarak onlar için de kodları yazıyorum ve kodların son halini gösteriyorum.

<?
include('db.php');
$site=file_get_contents("http://blogyaziyoruz.biz/botdeneme/Makaleler.php?makaleid=15");
$baslik='#<h2 class="yazibaslik">(.*?)</h2>#si';
$icerik='#<article>(.*?)</article>#si';
$kategori='#<div class="kategori">(.*?)</div>#si';

preg_match($baslik,$site,$baslikfonksiyon);
preg_match($icerik,$site,$icerikfonksiyon);
preg_match($kategori,$site,$kategorifonksiyon);

?>

Tabi botumuz sadece bu kodlardan ibaret değil. Şimdi çektiğimiz veriyi sayıyla ifade ediyoruz. Aslında bunu bir kod içerisinde birden fazla (.*?) kullanınca kaçıncıyı seçmek istediğimiz için kullanırız. Biz birinciyi seçtiğimiz için 1 i kullanacağız. Sırasıyla çektiğimiz içerikleri değişkenlere atayalım.

$baslikkullan=$baslikfonksiyon[1];
$icerikkullan=$icerikfonksiyon[1];
$kategorikullan=$kategorifonksiyon[1];

Tarihi almak içinse;

$tarih=date('d/m/y');

kodunu kullanalım ve bugünün tarihini alalım.

Şimdi de kayıt için gerekli şartları sorgulayalım. Eğer uyuyorsa kaydetsin. Uymuyorsa geçsin, ya da yanlışımızı görelim.

if($baslikkullan=="" ||  $icerikkullan==""|| $kategorikullan==""){
echo"Böyle bir yazı yoktur.";
}else{
$yazisayi=mysql_num_rows(mysql_query("SELECT * FROM yazilar WHERE baslik='$baslik'"));
if($yazisayi==1){
echo"Bu yazı önceden eklenmiştir.";
}else{
$tarih=date('d/m/y');
$yaziyukle=mysql_query("INSERT INTO yazi (baslik,icerik,tarih,kategori)VALUES('$baslikkullan','$icerikkullan','$tarih','$kategorikullan')");
if($yaziyukle){
echo"Yazı başarıyla kaydedildi";
}
}
}

Bu yazdığımız kodun anlamı eğer başlık,yazı ve kategori boşsa böyle bir yazı bulunmamaktadır de, eğer yazıdan bir tane daha varsa bu yazı önceden eklenmiştir de, eğer yazı başarıyla eklenirse yazı başarıyla kaydedildi de dir. şimdi bütün kodlarımızı birleştirelim.

<?
include('db.php');
$site=file_get_contents("http://blogyaziyoruz.biz/botdeneme/Makaleler.php?makaleid=15");
$baslik='#<h2 class="yazibaslik">(.*?)</h2>#si';
$icerik='#<article>(.*?)</article>#si';
$kategori='#<div class="kategori">(.*?)</div>#si';

preg_match($baslik,$site,$baslikfonksiyon);
preg_match($icerik,$site,$icerikfonksiyon);
preg_match($kategori,$site,$kategorifonksiyon);

$baslikkullan=$baslikfonksiyon[1];
$icerikkullan=$icerikfonksiyon[1];
$kategorikullan=$kategorifonksiyon[1];

if($baslikkullan=="" ||  $icerikkullan==""|| $kategorikullan==""){
echo"Böyle bir yazı yoktur.";
}else{
$yazisayi=mysql_num_rows(mysql_query("SELECT * FROM yazilar WHERE baslik='$baslik'"));
if($yazisayi==1){
echo"Bu yazı önceden eklenmiştir.";
}else{
$tarih=date('d/m/y');
$yaziyukle=mysql_query("INSERT INTO yazi (baslik,icerik,tarih,kategori)VALUES('$baslikkullan','$icerikkullan','$tarih','$kategorikullan')");
if($yaziyukle){
echo"Yazı başarıyla kaydedildi";
}
}
}

?>

ama kodlarımız sadece bir yazıyı çekmek için kullanılmayacak bu yüzden botumuzun kendi başına yürümesi için birkaç ekleme yapalım. Yapacağım eklemeler, alınacak sitenin idsi ile php çalıştırılırken kullanılan id yi aynı yapmak. Her içerik eklendiğinde idyi 1 artırmak. Kodların eklenmiş haline bakalım.

<?

include('db.php');
$id=$_GET['id'];
$site=file_get_contents("http://blogyaziyoruz.biz/botdeneme/Makaleler.php?makaleid=$id");
$yeniid=$id+1;
$baslik='#<h2 class="yazibaslik">(.*?)</h2>#si';
$icerik='#<article>(.*?)</article>#si';
$kategori='#<div class="kategori">(.*?)</div>#si';

preg_match($baslik,$site,$baslikfonksiyon);
preg_match($icerik,$site,$icerikfonksiyon);
preg_match($kategori,$site,$kategorifonksiyon);

$baslikkullan=$baslikfonksiyon[1];
$icerikkullan=$icerikfonksiyon[1];
$kategorikullan=$kategorifonksiyon[1];

if($baslikkullan=="" ||  $icerikkullan==""|| $kategorikullan==""){
echo"Böyle bir yazı yoktur.";
echo"<meta http-equiv="refresh" content="0.1;URL=http://botumzundizini.com/index.php?id=$yeniid">";
}else{
$yazisayi=mysql_num_rows(mysql_query("SELECT * FROM yazilar WHERE baslik='$baslik'"));
if($yazisayi==1){
echo"Bu yazı önceden eklenmiştir.";
echo"<meta http-equiv="refresh" content="0.1;URL=http://botumzundizini.com/index.php?id=$yeniid">";
}else{
$tarih=date('d/m/y');
$yaziyukle=mysql_query("INSERT INTO yazi (baslik,icerik,tarih,kategori)VALUES('$baslikkullan','$icerikkullan','$tarih','$kategorikullan')");
if($yaziyukle){
echo"Yazı başarıyla kaydedildi";
echo"<meta http-equiv="refresh" content="0.1;URL=http://botumzundizini.com/index.php?id=$yeniid">";
}
}
}

?>

Evet artık botumuzu http://botumzundizini.com/index.php?id=1 ile çalştırırsak 1 numaralı makaleyi çekip kaydedecek ve ikinci makaleye geçecek. Sonra üç dört ve sonsuza kadar devam edecek eğer sitedeki makale sayısını biliyorsak örneğin 700 makale varsa

if($id!=700){
}

kodunu ekleyerek botun otomatik durmasını sağlayabilirsiniz. Anlamadığınız bir nokta olursa sorun.

Not: Lütfen içeriği alacaksanız kaynak belirtin.

[Toplam:2    Ortalama:10/5]