นับวิดีโอในเพลย์ลิสต์ Youtube


12

ท้าทาย

ระบุเพลย์ลิสต์ Youtube ให้ส่งออกจำนวนวิดีโอในนั้น

I / O

เพลย์ลิสต์จะได้รับเป็น URL ตัวอย่างเช่นhttps://www.youtube.com/playlist?list=PL_3jnZNPYn7qUatgDYBS5NShkfXoehSRC(นี่เป็นเพลย์ลิสต์ที่เพื่อนส่งให้ฉันลองให้ฉันฟัง K-Pop เพราะเธอหมกมุ่นอยู่กับมันและฉันไม่ชอบ: P)

https://www.youtube.com/playlist?list=<id>เชื่อมโยงไปยังรายการที่เป็นของแบบฟอร์ม ข้อมูลที่ป้อนคือ URL ไม่ใช่ ID

ผลลัพธ์จะเป็นจำนวนเต็มเดียวที่ระบุจำนวนวิดีโอที่อยู่ในเพลย์ลิสต์นี้ คุณสามารถส่งออกจำนวนวิดีโอทั้งหมดหรือจำนวนวิดีโอที่ไม่ถูกลบแล้วแต่ว่าวิดีโอใดที่คุณเล่นได้มากกว่า

กรณีทดสอบ

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

อย่าลังเลที่จะเพิ่มกรณีทดสอบเพิ่มเติม


6
ปิดบังการค้นหาวิธีที่ยากที่สุดในการขอให้คนทำห้องสมุดให้คุณนับวิดีโอในเพลย์ลิสต์ของ YouTube
Stevoisiak

2
ฉันแค่ต่อต้านความอยากที่จะเพิ่มรายการเพลง rickroll หรือเพลย์ลิสต์ "Dank Memes"
CAD97

ปิดหัวข้อ: ฉันจะสนใจรายการวิดีโอทุกช่องที่มีอยู่ใน YouTube ซอร์สโค้ดดูเหมือนจะไม่รวมสิ่งนี้ตามธรรมชาติ
phil294

@Blauhirn นั่นเป็นความคิดที่น่าสนใจ บางทีคุณอาจจะท้าทายเกี่ยวกับเรื่องนี้
HyperNeutrino

คำตอบ:


9

05AB1E , 22 ไบต์

สันนิษฐานว่าURL ที่ถูกส่งผ่านโดยไม่ต้องhttps://

รหัส:

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

ใช้การเข้ารหัส05AB1E ไม่สามารถลองออนไลน์ได้เนื่องจากการเข้าถึงอินเทอร์เน็ต

คำอธิบาย:

.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 

นี่คือสิ่งที่ฉันได้รับเมื่อทำงานในบรรทัดคำสั่ง:

ป้อนคำอธิบายรูปภาพที่นี่


1
บรรทัดคำสั่งประเภทใด ฉันไม่เคยเห็นมาก่อน
Okx

2
@Okx It's cmder
Adnan

มันทำงานยังไง?
Stevoisiak

@StevenVascellaro ขอบคุณสำหรับการเตือนฉันได้เพิ่มคำอธิบาย
Adnan

6

สกาล่า 2.12, 138 ไบต์

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

บันทึกไปและดำเนินการโดยsomething.scalascala something.scala {url}

ป้อนคำอธิบายรูปภาพที่นี่


6

JS (ES6), 68 ไบต์

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

วางสิ่งนี้ลงในคอนโซลของคุณบน youtube.com เพื่อลอง:

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

6

MATL , 15 ไบต์

ขอบคุณHyper Neutrino ที่ค้นหาข้อผิดพลาดได้รับการแก้ไขแล้ว

Xi'wner">\n'XXn

อินพุตเป็นสตริงที่ล้อมรอบด้วยเครื่องหมายคำพูดเดี่ยว ผลลัพธ์คือจำนวนวิดีโอที่ไม่ถูกลบ

นี่คือตัวอย่างการรันด้วยกรณีทดสอบสองกรณี ณ วันที่ 13 มิถุนายน 2017 จำนวนวิดีโอที่ไม่ถูกลบในเพลย์ลิสต์คือ 12 และ 1 ตามลำดับ

ป้อนคำอธิบายรูปภาพที่นี่

มันทำงานอย่างไร

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

ฮา regex ฉลาด!
rubik

คุณใช้อะไรในการจับภาพหน้าจอ
Matt

@ Matt LICEcapสำหรับ Windows
หลุยส์ Mendo

คำถาม: ถ้าฉันสร้างรายการที่เรียกว่า"wner"? มันจะยังคงทำงานอยู่หรือไม่
HyperNeutrino

@HyperNeutrino จุดที่ดี ฉันได้แก้ไขแล้ว BTW จำนวนวิดีโอในรายการแรกมีการเปลี่ยนแปลง
Luis Mendo

4

bash + curl + gnu grep, 32 ไบต์

ในที่สุดก็ให้รหัสกอล์ฟไป:

curl -s $1|grep -Po \\d+(?= vid)
  • ใช้curl -sเพื่อดาวน์โหลดโดยไม่ต้องเพิ่มเอาต์พุตใด ๆ
  • ไพพ์เอาต์พุตไปยัง grep (perl regex) ซึ่งจะเอาต์พุตเฉพาะการจับคู่
    • จับคู่หมายเลขแรกที่ได้รับ "vid"

นี่คือกอล์ฟจากวิธีที่ฉันจะทำจริง


ส่งแรกที่ดี!
HyperNeutrino

3

PowerShell ขนาด 55 ไบต์

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

เรียกดูเว็บไซต์ แปลงวัตถุเป็นสตริงซึ่งเป็นแหล่ง html แยกสตริงที่มีตัวเลขนำหน้า "vid" ด้วย regex

ลอจิกใช้ได้กับทั้งสองกรณีทดสอบ


0

Haskell 161 ไบต์

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.