Merhaba arkadaşlar , mobilhanem.com için hazırladığımız Php Eğitimlerinde bu ders php de en popüler konu olan php ile (file_get_contents metodu ile) bot hazırlama kısmına gireceğiz. Öncelikle nedir bu bot biraz bahsedelim.
Bot bizim yerimize bir işi yapan yazılımdır. Örneğin mobilhanem’in yazılarını bir txt dosyasına başlık, resim url ve içerik olarak kaydedeceğimizi varsayalım. Eğer botumuz yok ise bu işi elimiz ile tek tek yapmamız gerekiyor ama bot hazırlarsak botumuzu çalıştırdığımızda eğer düzgün çalışan bir botumuz varsa bize tüm yazıları bir txt dosyası halinde verir. Bot yazmayı iyi kavrarsanız çok rahat bir şekilde harçlığınızı çıkarabilirsiniz 🙂 Bot yapmayı daha iyi anlayabilmeniz için bir önceki dersimiz olan Php Dersleri – Regular Expression dersimizi incelemenizi öneririm.
Php file_get_contents() Fonkisyonu
file_get_contents() fonksiyonu parametre olarak bir web url alır ve bu adresteki veriyi geri döndürür. file_get_contents() fonksiyonunun opsiyonel olan parametreleri de var. Detaylı bilgi için Php.net – file_get_contents adresine bakabilirsiniz.
$veri = file_get_contents(“http://mobilhanem.com”); mobilhanem linkinden gelen html veriyi $veri değişkenine atar.
Bir Örnek Yapacak Olursak:
echo file_get_contents(“http://mobilhanem.com”); ?> |
Kodu çalıştırdığımızda ekranda mobilhanem’in tasarımını göreceksiniz.
Şimdi yavaş yavaş bot yazma kısmına giriş yapalım. mobilhanemdeki yazıları kendi sitemizde göstermek istediğimizi varsayalım. (İzinsiz böyle birşey yapmak kesinlikle etik değil). Yazılara ait başlık, resim ve içeriği alalım.
1-Php İle Bot Yazmaya Giriş
Öncelikle web sitesine bağlanalım.
$url = “https://www.mobilhanem.com/test/php-dersleri/”; // web Site URL $veri = file_get_contents($url); // verimiz geldi ?> |
İlerlleyen zamanlarda site teması değişir ise dersimiz güncelliğini kaybetmesin diye url değerini biz sabit bir html yaptık. Botların kötü taraflarından biri botunu yazdığımız sitenin tasarımı değişince botun çalışmamasıdır.
2- Regex İle Yazılara Ulaşma
Artık karşıdaki sitenin html kısmı elimizde var şimdi ordan sadece işimize yarayacak kısmı yani contentteki yazıları regex ile alalım. Bot hazırlamak için öncelikle karşıdaki sitenin html kısmını incelememiz gerekir. Biz mobilhaneme baktığımızda yazılar için aşağıdaki şekilde bir html mevcut.
Temel Java Dersleri – Paket Yapısı ve Import Kavramı
Merhaba arkadaşlar, mobilhanem.com üzerinden anlattığımız/yayınladığımız derslerimize Temel Java Dersleri konu başlığı altında Paket Yapısı ve Import Kavramı ile devam ediyoruz. Nesne ve Sınıf yapısı nı öğrendikten sonra sonraki aşamalara geçmek için paket yapısından mutlaka haberdar olmak gerekmektedir. Özellikle bir sonraki dersimizde anlatacağım erişim belirleyicileri daha …
Devamını oku
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<article class=“post clearfix blog_2 post-7467 type-post status-publish format-standard has-post-thumbnail hentry category-java-dersleri tag-import tag-import-kavrami tag-java tag-java-import tag-java-import-kavrami tag-java-package tag-java-paket-yapisi tag-nesne-yonelimli-programlama tag-package tag-paket tag-static-metot tag-temel-java-dersleri” role=“article” itemscope=“” itemtype=“http://schema.org/Article”> <div class=“post-inner”> <h2 itemprop=“name” class=“post-title”> <span class=“post-type”><i class=“icon-picture”></i></span> <a itemprop=“url” href=“https://www.mobilhanem.com/java-paket.html” title=“Temel Java Dersleri – Paket Yapısı ve Import Kavramı” rel=“bookmark”>Temel Java Dersleri – Paket Yapısı ve Import Kavramı</a></h2> <div class=“post-img post-img-12”> <a href=“https://www.mobilhanem.com/java-paket.html” title=“Temel Java Dersleri – Paket Yapısı ve Import Kavramı” rel=“bookmark”><img alt=“Temel Java Dersleri – Paket Yapısı ve Import Kavramı” width=“250” height=“160” src=“./index_files/temeljavaderslerimh-250×160.png”> </a> </div> <div class=“post-meta”> <span class=“meta-author” itemprop=“author” rel=“author”><i class=“icon-user”></i> <a href=“https://www.mobilhanem.com/author/eren/” title=“Eren Başaran”>Eren Başaran</a> </span> <span class=“meta-date” datetime=“2017-08-02T13:48:59+00:00” itemprop=“datePublished”><i class=“fa fa-calendar”></i>Ağustos 2 , 2017</span> <span class=“meta-categories”><i class=“icon-suitcase”></i><a href=“https://www.mobilhanem.com/java-dersleri/” rel=“category tag”>Java Dersleri</a></span> <span class=“meta-comment”><i class=“fa fa-comments-o”></i><a href=“java-paket.html#disqus_thread” data–disqus–identifier=“7467 https://www.mobilhanem.com/?p=7467”>0 Comments</a></span> <span class=“post-view”><i class=“icon-eye-open”></i>290 görüntüleme</span></div> <div class=“post-content”> <p>Merhaba arkadaşlar, mobilhanem.com üzerinden anlattığımız/yayınladığımız derslerimize Temel Java Dersleri konu başlığı altında Paket Yapısı ve Import Kavramı ile devam ediyoruz. Nesne ve Sınıf yapısı nı öğrendikten sonra sonraki aşamalara geçmek için paket yapısından mutlaka haberdar olmak gerekmektedir. Özellikle bir sonraki dersimizde anlatacağım erişim belirleyicileri daha ...</p> <a href=“https://www.mobilhanem.com/java-paket.html” title=“Temel Java Dersleri – Paket Yapısı ve Import Kavramı” rel=“bookmark” class=“post-read-more button color small”>Devamını oku</a></div> </div> </article> |
Burada yazının kapsayıcı elemanı article olduğu için patterni ona göre yazıyoruz.
$pattern = ‘@
@si’;
preg_match_all($pattern,$veri,$yazilar);
print_r($yazilar[0]);
$pattern = ‘@ @si’;
preg_match_all($pattern,$veri,$yazilar);
print_r($yazilar[0]); |
Regex kısmında ise konuşma dili ile tercüme edersek şöyle bir ifade yazdık.
<article (burada herşey olabilir)> (burada herşey olabilir) </article> |
şeklinde bir regex patterni yazdık. Şimdi bu postların resim ve başlığı alalım.
3- Regex İle Yazı İçerisindeki Verilere Ulaşma
Resim ve başlığı almak için yazılarda yaptığımız gibi yine htmli incelememiz gerkir.
$posts = array();
for($i=0;$i
preg_match($resimPattern,$yazilar[0][$i],$resim);
// posts diye bir diziye verileri atalım daha sonra kendimiz ayarlayalım.
$posts[$i][“baslik”] = $baslik[3];
$posts[$i][“post_url”] = $baslik[1];
$posts[$i][“resim”] = $resim[2];
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$posts = array(); for($i=0;$i<count($yazilar[0]);$i++) { // başlığı ve url alıyoruz. $baslikPattern = ‘@(.*?)@si’; preg_match($baslikPattern,$yazilar[0][$i],$baslik); // resimi alıyoruz. $resimPattern = ‘@@si’; preg_match($resimPattern,$yazilar[0][$i],$resim); // posts diye bir diziye verileri atalım daha sonra kendimiz ayarlayalım. $posts[$i][“baslik”] = $baslik[3]; $posts[$i][“post_url”] = $baslik[1]; $posts[$i][“resim”] = $resim[2]; } |
Burada biz ne kadar regex kuralı koyarsak dizi boyutu o kadar artar bu diziyi print_r ile ekrana yazdırarak hangi veri işinize yarıyor, ne gibi veriler geliyor görebilirsiniz. Ben kısa olması açısından test edip gerekli kısımları ekledim. Şimdi botumuzda mobilhanemden çektiğimiz yazıları listeleyelim.
4- Alınan Verileri Ekranda Gösterme
Aldığımız verileri for veya foreach döngüsü kullanarak aşağıdaki şekilde ekranda gösterebiliriz.
/// alınan verileri ekranda gösteriyoruz.
echo ‘
- ‘;
- ‘.$post[“baslik”].”
foreach( $posts as $post) {
echo ‘
“;
}
echo ‘
‘;
/// alınan verileri ekranda gösteriyoruz. echo ‘
foreach( $posts as $post) { echo ‘ “; } echo ‘ ‘; |
Kodu çalıştırdığımızda resimlerin görünmediğini ve linklerin bozuk olduğunu fark edeceksiniz. Bu hatanın sebebi ise bağlandığımız sitenin relative url kullanıyor olması. Şimdi küçük dokunuşlarla hatamızı düzeltmeye çalışalım. Kodu yazmadan önce şöyle geçmiş derslerimizi kafamızda canlandıralım. Hangi fonksiyon bizim işimizi görür ? Evet evet doğru bildiniz tabiki str_replace fonksiyonu ile düzenleme yapabiliriz 🙂 Kodumuzun düzenlenmiş hali:
/// alınan verileri ekranda gösteriyoruz.
echo ‘
- ‘;
- ‘.$post[“baslik”].”
foreach( $posts as $post) {
echo ‘
“;
}
echo ‘
‘;
/// alınan verileri ekranda gösteriyoruz. echo ‘
foreach( $posts as $post) { echo ‘ “; } echo ‘ ‘; |
Url kısmında yaptığımız değişikliğe bakarsanız burada post_detay.php=url= şeklinde bir yapı kullandık. Bu yapıyı Php Dersleri – GET ve POST Örnekleri dersimizde görmüştük.
Şimdi post_detay.php sayfamızı hazırlayıp sayfamızda gelen linkteki veriyi gösterelim.
5- Linke Tıklanınca Post Detayını Gösterme
Post detayını gösterirkende yine htmli inceleyerek gerekli regex patternlerini yazmamız gerekir.
$urlGelen = isset($_GET[“url”]) ? addslashes($_GET[“url”]) : “”; // eğer bir gelen url varsa alalım yoksa boş kalsın.
$url = “https://www.mobilhanem.com/test/php-dersleri/$urlGelen”; // web Site URL
$veri = file_get_contents($url); // verimiz geldi
// şimdi içerikten başlık ve yazıyı alalım.
// başlığı aldık
$baslikPattern = ‘@
(.*?)
@si’;
preg_match($baslikPattern,$veri,$baslik);
$yaziPattern = ‘@
preg_match($yaziPattern,$veri,$yazi);
?>
=strip_tags($baslik[0])?>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$urlGelen = isset($_GET[“url”]) ? addslashes($_GET[“url”]) : “”; // eğer bir gelen url varsa alalım yoksa boş kalsın.
$url = “https://www.mobilhanem.com/test/php-dersleri/$urlGelen”; // web Site URL $veri = file_get_contents($url); // verimiz geldi
// şimdi içerikten başlık ve yazıyı alalım.
// başlığı aldık $baslikPattern = ‘@ (.*?)@si’; preg_match($baslikPattern,$veri,$baslik);
$yaziPattern = ‘@ (.*?)
@si’;
preg_match($yaziPattern,$veri,$yazi);
?> <div style=“width:700px;margin:0 auto;”> <h1>=strip_tags($baslik[0])?></h1> echo $yazi[0];?> </div> |
Evet arkadaşlar eğlenceli bir dersin sonuna geldik. Dersi bitirdiğinize göre artık freelancer sitelerde ücretli bot yazılır gibi ilanlar verebilirsiniz :))
Demo İçin : Bot Uygulaması Demo bakabilirsiniz.
İndirmek İçin: Github – Mobilhanem adresinden indirebilirsiniz.
Bir sonraki dersimizde görüşmek üzere 🙂
Php ile bot hazırlama konusu ile ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı yine konu altından ve Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.
30