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.


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


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


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"))

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

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.


Ł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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.