• 03-08-2020, 19:40:21
    #1
    Öncelikle Herkese Merhaba, Sorun Şu PHP İle bAşka Bir Siteden Veri Çekmek İstediğimde Çalışıyor Ama Youtube'ye Gelince Çalışmıyor Nasıl Çözebilirim ?

    Kodlar

       <?php
    $site= file_get_contents("https://www.youtube.com/channel/kanal-url");
    //print_r($site);
    preg_match('@<yt-formatted-string id="text" title="" class="style-scope ytd-channel-name">(.*?)</yt-formatted-string>@si', $site, $veri);
    preg_match('@<yt-formatted-string id="subscriber-count" class="style-scope ytd-c4-tabbed-header-renderer">(.*?)</yt-formatted-string>@si', $site, $kanal);
    echo "Kanal ismi : ".$kanal[1]." | Abone Sayısı: ".$veri[2] ;
        ?>
  • 03-08-2020, 19:48:16
    #2
    takip
  • 03-08-2020, 19:49:40
    #3
    Youtube dinamik bir yapı kullanıyor o yüzden bu şekilde çekmeniz zor.

    <yt-formatted-string id="text"
    Örneğin buradaki tag bile değişiyor. Bu tür şeyler için ya api kullanın yada selenium.
  • 03-08-2020, 19:50:14
    #4
    Kimlik doğrulama veya yönetimden onay bekliyor.
    ssl ile ilgili bir derdi olabilir, user agentsiz gittigin icin pattern eslesmiyor olabilir vs, vs.
    unutma ki http client'lar javascripti ya da html'i falan yorumlamaz, istek atip serverin dondurdugu response'u alirlar.

    yukarida da soylendigi uzere youtube yeni teknolojilerin kullanildigi virtual dom'a sahip bir platform.
    ctrl + u yapip ham veri icinde aradigini bulabiliyor musun diye bir bak.
    longSubscriberCountText":{"runs":[{"text":"(.*?)"}
    "channelId":".*","title":"(.*?)",
    ben kisa bir goz gezdirmeyle bunlara rastladim ornegin.
  • 03-08-2020, 19:51:25
    #5
    $url = "https://www.youtube.com/channel/kanal-url ";
    $options = array(
    'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
    "User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n" // i.e. An iPad
    )
    );
    $context = stream_context_create($options);
    $site = file_get_contents($url, false, $context);
    şöyle deneyin, olmadı daha fazla header ekleyin olana kadar ne lazımsa.
  • 03-08-2020, 20:04:00
    #6
    LyNo adlı üyeden alıntı: mesajı görüntüle
    $url = "https://www.youtube.com/channel/kanal-url ";
    $options = array(
    'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
    "User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n" // i.e. An iPad
    )
    );
    $context = stream_context_create($options);
    $site = file_get_contents($url, false, $context);
    şöyle deneyin, olmadı daha fazla header ekleyin olana kadar ne lazımsa.
    devamlı banlıyor youtube bu metodlada
  • 03-08-2020, 20:49:02
    #7
    ozanx07 adlı üyeden alıntı: mesajı görüntüle
    devamlı banlıyor youtube bu metodlada
    Random User agent koyun library var.
  • 03-08-2020, 22:03:06
    #8
    LyNo adlı üyeden alıntı: mesajı görüntüle
    Random User agent koyun library var.
    bu seferde devamlı veri değişiyor anlamadım gitti ya
  • 03-08-2020, 22:04:20
    #9
    Youtube API'si ile çekmeyi denediniz mi ?