Conte os vídeos em uma lista de reprodução do YouTube

12

Desafio

Dada uma lista de reprodução do YouTube, produza o número de vídeos nela.

I / O

A lista de reprodução será fornecida como um URL; por exemplo, https://www.youtube.com/playlist?list=PL_3jnZNPYn7qUatgDYBS5NShkfXoehSRC(esta é uma lista de reprodução que uma amiga me enviou para tentar ouvir K-Pop porque ela é obcecada por ela e eu não gosto: P)

O link para uma lista de reprodução é do formato https://www.youtube.com/playlist?list=<id>. A entrada é a URL, não o ID.

A saída deve ser um número inteiro único, indicando quantos vídeos há nesta lista de reprodução. Você pode exibir o número total de vídeos ou o número de vídeos não excluídos, o que for mais difícil para você.

Casos de teste

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

Sinta-se livre para adicionar mais casos de teste.

HyperNeutrino
fonte
6
O melhor é encontrar a maneira mais rápida de pedir às pessoas que façam de você uma biblioteca para contar vídeos em uma lista de reprodução do YouTube.
Stevoisiak
2
Eu apenas resisti à vontade de adicionar uma lista de reprodução do rickroll. Ou a lista de reprodução "Dank Memes".
CAD97 25/05
Fora do tópico: eu estaria mais interessado em listar todos os vídeos que um canal do YouTube tem a oferecer. O código fonte não parece incluir isso naturalmente.
phil294
@Blauhirn Essa é uma ideia interessante. Talvez você possa fazer um desafio sobre isso.
HyperNeutrino 13/06

Respostas:

9

05AB1E , 22 bytes

Assume que o URL é passado sem o https://.

Código:

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

Usa a codificação 05AB1E . Não pode ser experimentado online, devido ao acesso à Internet.

Explicação:

.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 

Isto é o que recebo ao executar na linha de comando:

insira a descrição da imagem aqui

Adnan
fonte
1
Que tipo de linha de comando é essa? Eu nunca vi isso antes.
Okx 25/05
2
@Okx It's cmder
Adnan
Como funciona?
Stevoisiak
@StevenVascellaro Obrigado pelo lembrete, adicionei uma explicação.
Adnan
6

Scala 2.12, 138 bytes

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

Salve something.scalae execute scala something.scala {url}.

insira a descrição da imagem aqui

Aria Axe
fonte
6

JS (ES6), 68 bytes

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

Cole isso no seu console no youtube.com para tentar:

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

fonte
6

MATL , 15 bytes

Agradecemos ao Hyper Neutrino por encontrar um erro, agora corrigido.

Xi'wner">\n'XXn

A entrada é uma cadeia de caracteres entre aspas simples. A saída é o número de vídeos não excluídos.

Aqui está um exemplo executado com os dois casos de teste. Em 13 de junho de 2017, o número de vídeos não excluídos nas listas de reprodução é 12 e 1, respectivamente.

insira a descrição da imagem aqui

Como funciona

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
Luis Mendo
fonte
Ah, regex inteligente!
22317
O que você está usando para capturar a tela?
25417 Matt
@Matt LICEcap para Windows
Luis Mendo
Pergunta: E se eu criar uma playlist chamada "wner"? Ainda vai funcionar?
HyperNeutrino
@HyperNeutrino Good point. Eu o corrigi. BTW, o número de vídeos na primeira lista mudou
Luis Mendo
4

bash + curl + gnu grep, 32 bytes

Finalmente dando uma chance ao Code Golf:

curl -s $1|grep -Po \\d+(?= vid)
  • Use curl -spara fazer o download sem nenhuma saída extra.
  • Canalize a saída para grep (perl regex), que produzirá apenas a correspondência
    • Corresponde ao primeiro número que prossegue "vid"

Isso é jogado de como eu faria isso praticamente.

Sudo Bash
fonte
Boa primeira apresentação!
HyperNeutrino 25/05
3

PowerShell, 55 bytes

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

Navegue até o site. Converta o objeto em uma string que é a fonte html. Analise a sequência que possui um número anterior a "vid" com regex.

A lógica funciona com os dois casos de teste.

Matt
fonte
0

Haskell 161 bytes

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
Davide Spataro
fonte