Need Help.

12
S
На сайте с 19.03.2013
Offline
67
846

Здравствуйте.Вопрос следующий, есть парсер ютуб, но он выдает несовсем нужный результат, а именно на выхлопе получаем ссылку типа: http://www.youtube.com/v/номер видео , после того как спарсил скрипт пишет всё ето дело в тестовый файл.

Но нужно получить:

<object width="640" height="400"><param name="movie" value="http://www.youtube.com/v/номер видео ?fs=1&amp;hl=ru_RU&amp;rel=0&amp;hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/номер видео ?fs=1&amp;hl=ru_RU&amp;rel=0&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="400"></embed></object> тобиш стандартный код вставки видео на сайт.

Вот такой вот вопрос.Буду очень признателен за любую помощь.

З.Ы. Отрывок кода скрипта где он создаёт и пишет ссылку,

{

$YouLink.= "http://www.youtube.com/v/".trim($movielink)."\r\n";

$cpl++;

}

// Записываем линк youTube

$fp = fopen ($filename, "a+");

fwrite ($fp, $YouLink);

fclose ($fp);

sleep(1);

}

может пригодится для решения вопроса.

Зарание благодарен всем откликнувшимся.

Pазвлечения ЗДЕСЬ (http://soloman.ru)
Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#1

You must change regular expression.

This is pattern for preg_match(_all) function.


$PCRE = '#(<object[^</object>]</object>)#uis';
Подпись))
S
На сайте с 19.03.2013
Offline
67
#2
Милованов Ю.С:
You must change regular expression.

This is pattern for preg_match(_all) function.

$PCRE = '#(<object[^</object>]</object>)#uis';

Вот что мне получилось найти в коде, по поводу preg_match

$PageParse=file_get_contents("http://www.youtube.com/results?search_type=videos&search_query=".$key."&page=".$p);

if(strpos($PageParse, "/watch?v=")!=FALSE)

{

preg_match_all("/href=\"\/watch\?v=([^\"]*)\"/sU", $PageParse, $matches);

$resultmovies=implode(" ", $matches[1]);

$resultmovies=str_replace("&hd=1", null, $resultmovies);

$resultmovies=str_replace("&feature=browch", null, $resultmovies);

$resultmovies=explode(" ", $resultmovies);

$resultmovies=array_unique($resultmovies);

$moviescount=count($resultmovies);

foreach($resultmovies as $movielink)

{

$YouLink.= "http://www.youtube.com/v/".trim($movielink)."\r\n";

$cpl++;

}

// Записываем линк youTube

$fp = fopen ($filename, "a+");

fwrite ($fp, $YouLink);

fclose ($fp);

sleep(1);

}

тока что конкретно менять и что мне даст эта замена, честно говоря я не совсем понял, но всё равно спасибо.

И если можно, пишите по русски или любым другим словянским языком.:)

siv1987
На сайте с 02.04.2009
Offline
427
#3

Регулярку лучше не трогать дабы не нарушать логику работы этого скрипта, а вот при записи $YouLink можно заменить на шаблон


$YouLink = '<object width="640" height="400"><param name="movie" value="http://www.youtube.com/v/номер видео ?fs=1&amp;hl=ru_RU&amp;rel=0&amp;hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="'. trim($YouLink) .'?fs=1&amp;hl=ru_RU&amp;rel=0&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="400"></embed></object>'."\r\n";
fwrite ($fp, $YouLink);
S
На сайте с 19.03.2013
Offline
67
#4
siv1987:
Регулярку лучше не трогать дабы не нарушать логику работы этого скрипта, а вот при записи $YouLink можно заменить на шаблон


$YouLink = '<object width="640" height="400"><param name="movie" value="http://www.youtube.com/v/номер видео ?fs=1&amp;hl=ru_RU&amp;rel=0&amp;hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="'. trim($YouLink) .'?fs=1&amp;hl=ru_RU&amp;rel=0&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="400"></embed></object>'."\r\n";
fwrite ($fp, $YouLink);

Шаблон поставил, но что-то не то, пишет что по ключу спарсено к примеру 1 страница (тобиш 24 видео), а на самом деле в файл пишет одну строку (тобиш 1 видео), причем если парсить не 1 страницу (тобиш 24 видео), а скажем 5 страниц (тобиш 120 видео), то пишет в файл 5 строк с шаблоном но все строки (все видео) одинаковые.Помойму заменив ссылку на шаблон мы нарушили что-то в работе самого парсера.

Вот как выглядит код после замены:

$PageParse=file_get_contents("http://www.youtube.com/results?search_type=videos&search_query=".$key."&page=".$p);

if(strpos($PageParse, "/watch?v=")!=FALSE)

