Посчитайте видео в плейлисте Youtube

12

Вызов

Учитывая плейлист Youtube, выведите количество видео в нем.

I / O

Плейлист будет указан как URL; например, https://www.youtube.com/playlist?list=PL_3jnZNPYn7qUatgDYBS5NShkfXoehSRC(это плейлист, который мне прислал друг, чтобы попытаться заставить меня слушать K-Pop, потому что она одержима им, и мне это не нравится: P)

Ссылка на плейлист имеет форму https://www.youtube.com/playlist?list=<id>. Вводим URL, а не ID.

Выходные данные должны быть одним целым числом, указывающим, сколько видео в этом списке воспроизведения. Вы можете вывести либо общее количество видео, либо количество не удаленных видео, в зависимости от того, какое из них больше для вас.

Тестовые случаи

https://www.youtube.com/playlist?list=PL_3jnZNPYn7qUatgDYBS5NShkfXoehSRC -> 12
https://www.youtube.com/playlist?list=PLIEbITAtGBebWGyBZQlkiMXwt30WqG9Bd -> 114 OR 1

Не стесняйтесь добавлять больше тестов.

HyperNeutrino
источник
6
Снимаю шляпу за то, что нашел самый хитрый способ попросить людей сделать из вас библиотеку для подсчета видео в плейлисте YouTube.
Стевойсяк
2
Я просто сопротивлялся желанию добавить плейлист «Рикролл». Или плейлист "Dank Memes".
CAD97
Не по теме: я бы больше интересовался списком всех видео, которые может предложить канал YouTube. Исходный код, кажется, не включает это естественно.
phil294
@Blauhirn Это интересная идея. Может быть, вы могли бы сделать вызов по этому поводу.
HyperNeutrino

Ответы:

9

05AB1E , 22 байта

Подразумевается , что URL передается безhttps:// .

Код:

.w’®Ã-ƒ¢’¡`"<li>"¡2è#¬

Использует кодировку 05AB1E . Невозможно попробовать онлайн, из-за доступа в интернет.

Объяснение:

.w                       # Receive implicit input and read all data from the url
  ’®Ã-ƒ¢’¡               # Split on the string "header-details"
          `              # Flatten once which leaves the last element on top of the stack
           "<li>"¡       # Split on the string "<li>"
                  2è     # Get the third element
                    #    # Split on spaces
                     ¬   # Retrieve the first element 

Вот что я получаю при запуске в командной строке:

введите описание изображения здесь

Аднан
источник
1
Что это за командная строка? Я не видел этого раньше.
Okx
2
@Okx Это cmder
Аднан
Как это работает?
Стевойсяк
@ StevenVascellaro Спасибо за напоминание, я добавил объяснение.
Аднан
6

Scala 2.12, 138 байт

print("""<li>.*?</li><li>(\d+).*?</li>""".r.findFirstMatchIn(scala.io.Source.fromURL(args(0),"utf-8").getLines.mkString("")).get.group(1))

Сохраните его something.scalaи запустите scala something.scala {url}.

введите описание изображения здесь

Топор арии
источник
6

JS (ES6), 68 байт

x=>fetch(x).then(x=>x.text()).then(x=>alert(x.match(/(\d+) vi/)[1]))

Вставьте это в свою консоль на youtube.com, чтобы попробовать:

(x=>fetch(x).then(x=>x.text()).then(x=>alert(x.match(/(\d+) vi/)[1])))(prompt("Enter the URL"))

источник
6

MATL , 15 байт

Спасибо Hyper Neutrino за обнаруженную ошибку, теперь исправленную.

Xi'wner">\n'XXn

Входные данные представляют собой строку, заключенную в одинарные кавычки. Выходные данные - количество восстановленных видео.

Вот пример запуска с двумя тестовыми примерами . По состоянию на 13 июня 2017 года количество восстановленных видео в плейлистах составляет 12 и 1 соответственно.

введите описание изображения здесь

Как это устроено

Xi          % Read string containing URL and get contents as a string
'wner">\n'  % Push this string
XX          % Regexp matching. Gives a cell array with the matched strings
n           % Number of elements. Implicitly display
Луис Мендо
источник
Ха, умное регулярное выражение!
рубик
Что вы используете для захвата экрана?
Мэтт
@Matt LICEcap для Windows
Луис Мендо
Вопрос: Что делать, если я создаю плейлист под названием "wner"? Это все еще будет работать?
HyperNeutrino
@HyperNeutrino Хороший вопрос. Я исправил это. Кстати, количество видео в первом списке изменилось
Луис Мендо
4

bash + curl + gnu grep, 32 байта

Наконец-то дайте Code Golf попробовать:

curl -s $1|grep -Po \\d+(?= vid)
  • Используйте curl -sдля загрузки без каких-либо дополнительных выводов.
  • Передайте вывод в grep (perl regex), который выдаст только совпадение
    • Совпадение первого числа, которое продолжается "VID"

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

Судо Баш
источник
Хорошая первая подача!
HyperNeutrino
3

PowerShell, 55 байт

"$(iwr "$args")"-match'(?s)(\d+) vid'>$null;$matches[1]

Перейдите на сайт. Преобразовать объект в строку, которая является источником HTML. Разобрать строку с номером перед "vid" с помощью регулярного выражения.

Логика работает с обоими тестами.

Matt
источник
0

Haskell 161 байт

import Network.Curl.Download
import qualified Data.ByteString.Char8 as B
z=do u<-getLine;(Right b)<-openURI u;putStrLn$show$length$B.findSubstrings(B.pack"<tr")b
Давиде Спатаро
источник