Policz filmy na playliście na Youtube

12

Wyzwanie

Biorąc pod uwagę listę odtwarzania na Youtube, wypisz na niej liczbę filmów.

I / O

Lista odtwarzania zostanie podana jako adres URL; na przykład https://www.youtube.com/playlist?list=PL_3jnZNPYn7qUatgDYBS5NShkfXoehSRC(jest to lista odtwarzania, którą wysłała mi przyjaciółka, aby zmusić mnie do słuchania K-Popu, ponieważ ma na jej punkcie obsesję i nie podoba mi się to: P)

Link do listy odtwarzania ma formę https://www.youtube.com/playlist?list=<id>. Dane wejściowe to adres URL, a nie identyfikator.

Wyjście ma być pojedynczą liczbą całkowitą wskazującą, ile filmów znajduje się na tej liście odtwarzania. Możesz podać całkowitą liczbę filmów lub liczbę filmów, które nie zostały usunięte, w zależności od tego, który z nich jest dla Ciebie bardziej golfowy.

Przypadki testowe

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

Dodaj więcej przypadków testowych.

HyperNeutrino
źródło
6
Czapki z głów za znalezienie najbardziej podstępnego sposobu proszenia ludzi o utworzenie biblioteki do liczenia filmów na playliście YouTube.
Stevoisiak,
2
Po prostu oparłem się potrzebie dodania listy odtwarzania rickroll. Lub lista odtwarzania „Dank Memes”.
97 CAD
Poza tematem: Byłbym bardziej zainteresowany listą wszystkich filmów, które ma do zaoferowania kanał YouTube. Wygląda na to, że kod źródłowy nie zawiera tego w naturalny sposób.
phil294
@Blauhirn To ciekawy pomysł. Może mógłbyś podjąć wyzwanie.
HyperNeutrino

Odpowiedzi:

9

05AB1E , 22 bajty

Zakłada się, że adres URL jest przekazywane bezhttps:// .

Kod:

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

Wykorzystuje kodowanie 05AB1E . Nie można wypróbować online ze względu na dostęp do Internetu.

Wyjaśnienie:

.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 

Oto, co otrzymuję, gdy uruchamiam się z wiersza poleceń:

wprowadź opis zdjęcia tutaj

Adnan
źródło
1
Co to za linia poleceń? Nie widziałem tego wcześniej.
Okx,
2
@Okx It's cmder
Adnan
Jak to działa?
Stevoisiak
@StevenVascellaro Dziękuję za przypomnienie, dodałem wyjaśnienie.
Adnan
6

Scala 2.12, 138 bajtów

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

Zapisz something.scalai uruchom scala something.scala {url}.

wprowadź opis zdjęcia tutaj

Aria Axe
źródło
6

JS (ES6), 68 bajtów

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

Wklej to do konsoli na youtube.com, aby spróbować:

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

źródło
6

MATL , 15 bajtów

Dzięki Hyper Neutrino za znalezienie błędu, teraz poprawionego.

Xi'wner">\n'XXn

Dane wejściowe to ciąg zamknięty pojedynczymi cudzysłowami. Dane wyjściowe to liczba nieusuniętych filmów.

Oto przykładowy przebieg dwóch przypadków testowych. Według stanu na 13 czerwca 2017 r. Liczba nieusuniętych filmów na listach odtwarzania wynosi odpowiednio 12 i 1.

wprowadź opis zdjęcia tutaj

Jak to działa

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
źródło
Ha, sprytne wyrażenie!
rubik
Czego używasz do przechwytywania ekranu?
Matt
@Matt LICEcap dla Windows
Luis Mendo
Pytanie: Co się stanie, jeśli utworzę listę odtwarzania o nazwie "wner"? Czy to nadal będzie działać?
HyperNeutrino,
@HyperNeutrino Dobra uwaga. Poprawiłem to. BTW, liczba filmów na pierwszej liście uległa zmianie
Luis Mendo
4

bash + curl + gnu grep, 32 bajty

Wreszcie, wypróbuj Code Golf:

curl -s $1|grep -Po \\d+(?= vid)
  • Służy curl -sdo pobierania bez żadnych dodatkowych danych wyjściowych.
  • Potokuj wyjście do grep (perl regex), który wyświetli tylko dopasowanie
    • Dopasuj pierwszą liczbę, która poprzedza „vid”

To zależy od tego, jak zrobiłbym to praktycznie.

Sudo Bash
źródło
Ładne pierwsze zgłoszenie!
HyperNeutrino
3

PowerShell, 55 bajtów

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

Przejdź do strony. Konwertuj obiekt na ciąg znaków, który jest źródłem HTML. Parsuj ciąg znaków, który ma liczbę poprzedzającą „vid” za pomocą wyrażenia regularnego.

Logika działa z obydwoma przypadkami testowymi.

Matt
źródło
0

Haskell 161 bajtów

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
źródło