هذا البرنامج مخصص لاستخدامي الشخصي، ولست مسؤولاً عن الطريقة التي ستستخدمه بها. لذا، ابق بعيدًا عن المشاكل، واصنع الجرار وليس الحروب!
تتمثل إحدى أنشطة وظيفتي في نشر المعلومات حول Redis، وينطبق هذا أيضًا على الفيديو والندوات المباشرة عبر الإنترنت. لقد كنت أعيش مؤخرًا على موقع LinkedIn، وأبث بثًا مباشرًا من Zoom، ولا أتذكر دائمًا الضغط على زر "التسجيل".
ومع ذلك، ولحسن الحظ، يحتفظ موقع LinkedIn بتسجيل البث المباشر الخاص بي باسم "بث مباشر تم تسجيله مسبقًا"، بحيث يمكن مشاهدته لاحقًا. ليس لدي أي فكرة عن الاحتفاظ الذي يوفره LinkedIn لمقاطع الفيديو هذه، ولكنني متأكد من أنه لا يوفر طريقة لتنزيل مقاطع الفيديو هذه.
لذلك، بحثت في Google، ولم أتمكن من العثور على أي شيء جدي. تنزيل YouTube، وتنزيل Pinterest، وتنزيل Facebook، ولكن جميع برامج التنزيل المرتبطة بـ LinkedIn كانت مزيفة فقط.
وبالتالي، أحتاج إلى إنشاء أداة تنزيل مقاطع الفيديو الخاصة بي على LinkedIn! ؟
الآن، كانت الفكرة... لا أعتقد أنني سأجد رابطًا (src أو href) لبعض مقاطع الفيديو في المصدر 1 بتنسيق ما (mp4، webm، vid mkv، avi، mov وما إلى ذلك) ، لكنني أعتقد أنني سأجد شيئًا متعلقًا ببث الفيديو... ولكن ليس في المصدر 1 ، بالتأكيد على مستوى الشبكة.
لذا، فتحت Chrome وشريط DevTools الخاص به، وحددت لوحة الشبكة، ثم كتبت (ألصقت) عنوان URL لحدث الفيديو الخاص بي على LinkedIn في شريط العناوين وضغطت على مفتاح الإدخال!
وهذا ما حصلت عليه.
أحتاج الآن إلى العثور على شيء يلفت انتباهي فيما يتعلق بالفيديو/الدفق/القطع/الثنائي/أي شيء... لذلك بدأت في التمرير على لوحة الشبكة وبعد تمريرات قليلة سمعت الجرس الأول! ؟
نظرة أفضل في نفس التمرير، ولقد وجدت أيضا معلومات أخرى. ؟
نعم، البيانات الوصفية، لكنني أعلم أننا وصلنا إلى هناك! ولكن دعونا نرى ما حصلنا عليه حتى الآن:
الآن نحن بحاجة إلى تلك الأجزاء.
قم بالتمرير لأسفل قليلاً وهنا هو الجزء الأول. ؟
وأخيرا، شكل ثنائي! يجب أن يكون جزء من الفيلم.
فحص سريع مع حليقة ...
افتح الطرفية، انسخ وألصق...
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 %
دعونا نرى ما إذا كان هذا الفيديو حقيقيا ...
إنه فيديو حقيقي، ويبلغ طوله حوالي ثانيتين ويطابق TARGETDURATION الذي وجدناه في قائمة الأجزاء الكاملة. ؟
استمر في التمرير وهنا هم.
شظايا، أرى شظايا في كل مكان.
لن أصف الكود، يمكنك إلقاء نظرة عليه بنفسك، لكن يمكنني أن أخبرك بما هو مطلوب:
يجب النظر في التنفيذ بأقصى جهد، مما يعني أنه يعمل على جهاز الكمبيوتر الخاص بي!
الجزء الأخير من التنفيذ، تنزيل/بث الملف مرة أخرى، كان ممكنًا بفضل @swathisprasad (Swathi Prasad) ومستودعها https://github.com/swathisprasad/download-using-streaming-response-body
بالنسبة للبقية، بالطبع بفضل StackOverflow.
جربه مع عامل ميناء إذا كنت تريد:
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
شكرا للقراءة حتى الآن!
إذا أعجبك أو وجدته مفيدًا، أعطني نجمة!
العلاقات العامة مرحب بها للغاية، سواء على الواجهة الأمامية أو الخلفية! ؟
لقد كذبت، لقد بحثت عن رابط الفيديو في مصدر الصفحة! ؟ ↩ ↩ 2