1
+ # ALL Imports
2
+
3
+ import tkinter as tk
4
+ import requests as req
5
+ import html
6
+ import time
7
+ from tkinter .ttk import *
8
+ from threading import Thread
9
+ import queue
10
+ from queue import Empty
11
+
12
+
13
+ def Invalid_Url ():
14
+ """ Sets Status bar label to error message """
15
+ Status ["text" ] = "Invalid URL..."
16
+ Status ["fg" ] = "red"
17
+
18
+
19
+ def Download_vid ():
20
+
21
+ # Validates Link and download Video
22
+ global Url_Val
23
+ url = Url_Val .get ()
24
+
25
+ Status ["text" ]= "Downloading"
26
+ Status ["fg" ]= "green"
27
+
28
+
29
+ # Validating Input
30
+
31
+ if not "linkedin.com/posts" in url :
32
+ Invalid_Url ()
33
+ return
34
+
35
+ response = req .get (url )
36
+
37
+ if not response .status_code == 200 :
38
+ Invalid_Url ()
39
+ return
40
+
41
+ htmlsource = response .text
42
+
43
+ sources = html .unescape (htmlsource ).split ()
44
+
45
+ for source in sources :
46
+
47
+ if "dms.licdn.com" in source :
48
+
49
+ videourl = source .split (',' )[0 ].split ('"src":' )[1 ][1 :- 1 ]
50
+ start_downloading ()
51
+
52
+ download_thread = VideoDownload (videourl )
53
+ download_thread .start ()
54
+ monitor (download_thread )
55
+ break
56
+
57
+
58
+ class VideoDownload (Thread ):
59
+
60
+ def __init__ (self , url ):
61
+ super ().__init__ ()
62
+
63
+ self .url = url
64
+
65
+ def run (self ):
66
+ """ download video"""
67
+
68
+ # save the picture to a file
69
+ block_size = 1024 # 1kB
70
+ r = req .get (self .url , stream = True )
71
+ total_size = int (r .headers .get ("content-length" ))
72
+
73
+ with open ('video.mp4' , 'wb' ) as file :
74
+ totaldata = 0 ;
75
+ for data in r .iter_content (block_size ):
76
+ totaldata += len (data )
77
+ per_downloaded = totaldata * 100 / total_size
78
+ queue .put (per_downloaded )
79
+ bar ['value' ] = per_downloaded
80
+ file .write (data )
81
+ time .sleep (0.01 )
82
+ file .close ()
83
+ print ("Download Finished" )
84
+
85
+ print ("Download Complete !!!" )
86
+ Status ["text" ] = "Finished!!"
87
+ Status ["fg" ] = "green"
88
+
89
+
90
+ #start download
91
+ def start_downloading ():
92
+ bar ["value" ]= 0 ;
93
+
94
+ def monitor ( download_thread ):
95
+ """ Monitor the download thread """
96
+ if download_thread .is_alive ():
97
+
98
+ try :
99
+ bar ["value" ]= queue .get (0 )
100
+ ld_window .after (10 , lambda : monitor (download_thread ))
101
+ except Empty :
102
+ pass
103
+
104
+ # GUI
105
+
106
+ ld_window = tk .Tk ()
107
+ ld_window .title ("Linkedin Video Downloader" )
108
+ ld_window .geometry ("400x300" )
109
+
110
+ # Label for URL Input
111
+ input_label = tk .Label (ld_window ,text = "Enter Linkedin Video URL:" )
112
+ input_label .pack ()
113
+
114
+ queue = queue .Queue ()
115
+
116
+ # Input of URL
117
+ Url_Val = tk .StringVar ()
118
+ Url_Input = tk .Entry (ld_window , textvariable = Url_Val , font = ("Calibri" , 9 ))
119
+ Url_Input .place ( x = 25 ,y = 50 , width = 350 )
120
+
121
+ # Button for Download
122
+ Download_button = tk .Button (ld_window , text = "Download" , font = ("Calibri" , 9 ), command = Download_vid )
123
+ Download_button .place (x = 100 , y = 100 , width = 200 )
124
+
125
+ # Progress Bar
126
+ bar = Progressbar (ld_window , length = 350 , style = 'grey.Horizontal.TProgressbar' ,mode = 'determinate' )
127
+ bar .place (y = 200 ,width = 350 ,x = 25 )
128
+
129
+
130
+ # Text for Status of Downloading
131
+ Status = tk .Label (ld_window , text = "Hello!! :D" , fg = "blue" , font = ("Calibri" , 9 ), bd = 1 , relief = tk .SUNKEN , anchor = tk .W , padx = 3 )
132
+ Status .pack (side = tk .BOTTOM , fill = tk .X )
133
+
134
+ ld_window .mainloop ()
0 commit comments