Spaces:
Sleeping
Sleeping
| #!/usr/bin/python3 | |
| __author__ = "https://codeberg.org/allendema" | |
| from bs4 import BeautifulSoup | |
| import requests | |
| import os | |
| import json | |
| import sys | |
| import time | |
| import gradio as gr | |
| def get_user_media(username): | |
| YELLOW = "\033[1;32;40m" | |
| RED = "\033[31m" | |
| headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:94.0) Gecko/20100101 Firefox/103.0.2'} | |
| base_url = "https://story.snapchat.com/@" | |
| mix = base_url + username | |
| media_folder = "media" | |
| os.makedirs(media_folder, exist_ok=True) | |
| r = requests.get(mix, headers=headers) | |
| if not r.ok: | |
| sys.exit(f"{RED} Oh Snap! No connection with Snap!") | |
| soup = BeautifulSoup(r.content, "html.parser") | |
| snaps = soup.find(id="__NEXT_DATA__").string.strip() | |
| data = json.loads(snaps) | |
| try: | |
| for i in data["props"]["pageProps"]["story"]["snapList"]: | |
| file_url = i["snapUrls"]["mediaUrl"] | |
| if file_url == "": | |
| continue | |
| r = requests.get(file_url, stream=True, headers=headers) | |
| if "image" in r.headers['Content-Type']: | |
| file_name = os.path.join(media_folder, r.headers['ETag'].replace('"', '') + ".jpeg") | |
| elif "video" in r.headers['Content-Type']: | |
| file_name = os.path.join(media_folder, r.headers['ETag'].replace('"', '') + ".mp4") | |
| if os.path.isfile(file_name): | |
| continue | |
| sleep(0.3) | |
| if r.status_code == 200: | |
| with open(file_name, 'wb') as f: | |
| for chunk in r: | |
| f.write(chunk) | |
| else: | |
| print("Cannot make connection to download media!") | |
| except KeyError: | |
| print(f"{RED}No user stories found for the last 24h.") | |
| else: | |
| print(f"\nAt least one Story found. Successfully Downloaded.") | |
| def gr_interface(username): | |
| try: | |
| get_user_media(username) | |
| return f"Successfully downloaded media for {username}. Check the 'media' folder." | |
| except Exception as e: | |
| return f"Error: {str(e)}" | |
| iface = gr.Interface(fn=gr_interface, inputs="text", outputs="text") | |
| iface.launch() | |