2015-08-03 9 views
0

У меня есть небольшая проблема, и я надеюсь, что кто-то может мне помочь. В принципе, у меня есть сценарий, который загружает миниатюры с Youtube, он работает нормально, но теперь я хочу, чтобы он был более продвинутым и имел возможность указывать URL-адрес списка воспроизведения (система для выбора уже сделана) и получить html-страницу плейлист, затем найдите все строки, содержащие/наблюдайте? v = (URL-адрес видео), а затем вытащите все, кроме идентификатора видео (серия символов после v =).Получите все строки с определенной строкой

Теперь у меня работает система загрузки, я просто не могу найти способ сделать строки с/watch? V =.

Вот мой код с загрузкой веб-страницы и найти части линии

read -p "Enter the url of the playlist : " link #Ask for url 

content=$(curl $link --silent) #Downloads the webpage 

contentxt="$basedir/playlist_page.txt" #Creates a file to store the webpage 

echo $content > "$contentxt" #Saves the webpage into the file 

url=$(grep -F "/watch?v=" $contentxt) #Find a line with the /watch?v= 

echo $url #Displays that line containing the url to be used later 

Спасибо!

ответ

0

Вот пример того, как это может быть сделано с помощью sed, испытано на странице я только что создал на jsfiddle:

curl --silent http://jsfiddle.net/udfmq9jv/| grep -F '/watch?v='| sed -E 's!.*/watch\?v=([a-zA-Z0-9_-]*).*!\1!'; 
## a1Y73sPHKxw 
## -rIEVBIP5yc 
## dMH0bHeiRNg 

Следует отметить, что точное регулярное выражение важно здесь: от How to validate youtube video ids?, допустимые символы в видео id - буквы, цифры, символ подчеркивания и тире.


Существует несколько способов сбора вывода команды в переменную. Вот как это можно сделать с помощью подстановки процесса, а while петли, и read:

ids=(); while read -r; do ids+=("$REPLY"); done < <(curl --silent http://jsfiddle.net/udfmq9jv/| grep -F '/watch?v='| sed -E 's!.*/watch\?v=([a-zA-Z0-9_-]*).*!\1!'); 
echo ${#ids[@]}; 
## 3 
echo "${ids[0]}"; 
## a1Y73sPHKxw 
echo "${ids[1]}"; 
## -rIEVBIP5yc 
echo "${ids[2]}"; 
## dMH0bHeiRNg 
+0

Хорошо работает, но выдает тот же идентификатор дважды, это нормально? Кроме того, если бы я использовал эти данные, как бы получить его и поместить в переменную, может быть, массив или что-то еще? – PandawanFr

+0

Что касается вывода одного и того же идентификатора дважды, это произойдет, если один и тот же идентификатор присутствует в источнике. Вы можете '... | сортировать | uniq' удалить дубликаты. – bgoldst

+0

Хорошо, думаю, я знаю, почему он дважды вводит идентификаторы, потому что есть href, когда вы нажимаете на ссылку, но также на миниатюру. Поэтому я попытаюсь найти способ удаления дубликатов. Поэтому, чтобы поместить переменную, я должен сделать это 'variable = $ (curl --silent http: //jsfiddle.net/udfmq9jv/ | grep -F '/ watch? V =' | sed -E!. */watch \? v = ([a-zA-Z0-9 _-] *). *! \ 1! ';) ' – PandawanFr

Смежные вопросы