Skip to content

Instantly share code, notes, and snippets.

@Xnuvers007
Last active August 20, 2024 18:28
Show Gist options
  • Save Xnuvers007/2f04b01cdcc29731a6e20bbc310a028a to your computer and use it in GitHub Desktop.
Save Xnuvers007/2f04b01cdcc29731a6e20bbc310a028a to your computer and use it in GitHub Desktop.
from flask import Flask, request, jsonify
import requests
from urllib.parse import urlparse
app = Flask(__name__)
def get_highest_quality_images(images_data):
quality_priority = ['2048', '638', '320']
all_slides = images_data.get('all_slides', [])
images_by_quality = {quality: [] for quality in quality_priority}
for slide in all_slides:
quality = slide.get('quality')
if quality in images_by_quality:
images_by_quality[quality] = slide.get('images', [])
for quality in quality_priority:
if images_by_quality[quality]:
return images_by_quality[quality]
return []
def extract_filename_from_url(url):
path = urlparse(url).path
path_parts = path.strip('/').split('/')
if len(path_parts) >= 2:
username = path_parts[0]
title = path_parts[1]
title = title.replace(':', '-').replace('?', '-').replace('/', '-')
return f"{username}-{title}"
return "downloaded_file"
@app.route('/slideshare', methods=['GET'])
def slideshare():
url = request.args.get('url')
filetype = request.args.get('filetype')
if not url or not filetype:
return jsonify({
'error': 'Missing required parameters: url, filetype',
'Example': f'{request.host}/slideshare?url=https://www.slideshare.net/StevanyStevany/materi-lengkap-tentang-power-point&filetype=pdf'
}), 400
session = requests.Session() # Using session for connection pooling
headers_get = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
}
headers_post = {
'accept': '*/*',
'accept-language': 'en-US,en;q=0.6',
'content-type': 'application/json',
'origin': 'https://slidesaver.app',
'referer': 'https://slidesaver.app/',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
}
try:
# Fetch images data from Slidesaver
response_get = session.get(f'https://slidesaver.app/api/get-images?url={url}', headers=headers_get)
response_get.raise_for_status()
images_data = response_get.json()
images = get_highest_quality_images(images_data)
if not images:
return jsonify({'error': 'No images found.'}), 404
json_data = {
'images': images,
'type': filetype,
}
# Request download URL for the given filetype
response_post = session.post('https://slidesaver.app/api/get-slide', headers=headers_post, json=json_data)
response_post.raise_for_status()
response_content = response_post.json()
download_url = response_content.get('download_url')
if not download_url:
return jsonify({'error': 'Failed to get download URL from response.'}), 500
filename_base = extract_filename_from_url(url)
filename = f'{filename_base}.{filetype}'
return jsonify({
'download_url': download_url,
'filename': filename
})
except requests.RequestException as e:
return jsonify({'error': f'Request failed: {str(e)}'}), 500
finally:
session.close() # Close the session
if __name__ == '__main__':
app.run(debug=False, threaded=True) # Enable threading for better concurrency
from flask import Flask, request, jsonify
import requests
from urllib.parse import urlparse
app = Flask(__name__)
def get_highest_quality_images(images_data):
quality_priority = ['2048', '638', '320']
all_slides = images_data.get('all_slides', [])
images_by_quality = {quality: [] for quality in quality_priority}
for slide in all_slides:
quality = slide.get('quality')
if quality in images_by_quality:
images_by_quality[quality] = slide.get('images', [])
for quality in quality_priority:
if images_by_quality[quality]:
return images_by_quality[quality]
return []
def extract_filename_from_url(url):
path = urlparse(url).path
path_parts = path.strip('/').split('/')
if len(path_parts) >= 2:
username = path_parts[0]
title = path_parts[1]
title = title.replace(':', '-').replace('?', '-').replace('/', '-')
return f"{username}-{title}"
else:
return "downloaded_file"
@app.route('/slideshare', methods=['GET'])
def slideshare():
url = request.args.get('url')
filetype = request.args.get('filetype')
if not url or not filetype:
return jsonify({
'error': 'Missing required parameters: url, filetype',
'Example': f'{request.host}/slideshare?url=https://www.slideshare.net/StevanyStevany/materi-lengkap-tentang-power-point&filetype=pdf'
}), 400
headers_get = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
}
# Fetch images data from Slidesaver
response_get = requests.get(f'https://slidesaver.app/api/get-images?url={url}', headers=headers_get)
response_get.raise_for_status()
images_data = response_get.json()
images = get_highest_quality_images(images_data)
if not images:
return jsonify({'error': 'No images found.'}), 404
headers_post = {
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'sec-gpc': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
}
json_data = {
'images': images,
'type': filetype,
}
response_post = requests.post('https://slidesaver.app/api/get-slide', headers=headers_post, json=json_data)
response_post.raise_for_status()
response_content = response_post.json()
download_url = response_content.get('download_url')
if not download_url:
return jsonify({'error': 'Failed to get download URL from response.'}), 500
filename_base = extract_filename_from_url(url)
filename = f'{filename_base}.{filetype}'
return jsonify({
'download_url': download_url,
'filename': filename
})
if __name__ == '__main__':
app.run(debug=False, threaded=True)
import requests
from urllib.parse import urlparse
def get_highest_quality_images(images_data):
# Define the priority order of image qualities
quality_priority = ['2048', '638', '320']
all_slides = images_data.get('all_slides', [])
# Create a dictionary to store images by quality
images_by_quality = {quality: [] for quality in quality_priority}
for slide in all_slides:
quality = slide.get('quality')
if quality in images_by_quality:
images_by_quality[quality] = slide.get('images', [])
# Find the highest quality images based on the defined priority
for quality in quality_priority:
if images_by_quality[quality]:
return images_by_quality[quality]
# If no images found for any priority, return an empty list
return []
def extract_filename_from_url(url):
# Extract the username and title from the URL
path = urlparse(url).path
path_parts = path.strip('/').split('/')
if len(path_parts) >= 2:
username = path_parts[0]
title = path_parts[1]
# Replace any special characters in the title with dashes
title = title.replace(':', '-').replace('?', '-').replace('/', '-')
return f"{username}-{title}"
else:
return "downloaded_file"
def download_slide_share_file(url, filetype):
headers_get = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8',
'accept-language': 'en-US,en;q=0.6',
'cache-control': 'max-age=0',
'priority': 'u=0, i',
'sec-ch-ua': '"Not)A;Brand";v="99", "Brave";v="127", "Chromium";v="127"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'sec-gpc': '1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
}
# Step 1: Fetch images data from Slidesaver
response_get = requests.get(
f'https://slidesaver.app/api/get-images?url={url}',
headers=headers_get,
)
response_get.raise_for_status()
images_data = response_get.json()
images = get_highest_quality_images(images_data)
if not images:
print('No images found.')
return
print("Retrieved images:", images)
headers_post = {
'accept': '*/*',
'accept-language': 'en-US,en;q=0.6',
'content-type': 'application/json',
'origin': 'https://slidesaver.app',
'priority': 'u=1, i',
'referer': 'https://slidesaver.app/',
'sec-ch-ua': '"Not)A;Brand";v="99", "Brave";v="127", "Chromium";v="127"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'sec-gpc': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
}
json_data = {
'images': images,
'type': filetype,
}
# Step 2: Request download URL for the given filetype
response_post = requests.post(
'https://slidesaver.app/api/get-slide',
headers=headers_post,
json=json_data
)
response_post.raise_for_status()
response_content = response_post.json()
# Extracting the download URL from the JSON response
download_url = response_content.get('download_url')
if not download_url:
print('Failed to get download URL from response.')
return
print(f"Download URL: {download_url}")
# Extract filename from the URL
filename_base = extract_filename_from_url(url)
filename = f'{filename_base}.{filetype}'
# Step 3: Download the file
response_download = requests.get(download_url)
if response_download.status_code == 200:
# Save the new file
with open(filename, 'wb') as file:
file.write(response_download.content)
print(f'File downloaded and saved as {filename}')
else:
print(f'Failed to download the file. Status code: {response_download.status_code}')
# User inputs
url = input("Enter the SlideShare URL: ") # Example: https://www.slideshare.net/StevanyStevany/materi-lengkap-tentang-power-point
filetype = input("Enter the filetype (pdf/pptx): ")
download_slide_share_file(url, filetype)
from quart import Quart, request, jsonify
import aiohttp
from urllib.parse import urlparse
app = Quart(__name__)
def get_highest_quality_images(images_data):
quality_priority = ['2048', '638', '320']
all_slides = images_data.get('all_slides', [])
images_by_quality = {quality: [] for quality in quality_priority}
for slide in all_slides:
quality = slide.get('quality')
if quality in images_by_quality:
images_by_quality[quality] = slide.get('images', [])
for quality in quality_priority:
if images_by_quality[quality]:
return images_by_quality[quality]
return []
def extract_filename_from_url(url):
path = urlparse(url).path
path_parts = path.strip('/').split('/')
if len(path_parts) >= 2:
username = path_parts[0]
title = path_parts[1]
title = title.replace(':', '-').replace('?', '-').replace('/', '-')
return f"{username}-{title}"
return "downloaded_file"
async def fetch_images_data(session, url):
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
}
async with session.get(f'https://slidesaver.app/api/get-images?url={url}', headers=headers, timeout=30) as response:
response.raise_for_status()
return await response.json()
async def request_download_url(session, images, filetype):
headers = {
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'sec-gpc': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
}
json_data = {
'images': images,
'type': filetype,
}
async with session.post('https://slidesaver.app/api/get-slide', headers=headers, json=json_data, timeout=30) as response:
response.raise_for_status()
return await response.json()
@app.route('/slideshare', methods=['GET'])
async def slideshare():
url = request.args.get('url')
filetype = request.args.get('filetype')
if not url or not filetype:
return jsonify({
'error': 'Missing required parameters: url, filetype',
'Example': f'{request.host}/slideshare?url=https://www.slideshare.net/StevanyStevany/materi-lengkap-tentang-power-point&filetype=pdf'
}), 400
async with aiohttp.ClientSession() as session:
try:
images_data = await fetch_images_data(session, url)
images = get_highest_quality_images(images_data)
if not images:
return jsonify({'error': 'No images found.'}), 404
response_content = await request_download_url(session, images, filetype)
download_url = response_content.get('download_url')
if not download_url:
return jsonify({'error': 'Failed to get download URL from response.'}), 500
filename_base = extract_filename_from_url(url)
filename = f'{filename_base}.{filetype}'
return jsonify({
'download_url': download_url,
'filename': filename
})
except Exception as e:
return jsonify({'error': str(e)}), 500
if __name__ == '__main__':
app.run(debug=False)
import requests
import os
url = input("Enter the SlideShare URL: ") # https://www.slideshare.net/StevanyStevany/materi-lengkap-tentang-power-point
filetype = input("Enter the filetype (pdf/pptx): ")
headers_get = {
'accept': '*/*',
'accept-language': 'id,en;q=0.9,en-GB;q=0.8,en-US;q=0.7,sv;q=0.6',
'priority': 'u=1, i',
'referer': 'https://slidesaver.app/',
'sec-ch-ua': '"Chromium";v="124", "Microsoft Edge";v="124", "Not-A.Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0',
}
response_get = requests.get(
f'https://slidesaver.app/api/get-images?url={url}',
headers=headers_get,
)
images = response_get.json().get("images", [])
print("Retrieved images:", images)
headers_post = {
'accept': '*/*',
'accept-language': 'id,en;q=0.9,en-GB;q=0.8,en-US;q=0.7,sv;q=0.6',
'content-type': 'application/json',
'origin': 'https://slidesaver.app',
'priority': 'u=1, i',
'referer': 'https://slidesaver.app/',
'sec-ch-ua': '"Chromium";v="124", "Microsoft Edge";v="124", "Not-A.Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0',
}
json_data = {
'images': images,
'type': filetype,
}
response_post = requests.post('https://slidesaver.app/api/get-slide', headers=headers_post, json=json_data)
response_content = response_post.content.decode('utf-8')
download_url = response_content.strip('"')
print(f"Download URL: {download_url}")
response_download = requests.get(download_url)
if response_download.status_code == 200:
get_title_from_url = download_url.split('/')[-1].split('.')[0]
filename = f'{get_title_from_url}.{filetype}'
# filename = 'output.pptx'
# # Check if the file exists and remove it
# if os.path.exists(filename):
# os.remove(filename)
# print(f"Removed existing file: {filename}")
# Save the new file
with open(filename, 'wb') as file:
file.write(response_download.content)
print(f'File downloaded and saved as {filename}')
else:
print(f'Failed to download the file. Status code: {response_download.status_code}')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment