Comptez les vidéos dans une liste de lecture Youtube

12

Défi

Étant donné une liste de lecture Youtube, affichez le nombre de vidéos qu'elle contient.

E / S

La liste de lecture sera donnée sous forme d'URL; par exemple, https://www.youtube.com/playlist?list=PL_3jnZNPYn7qUatgDYBS5NShkfXoehSRC(c'est une playlist qu'un ami m'a envoyée pour essayer de me faire écouter de la K-Pop parce qu'elle est obsédée par ça et je ne l'aime pas: P)

Le lien vers une playlist est de la forme https://www.youtube.com/playlist?list=<id>. L'entrée est l'URL, pas l'ID.

La sortie doit être un entier unique indiquant le nombre de vidéos dans cette liste de lecture. Vous pouvez soit afficher le nombre total de vidéos ou le nombre de vidéos non supprimées, selon celle qui vous convient le mieux.

Cas de test

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

N'hésitez pas à ajouter plus de cas de test.

HyperNeutrino
la source
6
Chapeau pour avoir trouvé la manière la plus sournoise de demander aux gens de vous faire une bibliothèque pour compter les vidéos dans une playlist YouTube.
Stevoisiak
2
Je viens de résister à l'envie d'ajouter une playlist de rickroll. Ou la playlist "Dank Memes".
CAD97
Hors sujet: je serais plus intéressé par une liste de toutes les vidéos qu'une chaîne youtube peut offrir. Le code source ne semble pas inclure cela naturellement.
phil294
@Blauhirn C'est une idée intéressante. Vous pourriez peut-être vous lancer un défi à ce sujet.
HyperNeutrino

Réponses:

9

05AB1E , 22 octets

Suppose que l' URL est transmise sans le https://.

Code:

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

Utilise l' encodage 05AB1E . Ne peut être essayé en ligne, en raison de l'accès à Internet.

Explication:

.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 

Voici ce que j'obtiens en exécutant en ligne de commande:

entrez la description de l'image ici

Adnan
la source
1
De quelle sorte de ligne de commande s'agit-il? Je ne l'ai jamais vu auparavant.
Okx
2
@Okx It's cmder
Adnan
Comment ça marche?
Stevoisiak
@StevenVascellaro Merci pour le rappel, j'ai ajouté une explication.
Adnan
6

Scala 2.12, 138 octets

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

Enregistrez-le something.scalaet exécutez-le scala something.scala {url}.

entrez la description de l'image ici

Aria Axe
la source
6

JS (ES6), 68 octets

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

Collez-le dans votre console sur youtube.com pour essayer:

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

la source
6

MATL , 15 octets

Merci à Hyper Neutrino d' avoir trouvé une erreur, maintenant corrigée.

Xi'wner">\n'XXn

L'entrée est une chaîne entourée de guillemets simples. La sortie est le nombre de vidéos non supprimées.

Voici un exemple exécuté avec les deux cas de test. Au 13 juin 2017, le nombre de vidéos non supprimées dans les listes de lecture était respectivement de 12 et 1.

entrez la description de l'image ici

Comment ça fonctionne

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
la source
Ha, regex intelligent!
rubik
Qu'utilisez-vous pour capturer l'écran?
Matt
@Matt LICEcap pour Windows
Luis Mendo
Question: Et si je crée une liste de lecture appelée "wner"? Cela fonctionnera-t-il toujours?
HyperNeutrino
@HyperNeutrino Bon point. Je l'ai corrigé. BTW, le nombre de vidéos dans la première liste a changé
Luis Mendo
4

bash + curl + gnu grep, 32 octets

Enfin, essayez le Code Golf:

curl -s $1|grep -Po \\d+(?= vid)
  • Utilisez curl -spour télécharger sans aucune sortie supplémentaire.
  • Dirigez la sortie vers grep (perl regex) qui ne sortira que la correspondance
    • Correspond au premier nombre qui procède "vid"

C'est le golf de la façon dont je le ferais pratiquement.

Sudo Bash
la source
Belle première soumission!
HyperNeutrino
3

PowerShell, 55 octets

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

Accédez au site. Convertissez l'objet en une chaîne qui est la source html. Analyser la chaîne qui a un nombre précédant "vid" avec regex.

La logique fonctionne avec les deux cas de test.

Mat
la source
0

Haskell 161 octets

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
la source