Ticketa
Registered
Имам следния код, който го ползвам за youtube клипове:
Скрипта си бачка - няма ядове. Обаче. Има доста потребители, които вместо: http://www.youtube.com/watch?v=AkFqg5wAuFk
Пишат http://youtube.com/watch?v=AkFqg5wAuFk
И като го няма "www" просто чупи кода и не се взима $VideoID-то.
Това става при:
Пробвах и така:
Въобще не иска да бачка.
Не искам няк'ви готови кодове, а просто да си оправя проблема по моя код. Надявам се някой да удари едно рамо и да ми каже, къде по дяволите греша с регулярните изрази.
П.П. Другото, което се сещам е просто да спирам кода още при втория preg_match, ако в домейна няма "www", но ми се вижда безсмислено при положение, че може да се направи да работи и със WWW и без трите W.
PHP:
<?php
function get_http_response_code($url) {
$headers = get_headers($url);
return substr($headers[0], 9, 3);
}
$videoUrl = "http://www.youtube.com/watch?v=AkFqg5wAuFk";
if (preg_match("/^(http:\/\/|https:\/\/)(([a-z0-9]([-a-z0-9]*[a-z0-9]+)?){1,63}\.)+[a-z]{2,6}/i", $videoUrl)) {
if (preg_match("/http:\/\/(www\.)?youtube\.com\//i", $videoUrl) || preg_match("/http:\/\/(www\.)?youtu\.be\//i", $videoUrl)) {
if(get_http_response_code($videoUrl) != "404"){
// избор на дълъг адрес
if(preg_match("/http:\/\/.{2,3}\.youtube\.com\/watch\?v=([-|~_0-9A-Za-z]+).*/i", $videoUrl, $matches) ) {
$VideoID = $matches[1];
}
// избор на кратък адрес
if(preg_match("/http:\/\/youtu\.be\/([-|~_0-9A-Za-z]+).*/i", $videoUrl, $matches) ) {
$VideoID = $matches[1];
}
$source = file_get_contents($videoUrl);
$title = explode("<title>", $source);
$title = explode("</title>", $title[1]);
$title = str_replace(" ", "", $title[0]);
$title = iconv('utf-8', 'windows-1251', urldecode($title));
$pics = "http://img.youtube.com/vi/".$VideoID."/default.jpg";
echo "
Адрес: $VideoID<br />
Title: $title<br />
Pic: $pics";
} else {
echo "Възникна грешка. Опитайте по-късно или проверете дали адреса е валиден!";
}
} else {
echo "Този адрес не е от youtube.com";
}
} else {
echo "Невалиден адрес.";
}
?>
Скрипта си бачка - няма ядове. Обаче. Има доста потребители, които вместо: http://www.youtube.com/watch?v=AkFqg5wAuFk
Пишат http://youtube.com/watch?v=AkFqg5wAuFk
И като го няма "www" просто чупи кода и не се взима $VideoID-то.
Това става при:
PHP:
// избор на дълъг адрес
if(preg_match("/http:\/\/.{2,3}\.youtube\.com\/watch\?v=([-|~_0-9A-Za-z]+).*/i", $videoUrl, $matches) ) {
$VideoID = $matches[1];
}
// избор на кратък адрес
if(preg_match("/http:\/\/youtu\.be\/([-|~_0-9A-Za-z]+).*/i", $videoUrl, $matches) ) {
$VideoID = $matches[1];
}
Пробвах и така:
PHP:
// избор на дълъг адрес
if(preg_match("/http:\/\/(www\.)?youtube\.com\/watch\?v=([-|~_0-9A-Za-z]+).*/i", $videoUrl, $matches) ) {
$VideoID = $matches[1];
}
// избор на кратък адрес
if(preg_match("/http:\/\/(www\.)?youtu\.be\/([-|~_0-9A-Za-z]+).*/i", $videoUrl, $matches) ) {
$VideoID = $matches[1];
}
Въобще не иска да бачка.
Не искам няк'ви готови кодове, а просто да си оправя проблема по моя код. Надявам се някой да удари едно рамо и да ми каже, къде по дяволите греша с регулярните изрази.
П.П. Другото, което се сещам е просто да спирам кода още при втория preg_match, ако в домейна няма "www", но ми се вижда безсмислено при положение, че може да се направи да работи и със WWW и без трите W.