Php ile IMDB ve Sinemalar.com Botu Yapımı

Php ile IMDB ve Sinemalar.com Botu Yapımı

sola ok  Programlama

27.01.2016

1133 Gösterim

TSK Mehmetçik Vakfı
TSK Mehmetçik Vakfı
TSK Mehmetçik Vakfı

Php ile Başka Siteden Veri Çekme


Php'de, belirli fonksiyonlar sayesinde başka siteden veri çekme işlemi yapılabilir. Bu konuya en uygun örnek, imdb veya sinemalar.com'dan film bilgilerinin çekilmesi gösterilebilir. Bu konuda, film blogumda kullandığım php scriptini ayrıntılı bir şekilde açıkladım. Konuyu, Yıldızlararası film bilgilerini çekmeyi, referans alarak anlatacağım.

IMDB.com film sayfalarının karışık yapısı arasından bilgileri bulup ayıklamak zor olacaktır. Bu yüzden, film bilgilerini çekmek için, imdbdeki tüm filmleri sürekli olarak kendi veritabanına kaydeden, www.omdbapi.com sitesini kullanacağım. Bu site, imdb linkinde bulunan film ID'lerini kullanarak, film bilgilerini, json veya xml olarak, sıralı ve düzenli bir şekilde yazılımcıya sunmaktadır. Bu bilgilerde, scriptim için gereken tüm bilgilerin bulunduğu kusursuz bir kaynak demektir. www.omdbapi.com adresine girin ve aşağıdaki resimdeki kısmı bulup "IMDb ID" yazan kutucuğa bilgilerini çekmek istediğiniz filmin, IMDb ID'sini yazıp, "Search" tuşuna basın. IMDb ID'si "http://www.imdb.com/title/tt0816692/" linkinde bulunan "tt0816692" kısmıdır. Bu tüm IMDb film linklerinde mevcuttur, kolaylıkla farkedilebilir.

omdbapi resim

Bu işlemi yaptığınızda aşağıdaki gibi "Request:" yazsının hemen altında bir link üretecektir ve linkin hemen altında yeşil bir kutunun içerisinde film bilgilerini çıkaracaktır. Yanlızca film bilgilerinin gösterildiği sayfaya ulaşmak için linke tıklayın.

omdbapi resim

Bu sayfa yalnızca film bilgilerinden oluşan bir sayfadır. Normalde, sayfanın kaynak kodlarını görüntülenerek sayfanın html kodları arasında istenilen kısımlar seçilir ve php fonksiyonuna eklenir. Fakat bu sayfa (aşağıdaki resim)json (Javascript Object Notication) yani Javascript Kodlama Sayfası sayfası olduğu için zaten kaynak haldedir ve ekstra bir uğraşa gerek yoktur. Not: Aşağıdaki resim örneğini büyütmek için üzerine tıklayın.

omdbapi resim

Film IMDb bilgilerine ulaştıktan sonra php fonksiyonunu yazıyorum.
<?php function getir($baslangic, $son, $cekilmek_istenen)
{
  @preg_match_all('/' . preg_quote($baslangic, '/') .
  '(.*?)'. preg_quote($son, '/').'/i', $cekilmek_istenen, $m);
  return @$m[1];
}

Çekmek istediğim filmin, IMDb film ID'sini ve www.omdbapi.com linkini tanımlıyorum ve linkin bulunduğu sayfayı tamamen çekmek için phpde hazır bulunan file_get_contents fonksiyonunu kullanıyorum.

$id = "tt0816692"; $url = "http://www.omdbapi.com/?i=".$id."&plot=short&r=json";
$icerik = file_get_contents($url);

Bundan sonra film bilgilerini çekme işlemine başlıyorum. Aşağıdaki resimde görüldüğü üzere film adı Interstellar, {"Title":" ve ", kodları arasında. Yani php kodlarının, film adını bulması için belirlediğim iki nokta arasındaki kalan kısmı alması gerekiyor.

omdbapi resim

Bunun gibi, film adı, yönetmen, oyuncular, senarist bilgilerini nasıl ayırt edeceğini bilmesi için php kodlarına aşağıdaki şekilde tanımlıyorum.

$film_adi = getir('"Title":"','"',$icerik);
$imdb_puani = getir('"imdbRating":"','"',$icerik);
$yapim_yili = getir('"Year":"','"',$icerik);
$yapim_ulke = getir('"Country":"','"',$icerik);
$yonetmen = getir('"Director":"','"',$icerik);
$senaryo = getir('"Writer":"','"',$icerik);
$oyuncular = getir('"Actors":"','"',$icerik);
$sure = getir('"Runtime":"','"',$icerik);

Daha sonra bu bilgileri "echo" komutu ile sayfaya bastırıyorum.

<?php
echo "Film Adı: ".$film_adi[0]
echo "IMDb Puanı: ".$imdb_puani[0]
echo "Yapım Yılı: ".$yapim_yili[0]
echo "Ülke: ".$yapim_ulke[0]
echo "Yönetmen: ".$yonetmen[0]
echo "Senarist: ".$senaryo[0]
echo "Oyuncular: ".$oyuncular[0]
echo "Süre: ".$sure[0]
?>

Film bilgileri yazdırıldı. Fakat, ülkesi ingilizce yazıyor ve film süresini "dakia" yerine "min" olarak çekiyor. Bu sorunu da php "preg_replace" komutu ile düzeltiyorum. Php'de, preg_replace komutu, belirtilen şablonda aranılan kelimeyi, belirlenen başka bir kelimeyle değiştirmeye yarar. Aşağıdaki gibi "min" yerine "dakika", ülkelerin ingilizce yazılışlarını, ardından yerine geçecek Türkçe yazılışlarını tanımlıyorum ve bu tanımlamaları yukarıdaki, film adı, imdb puanı, süre gibi bilgileri çağırdığım php tanımlamalarının altına ekliyorum. Siz ülke isimlerini artırabilirsiniz.

<?php
$sablonlar[0] = '/Turkey/'; $yeniler[0] = 'Türkiye';
$sablonlar[1] = '/USA/'; $yeniler[1] = 'ABD';
$sablonlar[2] = '/China/'; $yeniler[2] = 'Çin';
$sablonlar[3] = '/Germany/'; $yeniler[3] = 'Almanya';
$sablonlar[4] = '/Russia/'; $yeniler[4] = 'Rusya';
$sablonlar[5] = '/Sweden/'; $yeniler[5] = 'İsveç';
$sablonlar[6] = '/Australia/'; $yeniler[6] = 'Avustralya';
$sablonlar[7] = '/France/'; $yeniler[7] = 'Fransa';
$sablonlar[8] = '/Ireland/'; $yeniler[8] = 'İrlanda';
$sablonlar[9] = '/Mexico/'; $yeniler[9] = 'Meksika';
$sablonlar[10] = '/Poland/'; $yeniler[10] = 'Polonya';
$sablonlar[11] = '/Switzerland/'; $yeniler[11] = 'İsviçre';
$sablonlar[12] = '/Austria/'; $yeniler[12] = 'Avusturya';
$sablonlar[13] = '/Canada/'; $yeniler[13] = 'Kanada';
$sablonlar[14] = '/Czech Republic/'; $yeniler[14] = 'Çek Cumhuriyeti';
$sablonlar[15] = '/Iceland/'; $yeniler[15] = 'İzlanda';
$sablonlar[16] = '/Italy/'; $yeniler[16] = 'İtalya';
$sablonlar[17] = '/Netherlands/'; $yeniler[17] = 'Hollanda';
$sablonlar[18] = '/Portugal/'; $yeniler[18] = 'Portekiz';
$sablonlar[19] = '/South Africa/'; $yeniler[19] = 'Güney Afrika';
$sablonlar[20] = '/Thailand/'; $yeniler[20] = 'Tayland';
$sablonlar[21] = '/Belgium/'; $yeniler[21] = 'Belçika';
$sablonlar[22] = '/Denmark/'; $yeniler[22] = 'Danimarka';
$sablonlar[23] = '/Greece/'; $yeniler[23] = 'Yunanistan';
$sablonlar[24] = '/India/'; $yeniler[24] = 'Hindistan';
$sablonlar[24] = '/Argentina/'; $yeniler[24] = 'Arjantin';
$sablonlar[25] = '/Japan/'; $yeniler[25] = 'Japonya';
$sablonlar[26] = '/New Zealand/'; $yeniler[26] = 'Yeni Zelanda';
$sablonlar[27] = '/Romania/'; $yeniler[27] = 'Romanya';
$sablonlar[28] = '/Spain/'; $yeniler[28] = 'İspanya';
$sablonlar[29] = '/UK/'; $yeniler[29] = 'İngiltere';
$sablonlar[30] = '/Finland/'; $yeniler[30] = 'Finlandiya';
$sablonlar[31] = '/Iran/'; $yeniler[31] = 'İran';
$sablonlar[32] = '/Malaysia/'; $yeniler[32] = 'Malezya';
$sablonlar[33] = '/Pakistan/'; $yeniler[33] = 'Arjantin';
$sablonlar[34] = '/Brazil/'; $yeniler[34] = 'Brezilya';
$sablonlar[35] = '/Bulgaria/'; $yeniler[35] = 'Bulgaristan';
$sablonlar[36] = '/Philippines/'; $yeniler[36] = 'Filipinler';
$min[0] = '/min/'; $dk[0] = 'dakika';
?>

Film bilgilerini çekme işlemi tamamlandı. Şimdi sinemalar.com'dan film afişlerini ve film fragmanını çekmem gerekiyor. Bunu da, aynı şekilde, yukarıda anlattığım yöntemle yapıyorum. ilk olarak sinemalar.com'da herhangi bir filmi aratıp film sayfasına ulaşıyorum (Yıldızlararası filminden devam edeceğim). Yine filmin sinemalar.com URL'sini tanımlıyorum ve "file_get_contents" hazır fonksiyonuyla, filmin bulunduğu sayfayı çekiyorum. Bu kodları yukarıdaki kodların arasına ekliyorum.

$url_sinemalar = "http://www.sinemalar.com/film/9845/interstellar";
$icerik_sinemalar = file_get_contents($url_sinemalar);

Film afişinin ve film fragmanının kaynak URL'sini, sayfanın kaynak kodundan buluyorum. Hiç uğraştırmadan buraya yazayım, film afişinin URL adresi <link rel="image_src" href=" ile "/> kodları arasında bulunuyor. Film fragmanı da, data-embedUrl=" ile " kodları arasında bulunuyor. Bunları da php koduna ekliyorum.

$afis = getir('<link rel="image_src" href="','"/>',$icerik_sinemalar);
$fragman = getir('data-embedUrl="','"',$icerik_sinemalar);

Son olarak film fragmanı iframe yardımıyla boyutlandırıyorum ve film afişiyle birlikte, echo komutu ile ekrana bastırıyorum.

<?php
echo $afis[0]."<br/>".<iframe width="100%" height="100%" src="<?php echo $fragman[0]; ?>" frameborder="0" allowfullscreen></iframe>
?>

PHP ile IMDb ve Sinemalar.com Botu tamamlanmıştır. Bu yöntemi geliştirmek, özelleştirmek tamamen sizin hayal gücünüze kalmıştır. Ek olarak, aşağıda linkten scripti indirebilirsiniz. Sadece, IMDb film ID'sini ve filmin sinemalar.com linkini değiştirmeniz yeterlidir. Scriptteki çekilen bilgileri, sitenizde belirlediğiniz yerlere yerleştirerek kullanabilirsiniz.

Php ile IMDb ve Sinemalar Botu Scripti - İNDİR


27.01.2016

Konu hakkında soru sorabilir veya yorumda bulunabilirsiniz.

İsim
Web Site
E-Posta
Mesaj

Yorumlar (1)

  1. Ali Osman

    İçerik konusu sinema ile ilgili siteler için çok kullanışlı gerçekten. Film bilgilerinin düzenli durmasını seviyorum.