download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Произволно клипче

< 1 2 >

Автор
Съобщение
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, но на всяко клипче ли трябва поотделно да се взима айдито или може това да се направи веднъж, и после динамично да се присвои в някаква променлива, която да използваме по-надолу в кода?

редактиран от programings на 30.06.12 21:09
редактиран от programings на 30.06.12 21:11
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
Да, така става, но как мога по този начин да обходя всяка една линия от текстовият файл, тъй като всяка нова линия съдържа нов код за ембдване на ново видео в моята база данни, и по този начин в страницата да се върнат айдитата на всички видеота, записани в базата данни?
редактиран от programings на 01.07.12 09:51
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/ !

редактиран от programings на 01.07.12 14:58
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

Добре е да знаеш кои са всички възможно символи, които ще се наложи да екстрактваш, дали има малки и големи букви или са само малки.

редактиран от phrozencrew на 01.07.12 18:15
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 потоците, ама вече съм позабравил, ти явно си се занимаваш с това...

< 1 2 >

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2021   Experta Ltd.