Last active
August 20, 2024 18:28
-
-
Save Xnuvers007/2f04b01cdcc29731a6e20bbc310a028a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment