Bu yazıda youtube bot scriptini yazarken php bot yapımı ayrıntılı anlatım konusunda da bahsettiğimiz kütüphanelerden birini kullanacağız. Php bot yapımı konusuna gitmek için buraya tıklayabilirsiniz. Diğer konuda, kullanacağımız kütüphane olan “PHP Simple HTML DOM Parser” kütüphanesinin linkini vermiştim oradan indirip hemen projenize dahil edebilirsiniz.
Kaynak kodunu elde etmek
İlk olarak php botumuz youtube linkimizin kaynak kodunu almasını sağlamalıyız. Belirli bir urlden direkt olarak kaynak kodları çekeceğimiz için kütüphanenin bize sunduğu file_get_html() fonksiyonunu kullanabiliriz.
<?php include("simple_html_dom.php"); $html = file_get_html('https://www.youtube.com/watch?v=XXXXXXXX');
İkinci bir yöntem ile de aynı işlemi yapabiliriz.
<?php include("simple_html_dom.php"); $sourceCode = file_get_contents('https://www.youtube.com/watch?v=XXXXXXXX'); $html = str_get_html($sourceCode);
Elimizde hali hazırda bir html kodu varsa kütüphanemizin sunduğu str_get_html() fonksiyonu ile de yukarıdaki işlemi aynen yapabiliriz. Bu şekilde $html değişkenimize kaynak kodunu aktardık. Şimdi kütüphanenin bize sunduğu fonksiyonlar ile istediğimiz verilere uğraşmaya geldi.
Verileri parçalamak
Bize gerekli olan kısımlar video başlığı, video açıklaması, görüntülenme sayısı, video iframe kodu ve video kapak resmi bizim için yeterli olacaktır.
Video başlığını çekelim. Kaynak kodlarından video başlığının olduğu yere bakıp kodumuzu oluşturalım.
$videoTitle = $html->find('span[class="watch-title"]', 0)->innertext;
find fonksiyonu ile “watch-title” class sahibi ilk span etiketinin ( ikinci parametrenin sıfır olması ilk eşleşmeyi temsil ediyor ) içerisindeki yazıyı çekmesini söyledik. Şimdi sırasıyla diğer bilgileride çekelim
<?php include("simple_html_dom.php"); $url = 'https://www.youtube.com/watch?v=NzPduyOWFuw'; $html = file_get_html($url); $videoTitle = $html->find('span[class="watch-title"]', 0)->innertext; $videoDesc = $html->find('div[id="watch-description-text"]', 0)->innertext; $videoViewCount = $html->find('div[class="watch-view-count"]', 0)->innertext; $videoId_Str = parse_url($url,PHP_URL_QUERY); parse_str($videoId_Str,$videoId_arr); $videoId = $videoId_arr["v"]; $iframe = '<iframe width="640" height="360" src="https://www.youtube.com/embed/'.$videoId.'" frameborder="0" allowfullscreen></iframe>'; $thumbnail = "https://i.ytimg.com/vi/$videoId/hqdefault.jpg";
Böylece bilgileri kolayca çekmiş olduk ve youtube bot scriptimizi bitirdik. Php nin parser_url() ve parse_str() fonksiyonları ile url deki video idsini aldırdık. Bu id ilede iframe kodu ve thumbnail resmini oluşturduk. Artık istediğimiz yerde bu bilgileri kullanabiliriz. Php ile bot yapımı konusunda öğrenmek istediğiniz veya sormak istediğiniz herhangi bir konuyu iletişim sayfasından yada yazı altına yorum yaparak bana iletebilirsiniz. Sizlere elimden geldiğince yardımcı olmaya çalışırım.
PHP Simple HTML DOM Parser
Kütüphaneye ulaşabileceğiniz adres: Tıklayın
Kütüphane için isteye bağlı olarak daha ayrıntılı bir anlatım yapabiliriz. Bu konuda farklı botlar veya daha değişik uygulamalar geliştirebiliriz.
Youtube bot scripti

birinci değilde ikinci video titlesini ve watch url idsini almak istesek ne yapmamız gerekir ?
Burada belirli bir video sayfasından bilgiler çekildi. Eğer bir arama yaptırıp sonrasında videoları teker teker bu işleme tabi tutarsanız istediğiniz sonucu ulaşacağınızı düşünüyorum.
sizin dediğiniz gibi yaparsak teker teker sayfaları çekersek bu seferde sayfa geç yükleniyor ?
ek olarak bu simple_html_dom.php kütüphanesi dosyası olmadan yapmak istesek ?
çünkü bazı web hostinglerde simple_html_dom.php dosyası çalışmıyor ?
Farklı sayfalardan veri çekmek istiyorsanız bunu yapmak zorundasınız ne yazık ki. Gecikmeyi engellemek için bir javascript arayüz oluşturulabilir veriler listelenirken arka planda diğer sayfalardan veriler çekilebilir.
Bahsettiğiniz kütüphaneyi kullanmak zorunda değilsiniz elbette buradaki yazıya bakmanız faydalı olacaktır.
peki istediğim bir sayfadan linkleri çekiyorum aynı linkleri sonuç olarak 3 4 2 tane ise sadece 1 tanesini almak istesem ne yapmam gerekir explode ile denedim beceremedim ?
Explode fonksiyonu ile elbette yapabilirsin ama preg_match ve preg_match_all fonksiyonlarını kullanarak bu işlemler daha rahat yapılabilmekte. Araştırmanda anahtar kelimelerin düzenli ifadeler (regex) veya xpath olsun.
ornek kod gösterebilir misiniz?
Curl, preg_match_all, explode, xpath gibi örneklere buradan ulaşabilirsiniz.
find fonksiyonu ile “watch-title” almayı öğrendik fakat başka değeri almak istediğimizde ilgili sayfanın kodlarında html değerini göremiyorum örneğin zaman değerini duration vs almak istesem bilgiyi nereden öğrenebilirim?
Kaynak kodlarından bakıp nerede depolandığını bulursan kolay bir şekilde alabilirsin verileri. Örneğin video uzunluğunu kaynak kodlarında arayabilir nerelerde depolanıyor araştırabilirsin. İlk etapta bulamıyorsan nereden geldiğine bakıp başka senaryolar geliştirmen gerekebilir.
Kemal Bey, burada bir sayfadan veri çekmeyi anlatmışsınız, çok güzel. teşekkür ederim. Ancak, bir sayfaya veri gönderme işlemini nasıl yaparız. Örneğin kendi işimde bir bakanlık sayfasına bazı bilgileri girmek istiyorum, kendi sitemde bu bilgiler mevcut, ancak bunları yeniden yazmak veya kopyala yapıştır yapmak zorunda kalıyorum. Vereceğinizi bilgiler için şimdiden teşekkür ederim.
iletişim bölümünden istediklerinizi daha ayrıntılı bir şekilde iletebilirseniz bir yöntem geliştirebiliriz.