Zähle die Videos in einer Youtube Playlist


12

Herausforderung

Gib bei einer vorgegebenen Youtube-Wiedergabeliste die Anzahl der darin enthaltenen Videos aus.

I / O

Die Wiedergabeliste wird als URL angegeben. Zum Beispiel https://www.youtube.com/playlist?list=PL_3jnZNPYn7qUatgDYBS5NShkfXoehSRC(dies ist eine Wiedergabeliste, die mir eine Freundin geschickt hat, um mich dazu zu bringen, K-Pop zu hören, weil sie davon besessen ist und es mir nicht gefällt: P)

Der Link zu einer Wiedergabeliste hat die Form https://www.youtube.com/playlist?list=<id>. Die Eingabe ist die URL, nicht die ID.

Die Ausgabe soll eine einzelne Ganzzahl sein, die angibt, wie viele Videos in dieser Wiedergabeliste enthalten sind. Sie können entweder die Gesamtzahl der Videos oder die Anzahl der nicht gelöschten Videos ausgeben, je nachdem, welches für Sie besser ist.

Testfälle

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

Fühlen Sie sich frei, weitere Testfälle hinzuzufügen.


6
Hut ab vor der Suche nach dem schlauesten Weg, Leute zu bitten, eine Bibliothek für das Zählen von Videos in einer YouTube-Wiedergabeliste zu erstellen.
Stevoisiak

2
Ich habe mich einfach dem Drang widersetzt, eine Rickroll-Playlist hinzuzufügen. Oder die Playlist "Dank Memes".
CAD97

Abseits des Themas: Es würde mich mehr interessieren, wie man alle Videos auflistet, die ein YouTube-Kanal zu bieten hat. Der Quellcode scheint dies natürlich nicht zu enthalten.
phil294

@Blauhirn Das ist eine interessante Idee. Vielleicht könnten Sie das herausfordern.
HyperNeutrino

Antworten:


9

05AB1E , 22 Bytes

Angenommen, die URL wird ohne das übergeben https://.

Code:

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

Verwendet die 05AB1E- Codierung. Kann wegen Internetzugang nicht online ausprobiert werden.

Erläuterung:

.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 

Das bekomme ich, wenn ich in der Kommandozeile starte:

Bildbeschreibung hier eingeben


1
Was ist das für eine Befehlszeile? Ich habe es noch nie gesehen.
Ok,

2
@Okx Es ist cmder
Adnan

Wie funktioniert es?
Stevoisiak

@StevenVascellaro Danke für die Erinnerung, ich habe eine Erklärung hinzugefügt.
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))

Speichern Sie es something.scalaund führen Sie es aus scala something.scala {url}.

Bildbeschreibung hier eingeben


6

JS (ES6), 68 Bytes

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

Fügen Sie dies in Ihre Konsole auf youtube.com ein, um Folgendes zu versuchen:

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

6

MATL , 15 Bytes

Vielen Dank an Hyper Neutrino für das Auffinden eines Fehlers, der jetzt korrigiert wurde.

Xi'wner">\n'XXn

Die Eingabe ist eine Zeichenfolge in einfachen Anführungszeichen. Die Ausgabe ist die Anzahl der nicht gelöschten Videos.

Hier ist ein Beispiel mit den beiden Testfällen. Ab dem 13. Juni 2017 befinden sich 12 bzw. 1 nicht gelöschte Videos in den Wiedergabelisten.

Bildbeschreibung hier eingeben

Wie es funktioniert

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

Ha, kluger Regex!
Rubik

Womit erfassen Sie den Bildschirm?
Matt

@ Matt LICEcap für Windows
Luis Mendo

Frage: Was passiert, wenn ich eine Wiedergabeliste namens erstelle "wner"? Wird es noch funktionieren?
HyperNeutrino

@HyperNeutrino Guter Punkt. Ich habe es korrigiert. Übrigens hat sich die Anzahl der Videos in der ersten Liste geändert
Luis Mendo

4

Bash + Curl + Gnu Grep, 32 Bytes

Probieren Sie endlich Code Golf aus:

curl -s $1|grep -Po \\d+(?= vid)
  • Verwenden Sie curl -szum Download ohne zusätzliche Ausgabe.
  • Leiten Sie die Ausgabe an grep (perl regex) weiter, wodurch nur die Übereinstimmung ausgegeben wird
    • Stimmen Sie mit der ersten Zahl überein, die mit "vid" fortfährt

Das ist golfen, wie ich das praktisch machen würde.


Schöne erste Einreichung!
HyperNeutrino

3

PowerShell, 55 Bytes

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

Navigieren Sie zur Site. Konvertieren Sie das Objekt in eine Zeichenfolge, bei der es sich um die HTML-Quelle handelt. Analysieren Sie die Zeichenfolge, die eine Zahl vor "vid" mit Regex hat.

Die Logik funktioniert mit beiden Testfällen.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.