Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,8 +1,7 @@
|
|
| 1 |
-
from flask import Flask, render_template, request, redirect, url_for, jsonify, session
|
| 2 |
import requests
|
| 3 |
import os
|
| 4 |
from datetime import timedelta
|
| 5 |
-
from urllib.parse import urlparse, urljoin
|
| 6 |
|
| 7 |
app = Flask(__name__)
|
| 8 |
app.secret_key = os.urandom(24) # Session encryption key
|
|
@@ -31,38 +30,14 @@ HUGGINGFACE_URLS = [
|
|
| 31 |
"https://huggingface.co/spaces/openfree/Article-Generator",
|
| 32 |
]
|
| 33 |
|
| 34 |
-
#
|
| 35 |
-
def
|
| 36 |
parts = url.split('/')
|
| 37 |
-
if len(parts)
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
'type': parts[3],
|
| 43 |
-
'owner': parts[4],
|
| 44 |
-
'repo': parts[5],
|
| 45 |
-
'full_id': f"{parts[4]}/{parts[5]}"
|
| 46 |
-
}
|
| 47 |
-
elif len(parts) >= 5:
|
| 48 |
-
# Other URL format
|
| 49 |
-
return {
|
| 50 |
-
'type': 'models', # Default
|
| 51 |
-
'owner': parts[3],
|
| 52 |
-
'repo': parts[4],
|
| 53 |
-
'full_id': f"{parts[3]}/{parts[4]}"
|
| 54 |
-
}
|
| 55 |
-
|
| 56 |
-
return None
|
| 57 |
-
|
| 58 |
-
# Extract direct embed URL
|
| 59 |
-
def get_embed_url(url):
|
| 60 |
-
model_info = extract_model_info(url)
|
| 61 |
-
if not model_info or model_info['type'] != 'spaces':
|
| 62 |
-
return url
|
| 63 |
-
|
| 64 |
-
# For spaces, use the embedded version
|
| 65 |
-
return f"https://huggingface.co/spaces/{model_info['owner']}/{model_info['repo']}/embed"
|
| 66 |
|
| 67 |
# Extract title from the last part of URL
|
| 68 |
def extract_title(url):
|
|
@@ -145,19 +120,14 @@ def get_urls():
|
|
| 145 |
results = []
|
| 146 |
for url in HUGGINGFACE_URLS:
|
| 147 |
title = extract_title(url)
|
| 148 |
-
model_info = extract_model_info(url)
|
| 149 |
-
|
| 150 |
-
if not model_info:
|
| 151 |
-
continue
|
| 152 |
|
| 153 |
if search_query and search_query not in url.lower() and search_query not in title.lower():
|
| 154 |
continue
|
| 155 |
|
| 156 |
results.append({
|
| 157 |
'url': url,
|
| 158 |
-
'
|
| 159 |
-
'title': title
|
| 160 |
-
'model_info': model_info
|
| 161 |
})
|
| 162 |
|
| 163 |
return jsonify(results)
|
|
@@ -272,7 +242,7 @@ if __name__ == '__main__':
|
|
| 272 |
|
| 273 |
.grid-container {
|
| 274 |
display: grid;
|
| 275 |
-
grid-template-columns: repeat(auto-fill, minmax(
|
| 276 |
gap: 1.5rem;
|
| 277 |
}
|
| 278 |
|
|
@@ -283,7 +253,7 @@ if __name__ == '__main__':
|
|
| 283 |
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
|
| 284 |
display: flex;
|
| 285 |
flex-direction: column;
|
| 286 |
-
height:
|
| 287 |
}
|
| 288 |
|
| 289 |
.grid-header {
|
|
@@ -608,7 +578,7 @@ if __name__ == '__main__':
|
|
| 608 |
}
|
| 609 |
|
| 610 |
urls.forEach(item => {
|
| 611 |
-
const { url,
|
| 612 |
|
| 613 |
// Create grid item
|
| 614 |
const gridItem = document.createElement('div');
|
|
@@ -638,7 +608,7 @@ if __name__ == '__main__':
|
|
| 638 |
|
| 639 |
// Create iframe to display the content
|
| 640 |
const iframe = document.createElement('iframe');
|
| 641 |
-
iframe.src =
|
| 642 |
iframe.title = title;
|
| 643 |
iframe.allow = 'accelerometer; camera; encrypted-media; geolocation; gyroscope; microphone; midi';
|
| 644 |
iframe.setAttribute('allowfullscreen', '');
|
|
|
|
| 1 |
+
from flask import Flask, render_template, request, redirect, url_for, jsonify, session
|
| 2 |
import requests
|
| 3 |
import os
|
| 4 |
from datetime import timedelta
|
|
|
|
| 5 |
|
| 6 |
app = Flask(__name__)
|
| 7 |
app.secret_key = os.urandom(24) # Session encryption key
|
|
|
|
| 30 |
"https://huggingface.co/spaces/openfree/Article-Generator",
|
| 31 |
]
|
| 32 |
|
| 33 |
+
# Get direct iframe URL for Huggingface spaces
|
| 34 |
+
def get_iframe_url(url):
|
| 35 |
parts = url.split('/')
|
| 36 |
+
if len(parts) >= 6 and parts[3] == 'spaces':
|
| 37 |
+
owner = parts[4]
|
| 38 |
+
repo = parts[5]
|
| 39 |
+
return f"https://{owner}-{repo}.hf.space"
|
| 40 |
+
return url
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
|
| 42 |
# Extract title from the last part of URL
|
| 43 |
def extract_title(url):
|
|
|
|
| 120 |
results = []
|
| 121 |
for url in HUGGINGFACE_URLS:
|
| 122 |
title = extract_title(url)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 123 |
|
| 124 |
if search_query and search_query not in url.lower() and search_query not in title.lower():
|
| 125 |
continue
|
| 126 |
|
| 127 |
results.append({
|
| 128 |
'url': url,
|
| 129 |
+
'iframeUrl': get_iframe_url(url),
|
| 130 |
+
'title': title
|
|
|
|
| 131 |
})
|
| 132 |
|
| 133 |
return jsonify(results)
|
|
|
|
| 242 |
|
| 243 |
.grid-container {
|
| 244 |
display: grid;
|
| 245 |
+
grid-template-columns: repeat(auto-fill, minmax(450px, 1fr));
|
| 246 |
gap: 1.5rem;
|
| 247 |
}
|
| 248 |
|
|
|
|
| 253 |
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
|
| 254 |
display: flex;
|
| 255 |
flex-direction: column;
|
| 256 |
+
height: 600px;
|
| 257 |
}
|
| 258 |
|
| 259 |
.grid-header {
|
|
|
|
| 578 |
}
|
| 579 |
|
| 580 |
urls.forEach(item => {
|
| 581 |
+
const { url, iframeUrl, title } = item;
|
| 582 |
|
| 583 |
// Create grid item
|
| 584 |
const gridItem = document.createElement('div');
|
|
|
|
| 608 |
|
| 609 |
// Create iframe to display the content
|
| 610 |
const iframe = document.createElement('iframe');
|
| 611 |
+
iframe.src = iframeUrl;
|
| 612 |
iframe.title = title;
|
| 613 |
iframe.allow = 'accelerometer; camera; encrypted-media; geolocation; gyroscope; microphone; midi';
|
| 614 |
iframe.setAttribute('allowfullscreen', '');
|