Perangkat lunak ini untuk penggunaan pribadi saya, dan saya tidak bertanggung jawab atas cara Anda menggunakannya. Jadi, jauhi masalah, buatlah toples dan bukan perang!
Salah satu aktivitas pekerjaan saya adalah menyebarkan berita tentang Redis, dan ini juga dilakukan melalui video dan webinar langsung. Baru-baru ini saya melakukan siaran langsung di LinkedIn, menyiarkan siaran langsung saya dari Zoom, dan tidak selalu saya ingat untuk menekan tombol "Rekam".
Namun, dan untungnya, LinkedIn menyimpan rekaman siaran langsung saya sebagai "Rekaman siaran langsung sebelumnya", sehingga dapat ditonton nanti. Saya tidak tahu tentang retensi yang disediakan LinkedIn untuk video tersebut, tapi saya yakin LinkedIn tidak menyediakan cara untuk mendownload video tersebut.
Jadi, saya mencari-cari di Google, dan saya tidak menemukan sesuatu yang serius. Pengunduhan YouTube, pengunduh Pinterest, pengunduh Facebook, tetapi semua pengunduh yang terkait dengan LinkedIn hanyalah palsu.
Jadi, saya perlu membuat Pengunduh Video LinkedIn saya sendiri! ?
Sekarang, idenya adalah... Saya rasa saya tidak akan menemukan tautan (src atau href) ke beberapa video ke dalam sumber 1 dengan format tertentu (mp4, webm, vid mkv, avi, mov, dan seterusnya) , tapi saya rasa saya akan menemukan sesuatu yang berhubungan dengan streaming video... tetapi tidak di sumbernya 1 , pasti di tingkat jaringan.
Jadi, saya membuka Chrome dan bilah DevTools-nya, memilih panel Jaringan, lalu mengetik (menempelkan) URL acara video LinkedIn saya di bilah alamat dan menekan enter!
Dan itulah yang saya dapatkan.
Sekarang saya perlu menemukan sesuatu yang mengingatkan saya sehubungan dengan video/stream/potongan/biner/apa pun... jadi saya mulai menggulir panel Jaringan dan setelah beberapa gulir saya mendengar bel pertama! ?
Lihat lebih baik di gulungan yang sama, dan saya juga menemukan informasi lainnya. ?
Ya, metadata, tapi saya tahu kita sedang mencapainya! Tapi mari kita lihat apa yang kita dapatkan sejauh ini:
Sekarang kita membutuhkan pecahan itu.
Gulir ke bawah sedikit lagi dan ini dia fragmen pertama. ?
Terakhir, format biner! Pasti merupakan bagian dari filmnya.
Pemeriksaan cepat dengan curl...
Buka terminal, salin & tempel...
foogaro@MBP-di-Luigi tmp % curl ' https://streamweu-livectorprodmedia17-euwe.licdn.com/44eefc72-771d-4bfd-8985-aede1310be0f/L4E609f69d951866001-livemanifest.ism/QualityLevels(3200000)/Fragments(video=65886000,format=m3u8-aapl-v3,audiotrack=audio_und) ' --compressed
Warning: Binary output can mess up your terminal. Use " --output - " to tell
Warning: curl to output it to your terminal anyway, or consider " --output
Warning: <FILE> " to save to a file.
foogaro@MBP-di-Luigi tmp % curl ' https://streamweu-livectorprodmedia17-euwe.licdn.com/44eefc72-771d-4bfd-8985-aede1310be0f/L4E609f69d951866001-livemanifest.ism/QualityLevels(3200000)/Fragments(video=65886000,format=m3u8-aapl-v3,audiotrack=audio_und) ' --compressed -O
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 158k 100 158k 0 0 868k 0 --:--:-- --:--:-- --:--:-- 924k
foogaro@MBP-di-Luigi tmp % ll
total 320
drwxr-xr-x 3 foogaro staff 96 24 Ago 22:37 .
drwxr-xr-x 6 foogaro staff 192 24 Ago 22:37 ..
-rw-r--r-- 1 foogaro staff 162808 24 Ago 22:37 Fragments(video=65886000,format=m3u8-aapl-v3,audiotrack=audio_und)
foogaro@MBP-di-Luigi tmp % file Fragments ( video=65886000,format=m3u8-aapl-v3,audiotrack=audio_und )
Fragments(video=65886000,format=m3u8-aapl-v3,audiotrack=audio_und): MPEG transport stream data
foogaro@MBP-di-Luigi tmp % curl ' https://streamweu-livectorprodmedia17-euwe.licdn.com/44eefc72-771d-4bfd-8985-aede1310be0f/L4E609f69d951866001-livemanifest.ism/QualityLevels(3200000)/Fragments(video=65886000,format=m3u8-aapl-v3,audiotrack=audio_und) ' --compressed -o video.mpeg
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 158k 100 158k 0 0 926k 0 --:--:-- --:--:-- --:--:-- 981k
foogaro@MBP-di-Luigi tmp % ll
total 640
drwxr-xr-x 4 foogaro staff 128 24 Ago 22:39 .
drwxr-xr-x 6 foogaro staff 192 24 Ago 22:37 ..
-rw-r--r-- 1 foogaro staff 162808 24 Ago 22:37 Fragments(video=65886000,format=m3u8-aapl-v3,audiotrack=audio_und)
-rw-r--r-- 1 foogaro staff 162808 24 Ago 22:39 video.mpeg
foogaro@MBP-di-Luigi tmp %
Mari kita lihat apakah itu video nyata...
Ini adalah video nyata, dan berdurasi sekitar 2 detik yang sesuai dengan TARGETDURASI yang kami temukan di daftar fragmen lengkap. ?
Terus gulir dan ini dia.
Fragmen, saya melihat fragmen di mana-mana.
Saya tidak akan menjelaskan kodenya, Anda dapat melihatnya sendiri, tetapi saya dapat memberi tahu Anda apa yang diperlukan:
Implementasinya harus dipertimbangkan dengan upaya terbaik, yang berarti ini berfungsi di komputer saya!
Bagian terakhir dari implementasi, mengunduh/streaming kembali file, dapat dilakukan berkat @swathisprasad (Swathi Prasad) dan repo-nya https://github.com/swathisprasad/download-using-streaming-response-body
Selebihnya tentu berkat StackOverflow.
Cobalah dengan buruh pelabuhan jika Anda ingin:
foogaro@MBP-di-Luigi linkedin-video-downloader % docker run -it --rm=true -p 8080:8080 foogaro/linkedin-video-downloader
. ____ _ __ _ _
/ \ / ___ ' _ __ _ _(_)_ __ __ _
( ( )___ | ' _ | ' _| | ' _ / _ ` |
\ / ___) | | _) | | | | | || (_ | | ) ) ) )
' |____| .__|_| |_|_| |___, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.0)
2022-08-24 22:57:01.107 INFO 1 --- [ main] c.foogaro.data.LinkedInVideoApplication : Starting LinkedInVideoApplication v1.0.0 using Java 11.0.16.1 on c543811fe9f3 with PID 1 (/app/app.jar started by root in /app)
2022-08-24 22:57:01.121 INFO 1 --- [ main] c.foogaro.data.LinkedInVideoApplication : No active profile set, falling back to 1 default profile: "default"
2022-08-24 22:57:03.037 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2022-08-24 22:57:03.060 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2022-08-24 22:57:03.060 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.63]
2022-08-24 22:57:03.171 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2022-08-24 22:57:03.171 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1969 ms
2022-08-24 22:57:03.900 INFO 1 --- [ main] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page template: index
2022-08-24 22:57:04.286 INFO 1 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 1 endpoint(s) beneath base path ' /actuator '
2022-08-24 22:57:04.363 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ' '
2022-08-24 22:57:04.391 INFO 1 --- [ main] c.foogaro.data.LinkedInVideoApplication : Started LinkedInVideoApplication in 3.931 seconds (JVM running for 4.532)
2022-08-24 22:57:05.282 INFO 1 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet ' dispatcherServlet '
2022-08-24 22:57:05.283 INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet ' dispatcherServlet '
2022-08-24 22:57:05.289 INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms
2022-08-24 22:57:21.779 INFO 1 --- [nio-8080-exec-7] c.f.d.c.LinkedInVideoController : Steaming video download as: linkedin-video-1661421441774.zip
2022-08-24 22:57:21.800 INFO 1 --- [ taskExecutor-1] c.f.d.c.LinkedInVideoController : Video ID: c50f2327-7fa7-4cc8-8a2c-35711eb5296d/L4E60a4445e9d065000
2022-08-24 22:57:21.800 INFO 1 --- [ taskExecutor-1] c.f.d.c.LinkedInVideoController : Quality Level: 3200000
2022-08-24 22:57:21.991 INFO 1 --- [ taskExecutor-1] c.f.d.c.LinkedInVideoController : Number of video fragments: 2154
Terima kasih telah membaca sejauh ini!
Jika Anda menyukai atau merasa bermanfaat, beri saya bintang!
PR sangat diterima, baik di frontend maupun backend! ?
Saya berbohong, saya memang mencari link video di sumber halaman! ? ↩ ↩ 2