Bir Youtube Oynatma Listesindeki videoları sayın


12

Meydan okuma

Bir Youtube oynatma listesi verildiğinde, içindeki video sayısını çıkın.

I / O

Oynatma listesi URL olarak verilecektir; örneğin, https://www.youtube.com/playlist?list=PL_3jnZNPYn7qUatgDYBS5NShkfXoehSRC(bu, bir arkadaşımın bana K-Pop'u dinlememi denemek için gönderdiği bir çalma listesidir, çünkü takıntılıdır ve sevmiyorum: P)

Bir oynatma listesine bağlantı şu şekildedir https://www.youtube.com/playlist?list=<id>. Girdi URL değil, URL'dir.

Çıktı, bu oynatma listesinde kaç video olduğunu gösteren tek bir tam sayı olmalıdır. Hangisi sizin için daha golfçü olursa olsun, toplam video sayısını veya silinmemiş video sayısını çıkarabilirsiniz.

Test Durumları

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

Daha fazla test örneği eklemekten çekinmeyin.


6
İnsanlardan size bir YouTube oynatma listesindeki videoları saymanız için bir kitaplık yapmalarını istemenin en sinsi yolunu bulmak için şapka çıkarın.
Stevoisiak

2
Bir rickroll çalma listesi ekleme dürtüsüne direndim. Veya "Dank Memes" çalma listesi.
CAD97

Konu dışı: Bir youtube kanalının sunduğu tüm videoları listelemekle daha fazla ilgilenirim. Kaynak kodu bunu doğal olarak içermiyor gibi görünüyor.
phil294

@Blauhirn Bu ilginç bir fikir. Belki bu konuda bir meydan okuma yapabilirsiniz.
HyperNeutrino

Yanıtlar:


9

05AB1E , 22 bayt

Varsayar URL geçirilir olmadanhttps:// .

Kod:

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

05AB1E kodlamasını kullanır . İnternet erişimi nedeniyle çevrimiçi denenemez.

Açıklama:

.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 

Komut satırında çalışırken ne olsun:

resim açıklamasını buraya girin


1
Bu ne tür bir komut satırı? Daha önce görmedim.
Okx

2
@Okx Bu cmder
Adnan

O nasıl çalışır?
Stevoisiak

@StevenVascellaro Hatırlatma için teşekkürler, bir açıklama ekledim.
Adnan

6

Scala 2.12, 138 bayt

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

Kaydedin something.scalave çalıştırın scala something.scala {url}.

resim açıklamasını buraya girin


6

JS (ES6), 68 bayt

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

Denemek için bunu youtube.com'daki konsolunuza yapıştırın:

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

6

MATL , 15 bayt

Hata düzelttiği için Hyper Neutrino'ya teşekkürler , şimdi düzeltildi.

Xi'wner">\n'XXn

Giriş, tek tırnak içine alınmış bir dizedir. Çıktı, silinmemiş videoların sayısıdır.

İşte iki test senaryosuyla ilgili bir örnek . 13 Haziran 2017 itibarıyla, oynatma listelerindeki silinen videoların sayısı sırasıyla 12 ve 1'dir.

resim açıklamasını buraya girin

Nasıl çalışır

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, akıllıca ifade!
rubik

Ekranı yakalamak için ne kullanıyorsunuz?
Mat

@Matt LICEcap Windows için
Luis Mendo

Soru: adlı bir çalma listesi oluşturursam ne olur "wner"? Hala çalışacak mı?
HyperNeutrino

@HyperNeutrino İyi bir nokta. Ben düzelttim. BTW, ilk listedeki video sayısı değişti
Luis Mendo

4

bash + curl + gnu grep, 32 bayt

Son olarak Code Golf'e bir şans verin:

curl -s $1|grep -Po \\d+(?= vid)
  • curl -sEkstra çıktı olmadan indirmek için kullanın .
  • Çıkışı grep'e (perl regex) borulayın ve sadece eşleşme çıktısını alın
    • "Vid" i geçen ilk sayıyı eşleştirin

Bu pratikte nasıl yapacağımı golf.


Güzel ilk teslim!
HyperNeutrino

3

PowerShell, 55 Bayt

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

Siteye göz atın. Nesneyi html kaynağı olan bir dizeye dönüştürün. Regex ile "vid" den önce bir sayı içeren dizeyi ayrıştırın.

Mantık her iki test vakasında da çalışır.


0

Haskell 161 bayt

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.