Как вызвать страницу внешнего сервера с PHP, который включает JS? - PullRequest
0 голосов
/ 27 сентября 2011

Существует веб-сайт с кодом JS.Обычно, когда страница открывается пользователем, этот код JS запускается вручную и дает ссылку около 10 секунд.Я пытаюсь поймать эту ссылку.В PHP я вызываю эту страницу с помощью функции file_get_contents, однако, как вы и предполагаете, ссылки там нет.

Есть ли способ сделать HTTP-запрос на эту страницу и подождать, пока не запустится код JavaScript.Или я могу вызвать эту функцию JS с помощью JQuery, может быть?

Если вопрос не ясен, я могу предоставить более подробную информацию.Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 27 сентября 2011

Я бы посоветовал изучить javascript на странице и перепроектировать, как ссылка генерируется динамически. Затем вы можете использовать регулярные выражения для извлечения этой информации из строки, возвращаемой file_get_contents.

Возможно, я смогу помочь вам в обратном инжиниринге, если вы сможете предоставить дополнительную информацию на рассматриваемой странице (или аналогичную).

UPDATE: После некоторого изменения я обнаружил, что сайт mp3 ripper использует 2 API: один, чтобы нажать видео, чтобы быть обработанным, и один, чтобы тыкать в текущем состоянии.

Первый API:

http://www.youtube-mp3.org/api/pushItem/?item=http%3A//www.youtube.com/watch%3Fv%3DXXXXXXXX&xy=trve

Второй API:

http://www.youtube-mp3.org/api/itemInfo/?video_id=XXXXXXXX&adloc=

XXXXXXXX - идентификатор видео YouTube. 2-й API возвращает JSONP, где заполнение является присваиванием переменной (info = {...};). В json есть член "h", который возвращает длинный хеш, который может быть использован для окончательного построения ссылки на скачиваемый файл mp3.

Но чтобы быть немного этичным, могу ли я предложить другой подход (если это разрешено вашей хостинговой средой)? Вы можете использовать FFmpeg для конвертации видео самостоятельно. Здесь есть класс-оболочка: Класс преобразования YouTube в MP3

0 голосов
/ 27 сентября 2011

file_get_contents только выбирает источник HTML запрашиваемого URL, он не выполняет код javascript для вас и не моделирует dom со всеми его событиями.

Короткий ответ будет: это сделать нелегко. Одна вещь, которую вы могли бы сделать, это проанализировать источник и найти там ссылку, как Дейв предложил .

0 голосов
/ 27 сентября 2011

Javascript выполняется на клиенте и требует интерпретатора для его выполнения. Ваш PHP-сервер, выполняющий вызовы HTTP-запроса, не будет интерпретировать любой javascript, он просто получит HTML.

Вы можете использовать программное обеспечение, такое как HtmlUnit , чтобы выполнить запрос и выполнить javascript, а затем посмотреть, сможете ли вы извлечь ссылку после ее завершения. Это будет зависеть от того, насколько у вас есть доступ к серверу, на котором вы выполняете свой PHP.

Или вы можете изучить файлы JS, используемые веб-сайтом, на который вы ориентируетесь, определить, как он запрашивает эту ссылку, и посмотреть, сможете ли вы просто получить его непосредственно. Имейте в виду, что вы непосредственно работаете над тем, как сайт должен работать, так что это не будет особенно элегантным решением, и одно изменение в их JS может привести к сбою приложения. Это достаточно справедливо, поскольку у них может быть именно этот процесс, чтобы помешать людям собирать ссылки так, как вы описываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...