{

preg_match_all("/href=\"\/watch\?v=([^\"]*)\"/sU", $PageParse, $matches);

$resultmovies=implode(" ", $matches[1]);

$resultmovies=str_replace("&hd=1", null, $resultmovies);

$resultmovies=str_replace("&feature=browch", null, $resultmovies);

$resultmovies=explode(" ", $resultmovies);

$resultmovies=array_unique($resultmovies);

$moviescount=count($resultmovies);

foreach($resultmovies as $movielink)

{

$YouLink = '<object width="640" height="400"><param name="movie" value="http://www.youtube.com/v/'.trim($movielink).'?fs=1&amp;hl=ru_RU&amp;rel=0&amp;hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/'.trim($movielink).'?fs=1&amp;hl=ru_RU&amp;rel=0&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="400"></embed></object>'."\r\n";

$cpl++;

}

// Записываем линк youTube

$fp = fopen ($filename, "a+");

fwrite ($fp, $YouLink);

fclose ($fp);

sleep(1);

}

Ставил ссылку назад, всё работает, 24 спарсено записано 24 разных ссылки на видео.Хм не понятно...

siv1987
На сайте с 02.04.2009
Offline
427
#5

Там цикл foreach, а вы при каждый итерации присваиваете новое значение $YouLink и в итоге на выходе из цикла будете иметь одно последние значение массива. Думайте над логикой кода, по этому огрызку не понятно что у вас там за парсер.

S
На сайте с 19.03.2013
Offline
67
#6
siv1987:
Там цикл foreach, а вы при каждый итерации присваиваете новое значение $YouLink и в итоге на выходе из цикла будете иметь одно последние значение массива. Думайте над логикой кода, по этому огрызку не понятно что у вас там за парсер.

Понял, а что нужно чтоб решить вопрос?Весь код поможет?

siv1987
На сайте с 02.04.2009
Offline
427
#7

Ну хотябы начиная с этого участка и до конца в оригинале как он есть.

S
На сайте с 19.03.2013
Offline
67
#8

//обрабатываем ключевик

$key = trim($KeysArray[$i]);

$key = urlencode($key);

$key = str_replace("%20", "+", $key);

$PageParse=file_get_contents("http://www.youtube.com/results?search_type=videos&search_query=".$key."&page=".$p);

if(strpos($PageParse, "/watch?v=")!=FALSE)

{

preg_match_all("/href=\"\/watch\?v=([^\"]*)\"/sU", $PageParse, $matches);

$resultmovies=implode(" ", $matches[1]);

$resultmovies=str_replace("&hd=1", null, $resultmovies);

$resultmovies=str_replace("&feature=browch", null, $resultmovies);

$resultmovies=explode(" ", $resultmovies);

$resultmovies=array_unique($resultmovies);

$moviescount=count($resultmovies);

foreach($resultmovies as $movielink)

{

$YouLink = '<object width="640" height="400"><param name="movie" value="http://www.youtube.com/v/'.trim($movielink).'?fs=1&amp;hl=ru_RU&amp;rel=0&amp;hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/'.trim($movielink).'?fs=1&amp;hl=ru_RU&amp;rel=0&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="400"></embed></object>'."\r\n";

$cpl++;

}

// Записываем линк youTube

$fp = fopen ($filename, "a+");

fwrite ($fp, $YouLink);

fclose ($fp);

sleep(1);

}

}

}

}

echo "<center><table><tr><td><font color=\"green\">Спарсено $cpl ссылок на видео. Данные ссылки сохранены в файл $filename </font> </td></tr></table></center>";

}

?>

</body>

</html>

siv1987
На сайте с 02.04.2009
Offline
427
#9

soloman,

siv1987:
в оригинале как он есть.

и прикреплять файлом, или хотябы обрамляйте в ббкод для форматирования кода, никто эту портянку в таком виде разбирать не будет.

S
На сайте с 19.03.2013
Offline
67
#10

Sorry.Как прикрепить файл не разобрался...так нормально?

//обрабатываем ключевик
$key = trim($KeysArray[$i]);
$key = urlencode($key);
$key = str_replace("%20", "+", $key);

$PageParse=file_get_contents("http://www.youtube.com/results?search_type=videos&search_query=".$key."&page=".$p);

if(strpos($PageParse, "/watch?v=")!=FALSE)
{
preg_match_all("/href=\"\/watch\?v=([^\"]*)\"/sU", $PageParse, $matches);
$resultmovies=implode(" ", $matches[1]);
$resultmovies=str_replace("&hd=1", null, $resultmovies);
$resultmovies=str_replace("&feature=browch", null, $resultmovies);
$resultmovies=explode(" ", $resultmovies);
$resultmovies=array_unique($resultmovies);

$moviescount=count($resultmovies);
foreach($resultmovies as $movielink)
{


$YouLink = '<object width="640" height="400"><param name="movie" value="http://www.youtube.com/v/'.trim($movielink).'?fs=1&amp;hl=ru_RU&amp;rel=0&amp;hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/'.trim($movielink).'?fs=1&amp;hl=ru_RU&amp;rel=0&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="400"></embed></object>'."\r\n";


$cpl++;
}

// Записываем линк youTube
$fp = fopen ($filename, "a+");
fwrite ($fp, $YouLink);
fclose ($fp);

sleep(1);
}


}




}


}



echo "<center><table><tr><td><font color=\"green\">Спарсено $cpl ссылок на видео. Данные ссылки сохранены в файл $filename </font> </td></tr></table></center>";

}



?>

</body>

</html>
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий