Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Lucksi
GitHub Repository: Lucksi/Mr.Holmes
Path: blob/master/Core/Support/Username/Get_Posts.py
1071 views
1
# ORIGINAL CREATOR: Luca Garofalo (Lucksi)
2
# AUTHOR: Luca Garofalo (Lucksi)
3
# Copyright (C) 2021-2024 Lucksi <[email protected]>
4
# License: GNU General Public License v3.0
5
6
import os
7
import requests
8
import urllib
9
import json
10
import shutil
11
from Core.Support import Font
12
from Core.Support import Language
13
from Core.Support import Headers
14
from bs4 import BeautifulSoup as soup
15
from time import sleep
16
from Core.Support import Map
17
18
headers = Headers.Get.classic()
19
20
LangFile = Language.Translation.Get_Language()
21
LangFile
22
23
24
class Downloader:
25
26
@staticmethod
27
def checkFile(filename,type):
28
with open(filename,"rb") as check:
29
content = check.read()
30
if len(content):
31
if type == "Image":
32
print(Font.Color.GREEN + "[+]" + Font.Color.WHITE + Language.Translation.Translate_Language(LangFile,"Username","Default","PostImg").format(len(content)))
33
else:
34
print(Font.Color.GREEN + "[+]" + Font.Color.WHITE + Language.Translation.Translate_Language(LangFile,"Username","Default","PostVid").format(len(content)))
35
else:
36
print(Font.Color.RED + "[!]" + Font.Color.WHITE + Language.Translation.Translate_Language(LangFile,"Default","Error","None"))
37
38
@staticmethod
39
def InsertToFile(json_file, Tagged, Link, Type):
40
if os.path.exists(json_file):
41
exist = "True"
42
pass
43
else:
44
f = open(json_file, "w")
45
f.write('''{
46
"List":[
47
48
]
49
}''')
50
f.close()
51
exist = "False"
52
opener = open(json_file, "r")
53
reader = json.load(opener)
54
v = 0
55
try:
56
for Parameter in Tagged:
57
if exist == "True":
58
for Data in reader:
59
ParamIn = reader[Data][v]["Name"]
60
if ParamIn == Parameter:
61
Ok = "False"
62
else:
63
Ok = "True"
64
v = v+1
65
else:
66
Ok = "True"
67
if Ok == "True":
68
if Type == "TaggedLink":
69
data = {
70
"Name": "None",
71
"Link": "{}".format(Parameter)
72
}
73
else:
74
data = {
75
"Name": "{}".format(Parameter),
76
"Link": "{}{}".format(Link, Parameter)
77
}
78
with open(json_file, 'r+') as file:
79
file_data = json.load(file)
80
file_data["List"].append(data)
81
file.seek(0)
82
json.dump(file_data, file, indent=4)
83
else:
84
pass
85
except Exception as e:
86
print(Font.Color.RED + "[!]" + Font.Color.WHITE + "A ERROR OCCURRED {}".format(str(e)))
87
88
@staticmethod
89
def Instagram(url, username, http_proxy, Posts, PostLocations, PostGpsCoordinates, Opt, name2):
90
if Posts > 0:
91
if Posts <= 12:
92
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
93
Language.Translation.Translate_Language(LangFile, "Username", "Instagram", "Download_Full").format(username))
94
range_band = Posts
95
else:
96
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
97
Language.Translation.Translate_Language(LangFile, "Username", "Instagram", "Download_Partial").format(username))
98
range_band = 12
99
folder = "GUI/Reports/{}/{}/Profile_pics/Instagram_Posts".format(
100
Opt, name2)
101
if os.path.isdir(folder):
102
keep = int(input(Font.Color.BLUE + "\n[?]" + Font.Color.WHITE +
103
Language.Translation.Translate_Language(LangFile, "Username", "Instagram", "FoldFound") + Font.Color.GREEN + "\n\n[#MR.HOLMES#]" + Font.Color.WHITE + "-->"))
104
if keep == 1:
105
shutil.rmtree(folder)
106
os.mkdir(folder)
107
else:
108
pass
109
else:
110
os.mkdir(folder)
111
details = int(input(Font.Color.BLUE + "\n[?]" + Font.Color.WHITE +
112
Language.Translation.Translate_Language(LangFile, "Username", "Default", "Details") + Font.Color.GREEN + "[#MR.HOLMES#]" + Font.Color.WHITE + "-->"))
113
openurl = requests.get(
114
url, proxies=http_proxy, headers=headers, allow_redirects=True)
115
reader = soup(openurl.content, "html.parser")
116
profile = reader.find_all("div", class_="photo")
117
i = 1
118
j = 1
119
d = 1
120
t = 1
121
arr_name = []
122
TaggedUser = []
123
TaggedHashtag = []
124
TaggedLink = []
125
while i <= range_band:
126
for image in profile:
127
try:
128
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
129
Language.Translation.Translate_Language(LangFile, "Username", "Instagram", "Download").format(str(i)))
130
profile_pic = image.find(
131
"img", class_="post-image")["src"]
132
name = image.find("a")["href"].replace(
133
"https://www.picuki.com/media/", "")
134
arr_name.append(name)
135
print(
136
Font.Color.GREEN + "[+]" + Font.Color.WHITE + "POST ID: {}".format(name))
137
image = folder + "/{}.jpg".format(name)
138
print(Font.Color.BLUE + "[I]" + Font.Color.WHITE +
139
Language.Translation.Translate_Language(LangFile, "Username", "Default", "Check").format(name + ".jpg"))
140
sleep(2)
141
if os.path.exists(image):
142
print(
143
Font.Color.BLUE + "[I]" + Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Username", "Default", "CheckTrue"))
144
sleep(2)
145
else:
146
print(
147
Font.Color.BLUE + "[I]" + Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Username", "Default", "CheckFalse"))
148
getter = requests.get(
149
profile_pic, headers=headers, allow_redirects=False)
150
open(image, "wb").write(getter.content)
151
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
152
Language.Translation.Translate_Language(LangFile, "Username", "Default", "Success"))
153
Downloader.checkFile(image,"Image")
154
sleep(5)
155
i = i+1
156
except ConnectionError:
157
print(
158
Font.Color.RED + "[!]" + Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Default", "Connection_Error2", "None"))
159
i = i+1
160
continue
161
except Exception as e:
162
print(
163
Font.Color.RED + "[!]" + Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Default", "Error", "None") + str(e))
164
i = i+1
165
continue
166
167
if details == 1:
168
description = reader.find_all("div", class_="photo-info")
169
while j <= range_band:
170
for info in description:
171
try:
172
data_fold = folder + "/" + arr_name[j-1]
173
if os.path.isdir(data_fold):
174
shutil.rmtree(data_fold)
175
TempTag = []
176
TempHash = []
177
TempLink = []
178
os.mkdir(data_fold)
179
filename = data_fold + \
180
"/{}.txt".format(arr_name[j-1])
181
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
182
Language.Translation.Translate_Language(LangFile, "Username", "Instagram", "Details").format(str(j)))
183
descr = info.find(
184
"div", class_="photo-description").text
185
if "#" in descr:
186
count = descr.count("#")
187
text = str(descr.split("#", 1)[1])
188
"""if " " in text or "\n" in text:
189
text = text.split("\n",1)[-1]"""
190
text2 = text.split("#")
191
for tag in text2:
192
if "\n" in tag:
193
tag = tag.split("\n", 1)[0]
194
if " " in tag:
195
tag = tag.split(" ", 1)[0]
196
if "https" in text2 or "http" in text2:
197
TempLink.append(tag.replace("\n", ""))
198
if tag in TaggedLink:
199
pass
200
else:
201
TaggedLink.append(
202
tag.replace("\n", ""))
203
else:
204
TempHash.append("#" +
205
tag.replace("\n", ""))
206
if tag in TaggedHashtag:
207
pass
208
else:
209
TaggedHashtag.append(
210
tag.replace("\n", ""))
211
tagg = info.find_all("u")
212
for user in tagg:
213
tagged = user.text.replace("@", "")
214
TempTag.append(tagged)
215
if tagged in TaggedUser:
216
pass
217
else:
218
TaggedUser.append(tagged)
219
location = info.find(
220
"div", class_="photo-location").text
221
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
222
"DESCRIPTION: {}".format(descr.strip()))
223
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
224
"LOCATION: {}".format(location.strip()))
225
print(
226
Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "TAGGED-USERS:{}".format(Font.Color.WHITE + "[" + Font.Color.GREEN + ", ".join(TempTag) + Font.Color.WHITE + "]"))
227
print(
228
Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "TAGGED-HASHTAGS:{}".format(Font.Color.WHITE + "[" + Font.Color.GREEN + ", ".join(TempHash) + Font.Color.WHITE + "]"))
229
print(
230
Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "LINKS:{}".format(Font.Color.WHITE + "[" + Font.Color.GREEN + ", ".join(TempLink) + Font.Color.WHITE + "]"))
231
f = open(filename, "w", encoding="utf-8")
232
f.write("POST ID {} DATA:\n".format(str(name)))
233
f.write("DESCRIPTION: {}\r\n".format(descr.strip()))
234
f.write("LOCATION: {}\r\n".format(
235
location.strip()))
236
f.write(
237
"TAGGED-USERS: {}\r\n".format(", ".join(TempTag)))
238
f.write(
239
"TAGGED-HASHTAGS: {}\r\n".format(", ".join(TempHash)))
240
f.write(
241
"LINKS: {}\r\n".format(", ".join(TempLink)))
242
TempTag.clear()
243
if location.strip() == "":
244
pass
245
else:
246
jsonfile = data_fold + \
247
"/{}.json".format(arr_name[j-1])
248
final_loc = location.strip()
249
format_loc = final_loc.replace(" ", "+")
250
req = "https://nominatim.openstreetmap.org/search.php?q={}&format=json".format(
251
format_loc)
252
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
253
Language.Translation.Translate_Language(LangFile, "Username", "Instagram", "GeoData").format(str(j)))
254
sleep(2)
255
url = urllib.request.urlopen(req)
256
try:
257
Reader = url.read()
258
parser = json.loads(Reader)
259
Lat = parser[0]["lat"]
260
Lon = parser[0]["lon"]
261
data = {
262
"Geolocation": {
263
"Latitude": Lat,
264
"Longitude": Lon
265
}
266
}
267
FormattedGps = "POST N°" + \
268
str(j) + ": " + final_loc + ": https://www.google.it/maps/place/{},{}".format(Lat, Lon)
269
EntryGps = final_loc + ": https://www.google.it/maps/place/{},{}".format(Lat, Lon)
270
PostGpsCoordinates.append(FormattedGps)
271
if EntryGps in PostLocations:
272
pass
273
else:
274
PostLocations.append(EntryGps)
275
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
276
"LATITUDE:" + Font.Color.GREEN + " {}".format(Lat))
277
sleep(2)
278
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
279
"LONGITUDE:" + Font.Color.GREEN + " {}".format(Lon))
280
sleep(2)
281
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
282
"GOOGLE MAPS LINK: https://www.google.it/maps/place/{},{}".format(Lat, Lon))
283
with open(jsonfile, "w", encoding="utf-8") as output:
284
json.dump(data, output,
285
ensure_ascii=False, indent=4)
286
image2 = arr_name[j-1]
287
Map.Creation.mapPost(
288
data_fold, Lat, Lon, image2)
289
#", " + Lat + ", " + Lon
290
except Exception as e:
291
print(Font.Color.RED + "\n[!]" + Font.Color.WHITE + Language.Translation.Translate_Language(
292
LangFile, "Username", "Instagram", "NoGeoData") + str(e))
293
f.close()
294
j = j+1
295
sleep(2)
296
except ConnectionError:
297
print(Font.Color.RED + "[!]" +
298
Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Default", "Connection_Error2", "None"))
299
j = j+1
300
continue
301
except Exception as e:
302
print(Font.Color.RED + "[!]" +
303
Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Default", "Error", "None") + str(e))
304
j = j+1
305
continue
306
"""footer = reader.find_all(
307
"span", class_="icon-thumbs-up-alt")
308
print(footer)"""
309
"""while d <= range_band:
310
for info in footer:
311
try:
312
data_fold = folder + "/" + arr_name[d-1]
313
filename = data_fold + \
314
"/{}.txt".format(arr_name[d-1])
315
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
316
Language.Translation.Translate_Language(LangFile, "Username", "Instagram", "Likes/Comments").format(str(d)))
317
likes = info.find("span")[0].text
318
comments = info.find(
319
"span")[1].text
320
time = info.find()
321
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
322
"LIKES: {}".format(likes.strip()))
323
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
324
"COMMENTS: {}".format(comments.strip()))
325
326
f = open(filename, "a")
327
f.write("LIKES: {}\r\n".format(likes.strip()))
328
f.write("COMMENTS: {}\r\n".format(
329
comments.strip()))
330
f.close()
331
d = d+1
332
sleep(2)
333
except ConnectionError:
334
print(Font.Color.RED + "[!]" +
335
Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Default", "Connection_Error2", "None"))
336
d = d+1
337
continue
338
except Exception as e:
339
print(Font.Color.RED + "[!]" +
340
Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Default", "Error", "None"))
341
d = d+1
342
continue
343
"""
344
Time = reader.find_all("div", class_="time")
345
while t <= range_band:
346
for info in Time:
347
try:
348
data_fold = folder + "/" + arr_name[t-1]
349
filename = data_fold + \
350
"/{}.txt".format(arr_name[t-1])
351
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
352
Language.Translation.Translate_Language(LangFile, "Username", "Instagram", "Data").format(str(t)))
353
time = info.find("span").text
354
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
355
"POSTED: {}".format(time.strip()))
356
357
f = open(filename, "a")
358
f.write("POSTED: {}\r\n".format(time.strip()))
359
f.close()
360
t = t+1
361
except ConnectionError:
362
print(Font.Color.RED + "[!]" +
363
Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Default", "Connection_Error2", "None"))
364
t = t+1
365
continue
366
except Exception as e:
367
print(Font.Color.RED + "[!]" +
368
Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Default", "Error", "None"))
369
t = t+1
370
continue
371
sleep(2)
372
else:
373
pass
374
if TaggedUser == []:
375
pass
376
else:
377
j = 1
378
report = "GUI/Reports/{}/{}/{}.txt".format(
379
Opt, name2, name2)
380
print(Font.Color.GREEN +
381
"\n[+]" + Font.Color.WHITE + "GETTING INSTAGRAM TAGGED USERS")
382
f = open(report, "a")
383
f.write("\nGETTING INSTAGRAM TAGGED USERS:\n")
384
for User in TaggedUser:
385
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "USER N°{}: ".format(
386
str(j)) + User + ": https://instagram.com/{}".format(User))
387
f.write("USER N°{}: ".format(
388
str(j)) + User + ": https://instagram.com/{}".format(User) + "\n")
389
j = j + 1
390
f.close()
391
json_file = "GUI/Reports/{}/{}/Profile_pics/Instagram_Posts/Users.json".format(
392
Opt, name2)
393
Downloader.InsertToFile(
394
json_file, TaggedUser, " https://instagram.com/", "TaggedUser")
395
396
if TaggedHashtag == []:
397
pass
398
else:
399
i = 1
400
report = "GUI/Reports/{}/{}/{}.txt".format(
401
Opt, name2, name2)
402
print(Font.Color.GREEN +
403
"\n[+]" + Font.Color.WHITE + "GETTING INSTAGRAM TAGGED HASHTAGS")
404
f = open(report, "a")
405
f.write("\nGETTING INSTAGRAM TAGGED HASHTAGS:\n")
406
for Tag in TaggedHashtag:
407
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "TAG N°{}: ".format(
408
str(i)) + Tag + ": https://instagram.com/explore/tags/{}".format(Tag))
409
f.write("HASHTAG N°{}: ".format(
410
str(i)) + Tag + ": https://instagram.com/explore/tags/{}".format(Tag) + "\n")
411
i = i + 1
412
f.close()
413
json_file = "GUI/Reports/{}/{}/Profile_pics/Instagram_Posts/Hashtags.json".format(
414
Opt, name2)
415
Downloader.InsertToFile(
416
json_file, TaggedHashtag, " https://instagram.com/explore/tags/", "TaggedHashtag")
417
418
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
419
Language.Translation.Translate_Language(LangFile, "Username", "Default", "TotDetails").format(folder))
420
else:
421
pass
422
423
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
424
Language.Translation.Translate_Language(LangFile, "Username", "Default", "Image").format(folder))
425
else:
426
print(Font.Color.RED + "\n[!]" + Font.Color.WHITE +
427
Language.Translation.Translate_Language(LangFile, "Username", "Default", "NoPost"))
428
429
@staticmethod
430
def Twitter(url, username, http_proxy, Posts, Opt, name2):
431
headers = Headers.Get.Twitter()
432
if Posts > 0:
433
if Posts <= 12:
434
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
435
Language.Translation.Translate_Language(LangFile, "Username", "Twitter", "Download_Full").format(username))
436
range_band = Posts
437
else:
438
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
439
Language.Translation.Translate_Language(LangFile, "Username", "Twitter", "Download_Partial").format(username))
440
range_band = 12
441
folder = "GUI/Reports/{}/{}/Profile_pics/Twitter_Posts".format(
442
Opt, name2)
443
if os.path.isdir(folder):
444
shutil.rmtree(folder)
445
os.mkdir(folder)
446
medias = int(input(Font.Color.BLUE + "\n[?]" + Font.Color.WHITE + Language.Translation.Translate_Language(LangFile,"Username","Twitter","MediaOnly") + Font.Color.GREEN + "\n\n[#MR.HOLMES#]" + Font.Color.WHITE + "-->"))
447
if medias == 1:
448
url = url + "/media"
449
param = "/media"
450
else:
451
url = url + "/with_replies"
452
param = "/with_replies"
453
openurl = requests.get(
454
url, proxies=http_proxy, headers=headers, allow_redirects=True)
455
if "No items found" in openurl.text:
456
print(Font.Color.RED + "[!]" + Font.Color.WHITE + "SOMETHING WENT WRONG...")
457
reader = soup(openurl.content, "html.parser")
458
i = 1
459
j = 1
460
TaggedUser = []
461
TaggedHastag = []
462
TaggedLink = []
463
profile = reader.find_all("div", class_="tweet-body")
464
for info in profile:
465
try:
466
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
467
Language.Translation.Translate_Language(LangFile, "Username", "Twitter", "Details").format(str(i)))
468
image_try = info.find("a", class_="still-image")
469
retweet2 = info.find("div",class_="retweet-header")
470
replayed = info.find("div",class_="replying-to")
471
if replayed != None:
472
replayed = "TRUE"
473
userRep = info.find_all("div",class_="replying-to")
474
for user in userRep:
475
repUser = user.find("a")["href"].replace("/","")
476
else:
477
replayed = "FALSE"
478
if retweet2 != None:
479
retweet2 = "TRUE"
480
nameOrig = info.find("a",class_="fullname")["title"]
481
userOrig = info.find("a",class_="username")["title"]
482
else:
483
retweet2 = "FALSE"
484
sleep(2)
485
if image_try != None:
486
post = info.find(
487
"a", class_="still-image")["href"]
488
print(
489
Font.Color.BLUE + "[I]" + Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Username", "Twitter", "Yes_Image").format(str(j)))
490
profile_pic = url.replace(
491
username+ param, "") + post.replace("/pic/", "pic/")
492
image = folder + "/Pic_{}.jpg".format(str(i))
493
getter = requests.get(
494
profile_pic, headers=headers, allow_redirects=False)
495
try:
496
open(image, "wb").write(getter.content)
497
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
498
Language.Translation.Translate_Language(LangFile, "Username", "Default", "Success"))
499
Downloader.checkFile(image,"Image")
500
j = j+1
501
sleep(5)
502
except ConnectionError:
503
print(Font.Color.RED + "[!]" +
504
Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Default", "Connection_Error2", "None"))
505
continue
506
except Exception as e:
507
print(Font.Color.RED + "[!]" +
508
Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Default", "Error", "None"))
509
continue
510
else:
511
poster_pics = info.find_all(
512
"div", class_="card-image")
513
if poster_pics != None:
514
for data in poster_pics:
515
print(
516
Font.Color.YELLOW + "[v]" + Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Username", "Twitter", "Yes_Image").format(str(j)))
517
post = data.find("img")["src"]
518
profile_pic = url.replace(
519
username + param, "") + post.replace("/pic/", "pic/")
520
image = folder + "/Pic_{}.jpg".format(str(i))
521
getter = requests.get(
522
profile_pic, headers=headers, allow_redirects=False)
523
try:
524
open(image, "wb").write(getter.content)
525
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE +
526
"DOWNLOAD SUCCESSFULL..")
527
j = j+1
528
Downloader.checkFile(image,"Image")
529
sleep(5)
530
except ConnectionError:
531
print(Font.Color.RED + "[!]" +
532
Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Default", "Connection_Error2", "None"))
533
continue
534
except Exception as e:
535
print(Font.Color.RED + "[!]" +
536
Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Default", "Error", "None"))
537
continue
538
else:
539
print(Font.Color.RED +
540
"[!]" + Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Username", "Twitter", "No_Image"))
541
542
text = info.find(
543
"div", class_="tweet-content media-body").text
544
TempUser = []
545
TempHashtag = []
546
TempLinks = []
547
if text:
548
desc = info.find(
549
"div", class_="tweet-content media-body").text
550
print(
551
Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "DESCRIPTION: {}".format(desc))
552
taggedArea = info.find_all(
553
"div", class_="tweet-content media-body")
554
for Tag in taggedArea:
555
tagged = Tag.find_all("a")
556
for tag in tagged:
557
if tag.text.startswith("@"):
558
User = tag.text.replace("@", "")
559
TempUser.append(User)
560
if User in TaggedUser:
561
pass
562
else:
563
TaggedUser.append(User)
564
elif tag.text.startswith("#"):
565
Tag = tag.text.replace("#", "")
566
TempHashtag.append("#" + Tag)
567
if Tag in TaggedHastag:
568
pass
569
else:
570
TaggedHastag.append(Tag)
571
else:
572
Link = tag["href"]
573
TempLinks.append(Link)
574
if Link in TaggedLink:
575
pass
576
else:
577
TaggedLink.append(Link)
578
579
else:
580
print(Font.Color.RED +
581
"[!]" + Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Username", "Twitter", "No_Desc"))
582
footer = info.find_all("span", class_="tweet-stat")
583
comment = footer[0].get_text()
584
likes = footer[1].get_text()
585
retweet = footer[2].get_text()
586
quote = footer[3].get_text()
587
print(
588
Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "IS A RETWEET: {}".format(retweet2))
589
print(
590
Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "IS A REPLY: {}".format(replayed))
591
if retweet2 == "TRUE":
592
print(
593
Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "FULL-NAME:{}".format(Font.Color.WHITE + "[" + Font.Color.GREEN + nameOrig + Font.Color.WHITE + "]"))
594
print(
595
Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "USERNAME:{}".format(Font.Color.WHITE + "[" + Font.Color.GREEN + userOrig + Font.Color.WHITE + "]"))
596
if replayed == "TRUE":
597
print(
598
Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "REPLAYED TO:{}".format(Font.Color.WHITE + "[" + Font.Color.GREEN + repUser + Font.Color.WHITE + "]"))
599
print(
600
Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "COMMENTS: {}".format(comment))
601
print(Font.Color.YELLOW +
602
"[v]" + Font.Color.WHITE + "LIKES: {}".format(likes))
603
print(
604
Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "RETWEETS: {}".format(retweet))
605
print(Font.Color.YELLOW +
606
"[v]" + Font.Color.WHITE + "QUOTES: {}".format(quote))
607
date = info.find("span", class_="tweet-date").text
608
print(Font.Color.YELLOW +
609
"[v]" + Font.Color.WHITE + "POSTED ON: {}".format(date))
610
print(Font.Color.YELLOW +
611
"[v]" + Font.Color.WHITE + "TAGGED-USERS:{}".format(Font.Color.WHITE + "[" + Font.Color.GREEN + ", ".join(TempUser) + Font.Color.WHITE + "]"))
612
print(Font.Color.YELLOW +
613
"[v]" + Font.Color.WHITE + "HASTAGS:{}".format(Font.Color.WHITE + "[" + Font.Color.GREEN + ", ".join(TempHashtag) + Font.Color.WHITE + "]"))
614
print(Font.Color.YELLOW +
615
"[v]" + Font.Color.WHITE + "LINKS:{}".format(Font.Color.WHITE + "[" + Font.Color.GREEN + ", ".join(TempLinks) + Font.Color.WHITE + "]"))
616
data_fold = folder + "/" + "Pic_{}".format(str(i))
617
os.mkdir(data_fold)
618
filename = data_fold + \
619
"/Post_{}_details.txt".format(str(i))
620
f = open(filename, "w", encoding="utf-8")
621
f.write("POST N°{} DATA:\n".format(str(i)))
622
f.write("IS A RETWEET: {}\r\n".format(text))
623
if retweet2 == "TRUE":
624
f.write("FULL-NAME: {}\r\n".format(nameOrig))
625
f.write("DESCRIPTION: {}\r\n".format(userOrig))
626
f.write("IS A REPLY: {}\r\n".format(comment))
627
if replayed == "TRUE":
628
f.write("DESCRIPTION: {}\r\n".format(repUser))
629
f.write("DESCRIPTION: {}\r\n".format(text))
630
f.write("COMMENTS: {}\r\n".format(comment))
631
f.write("LIKES: {}\r\n".format(likes))
632
f.write("RETWEETS: {}\r\n".format(retweet))
633
f.write("QUOTES: {}\r\n".format(quote))
634
f.write("POSTED ON: {}\r\n".format(date))
635
f.write("TAGGED-USERS: {}\r\n".format(", ".join(TempUser)))
636
f.write("HASHTAGS: {}\r\n".format(", ".join(TempHashtag)))
637
f.write("LINKS: {}\r\n".format(", ".join(TempLinks)))
638
i = i+1
639
TempUser.clear()
640
sleep(3)
641
if i == range_band + 1:
642
break
643
644
except ConnectionError:
645
print(Font.Color.RED + "[!]" +
646
Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Default", "Connection_Error2", "None"))
647
i = i+1
648
if i < range_band + 1:
649
continue
650
else:
651
break
652
except Exception as e:
653
print(Font.Color.RED + "[!]" +
654
Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Default", "Error", "None") + str(e))
655
i = i+1
656
if i < range_band + 1:
657
continue
658
else:
659
break
660
if TaggedUser == []:
661
pass
662
else:
663
report = "GUI/Reports/{}/{}/{}.txt".format(
664
Opt, name2, name2)
665
j = 1
666
print(Font.Color.GREEN +
667
"\n[+]" + Font.Color.WHITE + "GETTING TWITTER TAGGED USERS")
668
f = open(report, "a")
669
f.write("\nGETTING TWITTER TAGGED USERS:\n")
670
for User in TaggedUser:
671
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "USER N°{}: ".format(
672
str(j)) + User + ": https://twitter.com/{}".format(User))
673
f.write("USER N°{}: ".format(
674
str(j)) + User + ": https://twitter.com/{}".format(User) + "\n")
675
j = j + 1
676
f.close()
677
json_file = "GUI/Reports/{}/{}/Profile_pics/Twitter_Posts/Users.json".format(
678
Opt, name2)
679
Downloader.InsertToFile(
680
json_file, TaggedUser, " https://twitter.com/", "TaggedUser")
681
682
if TaggedHastag == []:
683
pass
684
else:
685
report = "GUI/Reports/{}/{}/{}.txt".format(
686
Opt, name2, name2)
687
x = 1
688
print(Font.Color.GREEN +
689
"\n[+]" + Font.Color.WHITE + "GETTING TWITTER TAGGED-HASHTAGS")
690
f = open(report, "a")
691
f.write("\nGETTING TWITTER TAGGED HASHTAGS:\n")
692
for Tag in TaggedHastag:
693
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "USER N°{}: ".format(
694
str(x)) + Tag + ": https://twitter.com/hashtag/{}".format(Tag))
695
f.write("USER N°{}: ".format(
696
str(x)) + Tag + ": https://twitter.com/hashtag/{}".format(Tag) + "\n")
697
x = x + 1
698
f.close()
699
json_file = "GUI/Reports/{}/{}/Profile_pics/Twitter_Posts/Hashtags.json".format(
700
Opt, name2)
701
Downloader.InsertToFile(
702
json_file, TaggedHastag, " https://twitter.com/hashtag/", "TaggedHastag")
703
704
if TaggedLink == []:
705
pass
706
else:
707
report = "GUI/Reports/{}/{}/{}.txt".format(
708
Opt, name2, name2)
709
x = 1
710
print(Font.Color.GREEN +
711
"\n[+]" + Font.Color.WHITE + "GETTING TWITTER POST HYPERLINKS:")
712
f = open(report, "a")
713
f.write("\nGETTING TWITTER POST HYPERLINKS:\n")
714
for Link in TaggedLink:
715
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "LINK N°{}: ".format(
716
str(x)) + Link)
717
f.write("LINK N°{}: ".format(
718
str(x)) + Link + "\n")
719
x = x + 1
720
f.close()
721
json_file = "GUI/Reports/{}/{}/Profile_pics/Twitter_Posts/Links.json".format(
722
Opt, name2)
723
Downloader.InsertToFile(
724
json_file, TaggedLink, "Link", "TaggedLink")
725
else:
726
print(Font.Color.RED + "\n[!]" + Font.Color.WHITE +
727
Language.Translation.Translate_Language(LangFile, "Username", "Default", "NoPost"))
728
729
@staticmethod
730
def TikTok(url, username, http_proxy, Posts, Opt, name2):
731
if Posts > 0:
732
if Posts <= 12:
733
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
734
Language.Translation.Translate_Language(LangFile, "Username", "TikTok", "Download_Full").format(username))
735
range_band = Posts
736
else:
737
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
738
Language.Translation.Translate_Language(LangFile, "Username", "TikTok", "Download_Partial").format(username))
739
range_band = 12
740
folder = "GUI/Reports/{}/{}/Profile_pics/TikTok_Posts".format(
741
Opt, name2)
742
if os.path.isdir(folder):
743
keep = int(input(Font.Color.BLUE + "\n[?]" + Font.Color.WHITE +
744
Language.Translation.Translate_Language(LangFile, "Username", "TikTok", "FoldFound") + Font.Color.GREEN + "\n\n[#MR.HOLMES#]" + Font.Color.WHITE + "-->"))
745
if keep == 1:
746
shutil.rmtree(folder)
747
os.mkdir(folder)
748
else:
749
pass
750
else:
751
os.mkdir(folder)
752
i = 1
753
TaggedUser = []
754
TaggedHashtag = []
755
TaggedLink = []
756
openurl = requests.get(
757
url, proxies=http_proxy, headers=headers, allow_redirects=True)
758
reader = soup(openurl.content, "html.parser")
759
stats = reader.find_all("div", class_="flex items-center mb-1")
760
postsect = reader.find_all("div", class_="info3")
761
for video in postsect:
762
try:
763
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
764
Language.Translation.Translate_Language(LangFile, "Username", "TikTok", "Download").format(str(i)))
765
title = video.find_all("a")[1]["href"]
766
openurl2 = requests.get(
767
title, headers=headers, allow_redirects=True)
768
reader2 = soup(openurl2.content, "html.parser")
769
video = reader2.find("video")["src"]
770
poster = reader2.find("video")["poster"]
771
name = title.replace("https://urlebird.com/video/", "")
772
filename = folder + "/" + name.replace("/", ".mp4")
773
foldername = folder + "/" + name.replace("/", "")
774
print(Font.Color.GREEN + "[+]" + Font.Color.WHITE +
775
"VIDEO ID {}".format(name.replace("/", "")))
776
print(Font.Color.BLUE + "[I]" + Font.Color.WHITE + Language.Translation.Translate_Language(
777
LangFile, "Username", "Default", "Check") .format(name.replace("/", ".mp4")))
778
if os.path.exists(foldername):
779
print(Font.Color.BLUE + "[I]" + Font.Color.WHITE + Language.Translation.Translate_Language(
780
LangFile, "Username", "Default", "VideoCheckTrue"))
781
else:
782
print(Font.Color.BLUE + "[I]" + Font.Color.WHITE + Language.Translation.Translate_Language(
783
LangFile, "Username", "Default", "VideoCheckFalse"))
784
os.mkdir(foldername)
785
report = foldername + "/" + name.replace("/", ".txt")
786
reportImage = foldername + "/" + \
787
name.replace("/", ".jpg")
788
sleep(2)
789
getter = requests.get(
790
video, headers=headers, allow_redirects=True)
791
open(filename, "wb").write(getter.content)
792
print(Font.Color.YELLOW + "[V]" + Font.Color.WHITE + Language.Translation.Translate_Language(
793
LangFile, "Username", "Default", "Success"))
794
Downloader.checkFile(filename,"Video")
795
print(Font.Color.BLUE +
796
"[I]" + Font.Color.WHITE + "DONWLOAD IMAGE POSTER")
797
sleep(2)
798
getter2 = requests.get(
799
poster, headers=headers, allow_redirects=True)
800
open(reportImage, "wb").write(getter2.content)
801
print(Font.Color.YELLOW + "[V]" + Font.Color.WHITE + Language.Translation.Translate_Language(
802
LangFile, "Username", "Default", "Success"))
803
Downloader.checkFile(reportImage,"Image")
804
sleep(2)
805
details = reader2.find("video").text
806
print(Font.Color.YELLOW + "[V]" + Font.Color.WHITE +
807
"DETAILS: {}".format(details.replace("\n", "")))
808
date = reader2.find("h6").text
809
print(
810
Font.Color.YELLOW + "[V]" + Font.Color.WHITE + "POSTED ON: {}".format(date))
811
stats = reader2.find_all("div", class_="row mt-3 mb-1 stats")
812
for stat in stats:
813
pass
814
#play = stat.find("div",class_="col-md-3 col-6")[1].text.replace("▶️","").replace(" ","",1)
815
#print(play)
816
#comments = stat.find(
817
# "div",class_="col-md-3 col-6")[2].text.replace("📑","").replace(" ","",1)
818
#shares = stat.find("div",class_="col-md-3 col-6")[3].text.replace("↪️","").replace(" ","",1)
819
"""print(
820
Font.Color.YELLOW + "[V]" + Font.Color.WHITE + "PLAYES : {}".format(play))
821
print(
822
Font.Color.YELLOW + "[V]" + Font.Color.WHITE + "COMMENTS: {}".format(comments))
823
print(
824
Font.Color.YELLOW + "[V]" + Font.Color.WHITE + "SHARES: {}".format(shares))"""
825
if '<div class="music">' in openurl2.text:
826
music = reader2.find("div", class_="music").text.replace("🎵","").replace(" ","",1)
827
print(
828
Font.Color.YELLOW + "[V]" + Font.Color.WHITE + "SONG: {}".format(music.replace("\n", "")))
829
else:
830
music = "\nNONE"
831
print(Font.Color.RED + "[!]" + Font.Color.WHITE + Language.Translation.Translate_Language(
832
LangFile, "Username", "TikTok", "NoSong"))
833
TempUser = []
834
TempTag = []
835
TempLinks = []
836
TagSection = reader2.find_all("div", class_="info2")
837
for Tag in TagSection:
838
tag = Tag.find_all("a")
839
for user in tag:
840
tagged = user.text
841
if "#" in tagged:
842
tagged = tagged.replace("#", "")
843
if "https" in tagged or "http" in tagged:
844
Text = Tag.find("p").text
845
TempLinks.append(Text)
846
if tagged in TaggedLink:
847
pass
848
else:
849
TaggedLink.append(Text)
850
else:
851
TempTag.append("#" + tagged)
852
if tagged in TaggedHashtag:
853
pass
854
else:
855
TaggedHashtag.append(tagged)
856
else:
857
TaggedUser.append(tagged)
858
TempUser.append(tagged)
859
if tagged in TaggedUser:
860
pass
861
else:
862
TaggedUser.append(tagged)
863
print(
864
Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "TAGGED-USERS:{}".format(Font.Color.WHITE + "[" + Font.Color.GREEN + ", ".join(TempUser) + Font.Color.WHITE + "]"))
865
print(
866
Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "TAGGED-HASHTAG:{}".format(Font.Color.WHITE + "[" + Font.Color.GREEN + ", ".join(TempTag) + Font.Color.WHITE + "]"))
867
print(
868
Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "TAGGED-LINKS:{}".format(Font.Color.WHITE + "[" + Font.Color.GREEN + ", ".join(TempLinks) + Font.Color.WHITE + "]"))
869
870
f = open(report, "w", encoding="utf-8")
871
f.write("TITLE: {}\n".format(name))
872
f.write("DETAILS: {}".format(
873
details.replace("\n", "")))
874
f.write("\nPOSTED ON: {}\n".format(date))
875
"""f.write("\nPLAYED: {}".format(play))
876
f.write("\nCOMMENTS: {}".format(comments))
877
f.write("\nSHARES: {}\n".format(shares))"""
878
f.write("SONG: {}\r\n".format(music.replace("\n", "")))
879
f.write("TAGGED-USERS: {}\n".format(", ".join(TempUser)))
880
f.write("TAGGED-HASHTAG: {}".format(", ".join(TempTag)))
881
f.close()
882
TempTag.clear()
883
TempUser.clear()
884
i = i+1
885
sleep(13)
886
if i == range_band + 1:
887
break
888
except ConnectionError:
889
print(Font.Color.RED + "[!]" +
890
Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Default", "Connection_Error2", "None"))
891
i = i+1
892
if i < range_band + 1:
893
continue
894
else:
895
break
896
except Exception as e:
897
print(Font.Color.RED + "[!]" +
898
Font.Color.WHITE + Language.Translation.Translate_Language(LangFile, "Default", "Error", "None"))
899
i = i+1
900
if i < range_band + 1:
901
continue
902
else:
903
break
904
report = "GUI/Reports/{}/{}/{}.txt".format(
905
Opt, name2, name2)
906
if TaggedUser == []:
907
pass
908
else:
909
# report = "GUI/Reports/{}/{}/{}.txt".format(
910
# Opt, name2, name2)
911
j = 1
912
print(Font.Color.GREEN +
913
"\n[+]" + Font.Color.WHITE + "GETTING TIKTOK TAGGED USERS")
914
f = open(report, "a")
915
f.write("\nGETTING TIKTOK TAGGED USERS:\n")
916
for User in TaggedUser:
917
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "USER N°{}: ".format(
918
str(j)) + User + ": https://tiktok.com/{}".format(User))
919
f.write("USER N°{}: ".format(
920
str(j)) + User + ": https://tiktok.com/{}".format(User) + "\n")
921
j = j + 1
922
f.close()
923
json_file = "GUI/Reports/{}/{}/Profile_pics/TikTok_Posts/Users.json".format(
924
Opt, name2)
925
Downloader.InsertToFile(
926
json_file, TaggedUser, " https://tiktok.com/", "TaggedUser")
927
928
if TaggedHashtag == []:
929
pass
930
else:
931
x = 1
932
print(Font.Color.GREEN +
933
"\n[+]" + Font.Color.WHITE + "GETTING TIKTOK TAGGED HASHTAG")
934
f = open(report, "a")
935
f.write("\nGETTING TIKTOK TAGGED HASHTAG:\n")
936
for Tag in TaggedHashtag:
937
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "HASHTAG N°{}: ".format(
938
str(x)) + Tag + ": https://tiktok.com/tag/{}".format(Tag))
939
f.write("HASHTAG N°{}: ".format(
940
str(x)) + Tag + ": https://tiktok.com/tag/{}".format(Tag) + "\n")
941
x = x + 1
942
f.close()
943
json_file = "GUI/Reports/{}/{}/Profile_pics/TikTok_Posts/Hashtags.json".format(
944
Opt, name2)
945
Downloader.InsertToFile(
946
json_file, TaggedHashtag, " https://tiktok.com/tag/", "TaggedHashtag")
947
948
if TaggedLink == []:
949
pass
950
else:
951
v = 1
952
print(Font.Color.GREEN +
953
"\n[+]" + Font.Color.WHITE + "GETTING TIKTOK TAGGED LINKS")
954
f = open(report, "a")
955
f.write("\nGETTING TIKTOK TAGGED LINKS:\n")
956
for Link in TaggedLink:
957
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "LINK N°{}: ".format(
958
str(v)) + Link)
959
f.write("LINK N°{}: ".format(
960
str(v)) + Link + "\n")
961
v = v + 1
962
f.close()
963
json_file = "GUI/Reports/{}/{}/Profile_pics/TikTok_Posts/Links.json".format(
964
Opt, name2)
965
Downloader.InsertToFile(
966
json_file, TaggedLink, "Link", "TaggedLink", "TaggedLink")
967
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE +
968
Language.Translation.Translate_Language(LangFile, "Username", "Default", "Video").format(folder))
969
else:
970
print(Font.Color.RED + "\n[!]" + Font.Color.WHITE +
971
Language.Translation.Translate_Language(LangFile, "Username", "Default", "NoPost"))
972
973