Я загружаю эпизоды с ряда, но я устал для участия в сайте, копирования ссылки и загрузки его для каждого эпизода.
Во-первых, я участвую в сайте, и я получаю HTML-код. Код является большим, но я интересуюсь этим в особенности (это - где ссылка),
var e=Array(),d=1;e[1]='<div style="margin-left:7px"><object width="720" height="450" class="BLOG_video_class" id="BLOG_video-ee57f234e359092e" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="movie" value="//www.youtube.com/get_player"><param name="bgcolor" value="#FFFFFF"><param name="allowfullscreen" value="true"><param name="flashvars" value="flvurl=http://redirector.googlevideo.com/videoplayback?id%3Da87eff0521883521%26itag%3D5%26source%3Dblogger%26app%3Dblogger%26cmo%3Dsensitive_content%253Dyes%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1400695090%26sparams%3Did,itag,source,ip,ipbits,expire%26signature%3DAA6B72C5D9C12D461C7A0E3F59B2C208A7CDC82D.AE374E37E58A41191B10F30AA43BE42379DA6D5B%26key%3Dck2&iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Da87eff0521883521%26offsetms%3D5000%26itag%3Dw160%26sigh%3DaUKIa9j5GROOBShBybzlFhMGllc&autoplay=0"><embed src="//www.youtube.com/get_player" type="application/x-shockwave-flash"width="720" height="450" bgcolor="#FFFFFF"flashvars="flvurl=http://redirector.googlevideo.com/videoplayback?id%3Da87eff0521883521%26itag%3D5%26source%3Dblogger%26app%3Dblogger%26cmo%3Dsensitive_content%253Dyes%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1400695090%26sparams%3Did,itag,source,ip,ipbits,expire%26signature%3DAA6B72C5D9C12D461C7A0E3F59B2C208A7CDC82D.AE374E37E58A41191B10F30AA43BE42379DA6D5B%26key%3Dck2&iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Da87eff0521883521%26offsetms%3D5000%26itag%3Dw160%26sigh%3DaUKIa9j5GROOBShBybzlFhMGllc&autoplay=0"allowFullScreen="true" /></object></div>';e[2]='<div style="margin-left:7px"><iframe src="http://videosasd.com/play-zs-www30.zippyshare.com/v/94301695/file.html" width="720" height="450" scrolling="no" frameborder="0"></iframe></div>';
Ну, это - код looong, но мне интересно получать это. (Существует 2 идентичных ссылки, обе работы без '&' в конце),
http://redirector.googlevideo.com/videoplayback?id%3Da87eff0521883521%26itag%3D5%26source%3Dblogger%26app%3Dblogger%26cmo%3Dsensitive_content%253Dyes%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1400695090%26sparams%3Did,itag,source,ip,ipbits,expire%26signature%3DAA6B72C5D9C12D461C7A0E3F59B2C208A7CDC82D.AE374E37E58A41191B10F30AA43BE42379DA6D5B%26key%3Dck2&
Теперь, я использую этот regEX (Обратите внимание, что я - новичок с этим, я тестирую его и работы),
\s*flvurl\s*=\s*(\"([^"]*\")|'[^']*'|([^'">\s]+));*%26key%3Dck2&
И, в терминале я использую
wget -q -O - "serverlink" | sed -e "s/\s*flvurl\s*=\s*(\"([^"]*\")|'[^']*'|([^'">\s]+));*%26key%3Dck2&//g"
Я получаю ошибку с unexpected token
) '`
Кто-либо знает, как я могу зафиксировать его? (Или, возможно, кто-то знает, что лучший regex получает ссылку от первого поля кода),
Вот некоторые более простые подходы для получения то, что Вы хотите:
grep
с PCREs
wget -q -O - "serverlink" | grep -oP 'flvurl=\K[^;]+(?=&)'
В PCREs, \K
означает "отбрасывание все подобранное до здесь". -o
опция к grep
означает "печать только подобранная часть строки". Так, grep -oP 'flvurl=\K
средства: "ищите flvurl=
и начните соответствовать после него". [^;]+
означает "соответствие как многих не -;
символы как возможные.
foo(?=bar)
формат называют положительным предвидением. Это не часть фактической соответствующей строки. Это означает _ "соответствие foo
сопровождаемый bar
но отбрасывание bar
. Соединяя все это, регулярное выражение выше распечатает все между flvurl=
и &
.
sed
wget -q -O - "serverlink" | sed -nr 's/.*flvurl=([^;]+)&.*/\1/p'
Оператор замены (я использую традиционное s///
вместо s\\\
Вы использовали, но это - та же идея), заменит всем с текстом между flvurl=
и &
. Круглые скобки там для "получения" совпавшей строки, делая это доступным как \1
. -r
опция включает расширенные регулярные выражения, которые могут иметь дело с круглыми скобками, не будучи должен выйти (\(
и \)
) их. Это - причина, Вы получали ошибку между прочим.
-n
подавляет нормальный вывод, никакие строки не будут распечатаны по умолчанию. p
в конце замены (s///p
) означает, "печатают текущую строку, если замена была успешна".
Perl
Используя ту же логику как sed
выше:
wget -q -O - "serverlink" | perl -ne 's/.*flvurl=([^;]+)&.*/$1/ && print'
Ваша командная строка передает вывод по каналу wget в sed - для замены результат из команды sed как аргумент URL на wget командной строке, необходимо будет сделать что-то как
wget -q -O- -- $(echo -n "urlstring" | sed -e 's/pattern/replacement/')
, или
wget -q -O- -- $(sed -e 's/pattern/replacement/' <<< "urlstring")
Эти -e
может быть опущен в этом контексте.