Cuenta los videos en una lista de reproducción de YouTube

12

Desafío

Dada una lista de reproducción de Youtube, genera la cantidad de videos que contiene.

I / O

La lista de reproducción se proporcionará como una URL; por ejemplo, https://www.youtube.com/playlist?list=PL_3jnZNPYn7qUatgDYBS5NShkfXoehSRC(esta es una lista de reproducción que un amigo me envió para tratar de hacerme escuchar K-Pop porque está obsesionada con eso y no me gusta: P)

El enlace a una lista de reproducción es de la forma https://www.youtube.com/playlist?list=<id>. La entrada es la URL, no la ID.

La salida debe ser un número entero único que indique cuántos videos hay en esta lista de reproducción. Puede emitir la cantidad total de videos o la cantidad de videos no eliminados, el que sea más atractivo para usted.

Casos de prueba

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

Siéntase libre de agregar más casos de prueba.

Hiperneutrino
fuente
66
Me quito el sombrero por encontrar la manera más furtiva de pedirle a la gente que te haga una biblioteca para contar videos en una lista de reproducción de YouTube.
Stevoisiak
2
Simplemente resistí el impulso de agregar una lista de reproducción de rickroll. O la lista de reproducción "Dank Memes".
CAD97
Fuera del tema: estaría más interesado en una lista de todos los videos que un canal de youtube tiene para ofrecer. El código fuente no parece incluir esto naturalmente.
phil294
@Blauhirn Esa es una idea interesante. Tal vez podrías hacer un desafío al respecto.
HyperNeutrino

Respuestas:

9

05AB1E , 22 bytes

Asume que la URL se pasa sin el https://.

Código:

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

Utiliza la codificación 05AB1E . No se puede probar en línea, debido al acceso a Internet.

Explicación:

.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 

Esto es lo que obtengo cuando se ejecuta en la línea de comando:

ingrese la descripción de la imagen aquí

Adnan
fuente
1
¿Qué tipo de línea de comando es esa? No lo he visto antes.
Okx
2
@Okx It's cmder
Adnan
¿Como funciona?
Stevoisiak
@StevenVascellaro Gracias por el recordatorio, he agregado una explicación.
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))

Guardar para something.scalay dirigido por scala something.scala {url}.

ingrese la descripción de la imagen aquí

Aria Axe
fuente
6

JS (ES6), 68 bytes

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

Pega esto en tu consola en youtube.com para probar:

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

fuente
6

MATL , 15 bytes

Gracias a Hyper Neutrino por encontrar un error, ahora corregido.

Xi'wner">\n'XXn

La entrada es una cadena entre comillas simples. La salida es la cantidad de videos no eliminados.

Aquí hay un ejemplo con los dos casos de prueba. A partir del 13 de junio de 2017, el número de videos no eliminados en las listas de reproducción es de 12 y 1 respectivamente.

ingrese la descripción de la imagen aquí

Cómo 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
fuente
Ja, inteligente regex!
rubik
¿Qué estás usando para capturar la pantalla?
Matt
@Matt LICEcap para Windows
Luis Mendo
Pregunta: ¿Qué sucede si creo una lista de reproducción llamada "wner"? ¿Seguirá funcionando?
HyperNeutrino
@HyperNeutrino Buen punto. Lo he corregido. Por cierto, el número de videos en la primera lista ha cambiado
Luis Mendo
4

bash + curl + gnu grep, 32 bytes

Finalmente, pruebe Code Golf:

curl -s $1|grep -Po \\d+(?= vid)
  • Úselo curl -spara descargar sin ningún resultado adicional.
  • Canalice la salida a grep (perl regex) que generará solo la coincidencia
    • Coincide con el primer número que sigue "vid"

Esto se explica por cómo haría esto prácticamente.

Sudo Bash
fuente
Buena primera presentación!
HyperNeutrino
3

PowerShell, 55 bytes

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

Navega hasta el sitio. Convierta el objeto en una cadena que es la fuente html. Analice la cadena que tiene un número que precede a "vid" con regex.

La lógica funciona con ambos casos de prueba.

Mate
fuente
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
fuente