
İçerikler
Bu dersimizde, PHP ile vizyonda yer alan filmlerin bilgilerini çektiğimiz bir bot hazırlayacağız. Vizyonda yer alan film bilgilerine ulaşmak için sinemalar.com sitesini kullanacağız. Hazırlayacağımız bot ile vizyonda yer alan filmin; afişini, Türkçe ismini, orijinal ismini ve tür’ünü alacağız.
Bu dersin sonunda yukarıdaki gibir bir çıktı elde etmiş olcağız. Tabi ilk olarak basit bir şekilde ekran çıktısını alacağız. Sonrasında düzenleme yaparak biraz daha kullanılabilir bir hale getirmiş olacağız.
Önemli: Hazırladığımız bu but PHP Programlama dilini ve cURL mantığını anlayabilmeniz amacıyla oluşturulmuştur.
Bot İçin Web Sitesine Bağlanma
Bot hazırlamanın ilk adımı web sitesine bağlanarak gerçekleşir. Hazırlayacağınız bu bağlantı için cURL kullanmanız, bir çok engeli aşmanızı sağlayacaktır. Ayrıca normal bir kullanıcı gibi site ziyaret edileceği için engellenilmenizin de önüne geçecektir.
function baglan($a){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $a); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $isle = curl_exec($ch); curl_close($ch); return $isle; }
Yukarıda yer alan baglan() fonksiyonu ile belirlenen URL değerine bağlanıp kaynak kodlarının getirilmesini sağlıyoruz. Bu fonksiyon ile sinemalar.com sitesine bağlanıp, kaynak kodlardan işimize yarayan yerleri alarak botumuzu hazırlamış olacağız. Şimdi de ikinci adıma geçerek gerekli bilgilerin alınmasını sağlayalım.
Vizyondaki Filmleri Listeleme
Vizyondaki filmlerin listesini yine bir fonksiyon ile yürüteceğiz. Bu fonksiyonda vizyondaki filmlerin yayınlandığı sayfaya bağlanıp, film ile iligi olan değerleri alacağız. Elde etmiş olduğumuz bu verileri de bir diziye atarak tek bir dizi üzerinden verileri listelendirmiş olacağız.
function vizyondakiler(){ $link = baglan("https://www.sinemalar.com/filmler/vizyondaki"); ## Regex desenler $afis = '@<div class="thumbnail">.*?<img src="(.*?)" alt=".*?">.*?</div>@si'; $bilgiler = '@<div class="title left">.*?<a href="https://www.sinemalar.com/.*?">(.*?)</a>.*?<span class="side-info">(.*?)</span>.*?<span class="side-info"><strong>Tür: </strong>(.*?)</span>.*?</div>@si'; ## verileri alıyoruz. preg_match_all($afis,$link,$afisBas); preg_match_all($bilgiler,$link,$bilgilerBas); ## Verileri düzenleyip bir dizide topluyoruz. for($a=0; $a < count($afisBas["1"]); $a++){ $vizyon[$a]["afis"] = $afisBas["1"][ $a ]; $vizyon[$a]["isim"] = $bilgilerBas["1"][ $a ]; $vizyon[$a]["orijinal"] = $bilgilerBas["2"][ $a ]; $vizyon[$a]["tur"] = $bilgilerBas["3"][ $a ]; } return $vizyon; }
Yukarıda yer alan fonksiyonda vizyondakiler() isimli bir fonksiyon yer almaktadır. Bu fonksiyonda ilk olarak $link değişkeni ile vizyondaki filmlerin listelendiği sayfaya bağlanıyoruz. Sitede listelenen vizyondaki filmlerin afişlerini almak için $afis değişkenindeki deseni kullanıyoruz. İsim ve tür gibi değerler için de $bilgiler değişkenini kullanıyoruz. Bu değişkenleri preg_match_all() fonksiyonu ile desendeki değer karşılıklarını alıyoruz.
Vizyondaki filmler değerlerini aldığımızda iki farklı dizi olduğu için bunu tek bir dizide topluyoruz. Bilgilere ulaşmak istediğimizde daha sade bir sonuç elde etmiş olacağız. Tüm bilgileri $vizyon değişkenine aktarıp return ile çıktı alıyoruz.
Vizyondaki Filmler Boyu Kullanımı
Hazırlamı olduğumuz botun kullanımı oldukça kolaydır. Link değerini bile dışarıdan almadığımız için direkt fonksiyonu kullanmak yeterli olacaktır.
echo '<pre>'; print_r( vizyondakiler() ); echo '</pre>';
Yukarıda yer aldığı gibi print_r() ile vizyondakiler() fonksiyonunu çalıştırıyoruz. Fonksiyonu print_r() ile yazdırmamızın nedeni de sonuçların dizi(array) olarak çıktı vermesidir. Sonuç ise aşağıdaki gibi olacaktır.
Array ( [0] => Array ( [afis] => https://img01.imgsinemalar.com/images/afis_buyuk/s/skandal-1571382381.jpg [isim] => Skandal [orijinal] => Bombshell [tur] => Biyografi, Dram ) [1] => Array ( [afis] => https://img01.imgsinemalar.com/images/afis_buyuk/j/jumanji-the-next-level-1569412475.jpg [isim] => Jumanji: Yeni Seviye [orijinal] => Jumanji: The Next Level [tur] => Aksiyon, Komedi, Macera ) [2] => Array ( [afis] => https://img01.imgsinemalar.com/images/afis_buyuk/g/guzelligin-portresi-1574190897.jpg [isim] => Güzelliğin Portresi [orijinal] => Güzelliğin Portresi [tur] => Gerilim ) . . .
Botu çalıştırdığımızda yukarıdaki gibi sonuç elde etmiş olacağız. Bu bilgileri istediğiniz şekilde kullanabilirsiniz. Foreach döngüsü ile sonuçları tek tek ekrana yazdırabilirsiniz.
<style> .kutu{width:150px; float:left;margin:2px;border:2px solid #3a3a3a;height:240px;padding:3px} .kutu img{margin-left:auto;margin-right:auto; display:block;width:140px;height:160px} .kutu div{text-align:center;font: 14px Arial} .kutu div.isim{font-weight:bold;margin-top:10px} .kutu div.isim span{font-weight:normal;margin-top:10px;font-size:12px} .kutu div.tur{font-size:10px; margin-top:5px} </style> <?php $filmler = vizyondakiler(); foreach($filmler as $film){ echo '<div class="kutu">'; echo '<img src="'.$film["afis"].'">'; echo '<div class="isim">'.$film["isim"].' <br> <span>('.$film["orijinal"].')</span></div>'; echo '<div class="tur"> Tür: '.$film["tur"].'</div>'; echo '</div>'; } ?>
Yukarıda yer aldığı gibi minik bir düzenleme ile vizyondaki filmleri düzenli bir şekilde listelendirebilirsiniz.
Bot çalışmıyor hocam