Произволно клипче
Автор |
|
programingsСъб, 30.06.12, 21:08 |
Започнах да работя по втората версия на скриптчето, и първо реших да започна с това да могат да се виждат точните линкове на всички добавени клипчета в администрацията! Идеята е да има два класа за показване на клипчета - единият ще е за вибокса, а другият за ютюба! Целта е да се изкара съответната информация от кода за ембдване, записан в текстовата база данни! Примерен код за ембдване на клипче от вибокса : <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="450" height="403"><param name="movie" value="http://i47.vbox7.com/player/ext.swf?vid=72e79df39e"><param name="quality" value="high"><embed src="http://i48.vbox7.com/player/ext.swf?vid=72e79df39e" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="403"></embed></object> |
В задачата се пита как да се вземе ключа на клипа, който стои след vid= ! Първо естествено ще се добавят htmlspecialchars, защото иначе клипа се визуализира, а на нас ни трябва като стринг! И тук вече идва трудното за мен! Не мога да извлека проклетият номер! Когато се вземе този идентификатор, то просто се добавя след http://vbox7.com/play:, като след това линка ни е готов за показване! Пробвах с preg_match(), но не става! Връща грешка или ми вкарва в масив някакви глупости, извадени от кода! В базата данни имам няколко клипа с такива кодове за ембдване, и искам на всичките да изкарам айдито, и да го покажа в някаква страница! Предполагам ще се използва цикъл for, но на всяко клипче ли трябва поотделно да се взима айдито или може това да се направи веднъж, и после динамично да се присвои в някаква променлива, която да използваме по-надолу в кода? | | phrozencrewСъб, 30.06.12, 21:24 |
Не те разбрах много добре, но мисля, че ти трябва регулярен израз, за да изкараш стринга. Примерно <?php
$str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="450" height="403"><param name="movie" value="http://i47.vbox7.com/player/ext.swf?vid=72e79df39e"><param name="quality" value="high"><embed src="http://i48.vbox7.com/player/ext.swf?vid=72e79df39e" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="403"></embed></object>';
$str = htmlspecialchars($str);
$vid=preg_match('/vid=([a-z0-9]+)&/',$str,$m); //vid=72e79df39e
echo $m[1];
?> |
Резултат: 72e79df39e | | programingsНед, 01.07.12, 09:50 |
Да, така става, но как мога по този начин да обходя всяка една линия от текстовият файл, тъй като всяка нова линия съдържа нов код за ембдване на ново видео в моята база данни, и по този начин в страницата да се върнат айдитата на всички видеота, записани в базата данни? | | phrozencrewНед, 01.07.12, 14:11 |
” Да, така става, но как мога по този начин да обходя всяка една линия от текстовият файл, тъй като всяка нова линия съдържа нов код за ембдване на ново видео в моята база данни, и по този начин в страницата да се върнат айдитата на всички видеота, записани в базата данни? „
С preg_match_all. Да разширим примерчето: <?php
$str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="450" height="403"><param name="movie" value="http://i47.vbox7.com/player/ext.swf?vid=72e79df39e"><param name="quality" value="high"><embed src="http://i48.vbox7.com/player/ext.swf?vid=72e79df39e" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="403"></embed></object>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="450" height="403"><param name="movie" value="http://i47.vbox7.com/player/ext.swf?vid=ddggedf39e"><param name="quality" value="high"><embed src="http://i48.vbox7.com/player/ext.swf?vid=7ffdddf39e" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="403"></embed></object>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="450" height="403"><param name="movie" value="http://i47.vbox7.com/player/ext.swf?vid=72fdf39e"><param name="quality" value="high"><embed src="http://i48.vbox7.com/player/ext.swf?vid=72e79df39e" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="403"></embed></object>
';
$str = htmlspecialchars($str);
$vid=preg_match_all('/vid=([a-z0-9]+)&/',$str,$m);
$vids = array_unique($m[1]);
foreach($vids as $vid) echo $vid."\n";
?> |
Резултата е точно каквото ни трябва: 72e79df39e ddggedf39e 7ffdddf39e 72fdf39e | | programingsНед, 01.07.12, 14:58 |
Ясно! Всичко проработи! Мерси! А как би изглеждал регулярният израз за взимане на айдито на клипче от ютюба, като кода за ембдване там е следният : <iframe width="560" height="315" src="http://www.youtube.com/embed/kn6-c223DUU" frameborder="0" allowfullscreen></iframe> |
ID-то е това, което стои след embed/ ! | | phrozencrewНед, 01.07.12, 16:52 |
За много редове ли? Примерно: $str = '<iframe width="560" height="315" src="http://www.youtube.com/embed/kn6-c223DUU" frameborder="0" allowfullscreen></iframe>';
$str = htmlspecialchars($str);
$vid=preg_match_all('/embed\/([a-z0-9-]+)/i',$str,$m); //kn6-c223DUU
$vids = array_unique($m[1]);
foreach($vids as $vid) echo $vid."\n"; |
Резултат: kn6-c223DUU Добре е да знаеш кои са всички възможно символи, които ще се наложи да екстрактваш, дали има малки и големи букви или са само малки. | | programingsНед, 01.07.12, 17:01 |
Да, става въпрос за много редове в които ще се съдържат едновременно клипчета от ютюба и вибокса! Използвам кода така за ютюба : $str2 = file_get_contents("videos.txt");
$str2 = htmlspecialchars($str);
$vid2 =preg_match_all('/embed/([a-z0-9-]+)/i',$str2,$m2);
$vids2 = array_unique($m2[1]);
foreach($vids2 as $vid2) {
echo "<a href='http://youtube.com/watch?v=$vid2'>http://youtube.com/watch?v=$vid2</a>"."<br />";
} |
Съответно отгоре е същият идентичен и за вибокса, само че променливите са без двойката след тях! Когато го изпълня целият код така обаче се връщат следните грешки, и се показват само клиповете от вибокса! Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '(' in C:serverhtdocsindex.php on line 217
Warning: array_unique() expects parameter 1 to be array, null given in C:serverhtdocsindex.php on line 219
Warning: Invalid argument supplied for foreach() in C:serverhtdocsindex.php on line 221 |
| | phrozencrewНед, 01.07.12, 18:16 |
Проблема е в stripslashes-а на ДБГ. Кода по-горе го поправих. Сърваре е стрипнал една "\": ... embed\/([... | | programingsНед, 01.07.12, 18:56 |
Да, така вече всичко е наред! Мерси много за помощта! | | anonymousНед, 01.07.12, 21:46 |
Хех, phrozen, като ти чета писаниците си припомням времената като се пробвах да вадя новини от сайтове през RSS потоците, ама вече съм позабравил, ти явно си се занимаваш с това... | | Коментар |