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.
$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
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.
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…
Dosyaları Cekmem Mumkunmu Yani Bir Takıma?
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.
Ç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.
"Preg_match"yerine daha basit olan "Explode" kullanılabilir, veriyi daha kolay bölmek ve işin mantığını anlamak bakımından.
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
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…
merhaba
$baslikalan='#(.*?)#si';
bu kısmı anlamadım tam olarak nasıl düzenliyoruz burayı
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.
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
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
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.
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.
ç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.
Yapılabilir.
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
Güzel bir konu olmuş. Kayıt etme konusunada değinirseniz çok iyi olur.
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/"
; // 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">
<html xmlns="http://www.w3.org/1999/xhtml">
<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
Hocam aslında işinize yarabilecek tüm kodlar yukarıda var. Ayrıca diğer bir yazı da da http://www.phpsorunu.com/php-ile-bot-yapimi-dom-t… ayrıntılı şekilde WordPress siteden çekim de anlatıldı.
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 ..
Bu konuda bir çalışma yapabilmeniz için REGEX bilgisine sahip olmanız gerekir. Google'de aratın güzel kaynaklar var. Daha sonra istediğiniz örneği yaparsınız.
Saolasın hocam ama bu senin dediğin bana bir faydası olmadı yaptıgın örneği döngüye soksak cekebilirmiyiz ne kadar embed varsa .. ???
Dene hocam, bu işler bol bol örnek yaparak öğrenilir.