Conta i video in una playlist di Youtube


12

Sfida

Data una playlist di Youtube, genera il numero di video in essa contenuti.

I / O

La playlist verrà fornita come un URL; per esempio, https://www.youtube.com/playlist?list=PL_3jnZNPYn7qUatgDYBS5NShkfXoehSRC(questa è una playlist che mi ha inviato un amico per cercare di farmi ascoltare K-Pop perché è ossessionata da questo e non mi piace: P)

Il collegamento a una playlist è nel modulo https://www.youtube.com/playlist?list=<id>. L'input è l'URL, non l'ID.

L'output deve essere un singolo numero intero che indica quanti video ci sono in questa playlist. Puoi generare il numero totale di video o il numero di video non eliminati, a seconda di quale dei due è più golfy per te.

Casi test

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

Sentiti libero di aggiungere altri casi di test.


6
Tanto di cappello per trovare il modo più subdolo di chiedere alle persone di farti una biblioteca per contare i video in una playlist di YouTube.
Stevoisiak,

2
Ho appena resistito alla tentazione di aggiungere una playlist di rickroll. O la playlist "Dank Memes".
CAD97

Fuori tema: sarei più interessato a un elenco di tutti i video che un canale di YouTube ha da offrire. Il codice sorgente non sembra includerlo naturalmente.
phil294,

@Blauhirn È un'idea interessante. Forse potresti fare una sfida al riguardo.
HyperNeutrino,

Risposte:


9

05AB1E , 22 byte

Presuppone che l' URL venga passato senza il https://.

Codice:

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

Utilizza la codifica 05AB1E . Non può essere provato online, a causa dell'accesso a Internet.

Spiegazione:

.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 

Questo è quello che ottengo quando corro nella riga di comando:

inserisci qui la descrizione dell'immagine


1
Che tipo di riga di comando è quella? Non l'ho mai visto prima.
Okx,

2
@Okx It's cmder
Adnan,

Come funziona?
Stevoisiak,

@StevenVascellaro Grazie per il promemoria, ho aggiunto una spiegazione.
Adnan,

6

Scala 2.12, 138 byte

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

Salvalo something.scalae corri scala something.scala {url}.

inserisci qui la descrizione dell'immagine


6

JS (ES6), 68 byte

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

Incollalo nella tua console su youtube.com per provare:

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

6

MATL , 15 byte

Grazie a Hyper Neutrino per aver trovato un errore, ora corretto.

Xi'wner">\n'XXn

L'input è una stringa racchiusa tra virgolette singole. L'output è il numero di video non cancellati.

Ecco un esempio eseguito con i due casi di test. A partire dal 13 giugno 2017 il numero di video non eliminati nelle playlist è rispettivamente 12 e 1.

inserisci qui la descrizione dell'immagine

Come funziona

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

Ah, regex intelligente!
Rubik,

Cosa stai usando per catturare lo schermo?
Matt,

@Matt LICEcap per Windows
Luis Mendo,

Domanda: cosa succede se creo una playlist chiamata "wner"? Funzionerà ancora?
HyperNeutrino,

@HyperNeutrino Un buon punto. L'ho corretto. A proposito, il numero di video nella prima lista è cambiato
Luis Mendo il

4

bash + curl + gnu grep, 32 byte

Infine, provando Code Golf:

curl -s $1|grep -Po \\d+(?= vid)
  • Utilizzare curl -sper scaricare senza alcun output aggiuntivo.
  • Inoltra l'output a grep (perl regex) che produrrà solo la corrispondenza
    • Trova il primo numero che procede "vid"

Questo è golfato da come lo farei praticamente.


Bella prima presentazione!
HyperNeutrino,

3

PowerShell, 55 byte

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

Naviga nel sito. Converti l'oggetto in una stringa che è l'origine HTML. Analizza la stringa che ha un numero che precede "vid" con regex.

La logica funziona con entrambi i casi di test.


0

Haskell 161 byte

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.