PHP Bot (Sitegezer) İle Başka Sitelerden Veri Çekmek

Merhaba arkadaşlar bugunki makalemde başka sitelerdeki bilgilere nasıl ulaşabiliriz ve onları nasıl veritabanımıza kaydettirriz. Bunun hakkında biraz soru geldi bende böyle bir makale yazmaya ihtiyaç duydum.
İlk olarak phpmyadmin ile bir data veritabanı olusturdum, daha sonra içinede 3 alanlı bir tablo yaptım . Tablo adı fikralar ve alanları sırasıyla id,f_baslik,f_fikra
id int olcak
diğerlerinin text yapamak yeterlidr.
Öncelikle MySql ile bağlantımızı oluşturacak ayar.php dosyamızı oluşturalım. Kodlarımızın yanına gerekli açıklamaları yazacağım.

[ad#orta]

$dbhost		="localhost";
$dbuser		="root";//kullanım adımda root
$dbpass		="123";//benim şifrem 123 olduğu için 123 yazıyorym
$dbadi		="data";//Burada phpmyadmin kısmından oluşturulan veri tabanının adı olacak
$baglanti=@mysql_connect($dbhost,$dbuser,$dbpass) or die("Veri tabanı ile bağlantı sağlanamıyor!");
mysql_select_db($dbadi,$baglanti) or die("Veri tabanına bağlanılamadı!");

Şimdi hosta ve veritabanımza bağlantımız sağlıklı bir şekilde gerçekleştiyse. Bot yazımına geçebiliriz. Aşagidaki php dosyasını bot_kayit.php olarak kayit ettim.

include("ayar.php");//Burası mysql ile bağlantıyı yapan kısımdır ayar.php den kodlarını ayarlayabilrisin.
 
$site=file_get_contents("http://siteadi.com"); // Buraya sitenin adını yaziyoruz
$baslikalan='#<div>(.*?)<\/div>#si';//Burası çekeceğimiz hangi aralık olacak siz isterseniz buraya title veya id'li bir div veya resim,video ne çekicek iseniz onun ilgili kısmını yaabilirsiniz. (.*?) bizim bu div içindeki bütün verileri almamızı sağlıyor.
preg_match($baslikalan,$site,$baslikfonksiyon);//Veriyi bölerek burdan istediğimizi çekiyoruz.
$fikraalan='#<div>(.*?)<\/div>#si';//Buralar aynı yuarı ile
preg_match($fikraalan,$site,$fikrafonksiyon);
 
$fikra=$fikrafonksiyon[1];//Bu çektigimiz veriler preg_match fonksiyonuyla bir diziye aktarılır bu yüzden dizidekileri bir degiskene aktariyoruz. Ve öyle kullanım kolay olucaktir.
$baslik=$baslikfonksiyon[1];
 
echo " $baslik </br> $fikra ";//Bunu göstermek veya göstermemek senin elinde. Verinin gelip gelmediğini kontrol ediyoruz.
 
$sorgu=mysql_query("SELECT * FROM fikralar WHERE f_baslik='$baslik'");//Burada daha önceden aynı fıkra adıyla kayıt olan varmı diye sorguluyoruz.
if(mysql_num_rows($sorgu)>0)//Eğer 0 dan büyükse önceden aynı fıkra adı ile kayıt olan var demektir.
{
echo "$baslik ile kayıtlı fıkra bulunmaktadır. Lütfen farklı fıkra adı giriniz.";
}
else
{
$sor=mysql_query("INSERT INTO fikralar(f_baslik,f_fikra) values('$f_baslik','$f_fikra')");//Kayıt yapan sorgu
if($sor)//Kayıt yapıldımı diye bakıyoruz
{
echo "Kayıt işlemi başarıyla gerçekleşti";
}
else
{
echo "HATA! Kayıt yapılamıyor..";
}
}

Yukarıda sadece sitedeki bir adresten bir tane içeriği çeker. Tabiki botun 1 tane için olması çok saçma gelebilir. Bunu geliştirmek çok kolaydır. Bir döngü ile eğer fıkralar sıralı bir şekilde geliyorsa,
Örneğin fikra1,fikra2 vs. şeklinde bunu bir döngü ile sürekli arttırarak bütün fıkraları çekebilir ve kaydedebiliriz.
Bu daha çok çok çok geliştirebilir.
Arkadaşlar elbetteki bu makale çok basit bir şekilde bot yapımını ve kaydetme işlemini anlatmış bulunmaktayım. Çünkü bu işin temelini size verebileyim ki siz de kendinizi geliştirme imkanı bulubalin. Sorularınızı yorumlar kısmından sorabilirisiniz.

Hasan Huseyin İŞLER hakkında

Lise yıllarında programlama ile tanışan ve Q-Basic, Pascal, C başlangıç seviyesinde öğrenenir. Üniversite de TEF-BSÖ okurken diğer dillerin yanı sıra PHP'de kendini geliştirmeye devam ederek bunların yanında CSS, JS ve Wordpress sistemiyle ilgilenir. www.phpsorunu.com'un da yöneticisi ve yazarlarındandır.
Bu yazı Php kategorisine gönderilmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.

PHP Bot (Sitegezer) İle Başka Sitelerden Veri Çekmek için 32 cevap

  1. Ramazan der ki:

    Merhabalar Oncelikle Cok Guzel Bir Konu Oldugunu Ve Guzel Bir Anlatım Oldugunu Soylemeliyim. Benim Sorum Su;

    Ben Guvenlik Parola Korumalı Bir Panel'den .Php Sayfalarını Cekmek İstiyorum Fakat Bunun Guvenli Olup Olmadıgını Bilmiyorum. Bana Bu Konuda Acıklık Getırırsenız Sevinirim.

    Simdiden Tesekkurler…

  2. Ramazan der ki:

    Dosyaları Cekmem Mumkunmu Yani Bir Takıma?

  3. Bir hosstan php uzantılı bir dosyayı çektiğinde gelen dosya boş gözükür. Yani amacın o dosyayı çekip kodlarını kendi hostunda çalıştırmaksa zaten dosyanın bulunduğu host kendisi yorumlar anca öyle gönderir. Yani hiç bir şekilde dosyadaki kodları çekme imkanı yoktur. Chmod ayarlarını değiştirmekte kar etmemektedir. sonuç yine aynı olacaktır. Kısacası php kodlarını çekince yorumlar ve yorumlanmış php sayfasındada php kodları içermez. Kısacası çekmen mümkün değildir bilgilerim doğrultusunda. Umarım yardımcı olabilmişimdir.

  4. sohbet der ki:

    Çok güzel birmakale ve çalışma olmuş ama benim sorum şu siz resim video vs vs gibi şeyler çekebilirsiniz demişsiniz ama ben örneğin bir haber sitesinden bilgi çekmek isitiyorum ve çekeceğim bilgi diyelimki div ler içinde ama o sayfada 10 larca div var hangi divler arasındaki bilgiyi çekeceğimi nasıl bulabilirim . ? Şimdiden teşekkürler.

  5. Samet der ki:

    "Preg_match"yerine daha basit olan "Explode" kullanılabilir, veriyi daha kolay bölmek ve işin mantığını anlamak bakımından.

  6. cet rulet der ki:

    yorum yapan bot ta yapsan ıyı olur be keske sneın kadar php kodu bılgım olsaydı usenmez yapardım sayın admınım otomatık backlınk atan bot yapımı falan cok ta ıyıye satarsın

  7. Her şeyin bir zamanı vardır elbet ama ben bu yorum yapan botlara gıcık oluyorum…. Öle bir şeyle uğraşmam bile… Site sahiplerine yazık…

  8. berk der ki:

    merhaba

    $baslikalan='#(.*?)#si';

    bu kısmı anlamadım tam olarak nasıl düzenliyoruz burayı

  9. O divin içinde kalan kısım makalenin başlığıdır. Oradaki düzenlemeleri PHP REGEX diye bakabilirsin. Orada kullanılan işaretler ve anlamlarını regex konusuna girer. google de araştırarak bulabilirsin.

  10. berk der ki:

    yanıt için teşekkürler, ancak ben php konusunda uzman değilim. arattığımda açıklayıcı bilgiye ulaşamadım ya da ben anlamıyorum. burada anladığım çekmek istediğin sayfadaki div kısmının id si girilecek. ama nasıl? baska düzenleme yapacağımı sanmıyorum bu haliyle id yi nasıl yazarım onu öğrensem yeter bana.

    @Hasan Huseyin İŞLER

  11. susak der ki:

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/bot_kayit.php on line 17

    bu hatayı alıyorum kayıt yapmıyor :(

    • hsnhsynisler der ki:

      17. satır veya 16. satıra bak oradaki sorgu da hata var $ değişken basına koymamıs olabilirsin kodlarını göremeden tam olarak bişey de diyemiyorum.

      • susak der ki:

        Evet acemilik $ nin tekini kaçırmışım yardım için teşekkürler çok güzel çalışıyor. Şimdi kodların üstünde denemeler yapıp geliştirmeye çalışıyorum.

  12. fsdf der ki:

    çok teşekkürler.
    şöyle bir şey olsa mesela ziyaretçi sitemizde arama yaptı. Arama sonuçlarına beğendiğimiz siteleri de dahil etsek yani ziyaretçimiz bizim istediğimiz yere gitse. Ya da bir kaç sitemiz varsa onlardan bot yoluyla mı arama yaparız.

  13. Murat der ki:

    Aynen denileni yaptin ancak kayit yapmadi.
    Daha sonra

    $sor=mysql_query("INSERT INTO fikralar(f_baslik,f_fikra) values('$f_baslik','$f_fikra')");//Kayıt yapan sorgu

    satirini

    $sor=mysql_query("INSERT INTO fikralar(f_baslik,f_fikra) values('$baslik','$fikra')");//Kayıt yapan sorgu
    diye degistirdim sorunsuzca kayit yapmaya basladi. Tesekkürler

  14. Oğuzhan Aslan der ki:

    Güzel bir konu olmuş. Kayıt etme konusunada değinirseniz çok iyi olur.

  15. deniz özmen der ki:

    bir Sorunum var kodlar hatalı yazılmıs Galiba bir kaç kod ekledim ama Sunu sormam lazim

    Bu bot_kayit.php
    <?php
    include("ayar.php");//Burası mysql ile bağlantıyı yapan kısımdır ayar.php den kodlarını ayarlayabilrisin.

    $site=file_get_contents("http://eterna.com.tr/eterna/&quot;); // Buraya sitenin adını yaziyoruz
    $baslikalan='#<div>(.*?)</div>#si';//Burası çekeceğimiz hangi aralık olacak siz isterseniz buraya title veya id'li bir div veya resim,video ne çekicek iseniz onun ilgili kısmını yaabilirsiniz. (.*?) bizim bu div içindeki bütün verileri almamızı sağlıyor.
    preg_match($baslikalan,$site,$baslikfonksiyon);//Veriyi bölerek burdan istediğimizi çekiyoruz.
    $fikraalan='#<div>(.*?)</div>#si';//Buralar aynı yuarı ile
    preg_match($fikraalan,$site,$fikrafonksiyon);

    $fikra=$fikrafonksiyon[1];//Bu çektigimiz veriler preg_match fonksiyonuyla bir diziye aktarılır bu yüzden dizidekileri bir degiskene aktariyoruz. Ve öyle kullanım kolay olucaktir.
    $baslik=$baslikfonksiyon[1];

    echo " $baslik $fikra ";//Bunu göstermek veya göstermemek senin elinde. Verinin gelip gelmediğini kontrol ediyoruz.

    $sorgu=mysql_query("SELECT * FROM fikralar WHERE f_baslik='$baslik'");//Burada daha önceden aynı fıkra adıyla kayıt olan varmı diye sorguluyoruz.
    {
    echo "$baslik ile kayıtlı fıkra bulunmaktadır. Lütfen farklı fıkra adı giriniz.";
    }
    {
    $sor=mysql_query("INSERT INTO fikralar(f_baslik,f_fikra) values('$f_baslik','$f_fikra')");//Kayıt yapan sorgu
    if($sor)//Kayıt yapıldımı diye bakıyoruz
    {
    echo "Kayıt işlemi başarıyla gerçekleşti";
    }
    else
    {
    echo "HATA! Kayıt yapılamıyor..";
    }
    }

    Diğeri ise ayarlar
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
    <html xmlns="http://www.w3.org/1999/xhtml"&gt;
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <?php
    $dbhost="localhost";
    $dbuser="";//kullanım adımda root
    $dbpass="";//benim şifrem 123 olduğu için 123 yazıyorym
    $dbadi="";//Burada phpmyadmin kısmından oluşturulan veri tabanının adı olacak
    $baglanti=@mysql_connect($dbhost,$dbuser,$dbpass) or die("Veri tabanı ile bağlantı sağlanamıyor!");
    mysql_select_db($dbadi,$baglanti) or die("Veri tabanına bağlanılamadı!");
    ?>

    Ben fıkra değilde karşıdaki wordpress siteyi komple çekmek istiyorum resimleri ile tüm bilgileri ile birlikde yardımcı olurmusunuz

  16. Talha der ki:

    güzel bir paylaşım olmus kardeşim ellerine saglık fakat ben bişey sorucaktım aslında o soruda sorulmus fakat cevap pek net değil gibi geldi bana .. !!
    Soru şu : Çok güzel birmakale ve çalışma olmuş ama benim sorum şu siz resim video vs vs gibi şeyler çekebilirsiniz demişsiniz ama ben örneğin bir haber sitesinden bilgi çekmek isitiyorum ve çekeceğim bilgi diyelimki div ler içinde ama o sayfada 10 larca div var hangi divler arasındaki bilgiyi çekeceğimi nasıl bulabilirim . ? Şimdiden teşekkürler ..

    Benim sorumda sadece örnekli açıklaması … Şimdiden teşekkür ederim ..

  17. hasan der ki:

    merhabalar;

    Başka bir sitedeki tablo halindeki veriyi nasıl çekeriz yardımcı olurmusunuz.

    Ördek olarak: adı, soyadı, doğum tarihi, doğum yeri, yaşı vb. başlıklrı altında 50 adet isim sıralı olsun bu isimleri nasıl alabiliriz ve sitede nasıl tablo halinde gösterebiliriz. Yardımcı olurmusunuz ?

  18. melih der ki:

    Merhalar hocam.Ben html kod ile youtube channel embed yapmaya çalışıyorum web siteme.fakat bir türlü beceremedim.playlist olarak almayı başardım.ama bu durumda playlist dinamik olmuyor.yani youtubedaki channel ıma video yüklediğim zaman sitemdeki playliste gelmiyor.bu konuda yardımcı olabilirmisiniz.? iyi günler.

  19. abdulkadir der ki:

    bende bir bot sistemi var ama artık çalışmıyor onu nasıl düzeltebilirim. bana yardımcı olabilir misiniz ? lütfen çok makbule geçer… abdulkadirplt@gmail.com burdan bana ulaşabilirsiniz.

  20. hakan der ki:

    Bilmediğimden soruyorum.asp ile kodlanmış bir siteden php bot ile tüm ürünleri ve resimleri vs. çekmek mümkünmüdür?

  21. qpcellat der ki:

    ilgilenirsen senden bişey rica edicem

  22. qpcellat der ki:

    bu konuda yardımınıza ihtiyacım var msn mi ekleyin facede http://www.facebook.com/qp.cellat.5 burdayım bi konusalım olmazsa ücretli bi işimiz olcak senle :D

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>