Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
from flask import Flask, render_template, request, redirect, url_for, jsonify, session
|
2 |
import requests
|
3 |
import os
|
4 |
from datetime import timedelta
|
@@ -30,6 +30,14 @@ HUGGINGFACE_URLS = [
|
|
30 |
"https://huggingface.co/spaces/openfree/Article-Generator",
|
31 |
]
|
32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
# Extract title from the last part of URL
|
34 |
def extract_title(url):
|
35 |
parts = url.split("/")
|
@@ -58,83 +66,6 @@ def validate_token(token):
|
|
58 |
|
59 |
return False, None
|
60 |
|
61 |
-
# Create a redirect page for each URL
|
62 |
-
def create_frame_page(url, title):
|
63 |
-
return f'''
|
64 |
-
<!DOCTYPE html>
|
65 |
-
<html lang="ko">
|
66 |
-
<head>
|
67 |
-
<meta charset="UTF-8">
|
68 |
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
69 |
-
<title>{title}</title>
|
70 |
-
<style>
|
71 |
-
body, html {{
|
72 |
-
margin: 0;
|
73 |
-
padding: 0;
|
74 |
-
height: 100%;
|
75 |
-
overflow: hidden;
|
76 |
-
}}
|
77 |
-
.container {{
|
78 |
-
position: absolute;
|
79 |
-
width: 100%;
|
80 |
-
height: 100%;
|
81 |
-
display: flex;
|
82 |
-
flex-direction: column;
|
83 |
-
}}
|
84 |
-
.header {{
|
85 |
-
background: #f5f5f5;
|
86 |
-
padding: 10px;
|
87 |
-
display: flex;
|
88 |
-
justify-content: space-between;
|
89 |
-
align-items: center;
|
90 |
-
border-bottom: 1px solid #ddd;
|
91 |
-
}}
|
92 |
-
.header h3 {{
|
93 |
-
margin: 0;
|
94 |
-
font-size: 16px;
|
95 |
-
}}
|
96 |
-
.header a {{
|
97 |
-
color: #4CAF50;
|
98 |
-
text-decoration: none;
|
99 |
-
}}
|
100 |
-
.frame-container {{
|
101 |
-
flex-grow: 1;
|
102 |
-
position: relative;
|
103 |
-
}}
|
104 |
-
iframe {{
|
105 |
-
position: absolute;
|
106 |
-
top: 0;
|
107 |
-
left: 0;
|
108 |
-
width: 100%;
|
109 |
-
height: 100%;
|
110 |
-
border: none;
|
111 |
-
}}
|
112 |
-
</style>
|
113 |
-
</head>
|
114 |
-
<body>
|
115 |
-
<div class="container">
|
116 |
-
<div class="header">
|
117 |
-
<h3>{title}</h3>
|
118 |
-
<a href="{url}" target="_blank">새 창에서 열기</a>
|
119 |
-
</div>
|
120 |
-
<div class="frame-container">
|
121 |
-
<iframe src="{url}" allowfullscreen="true" frameborder="0" allow="accelerometer; camera; encrypted-media; geolocation; gyroscope; microphone; midi"></iframe>
|
122 |
-
</div>
|
123 |
-
</div>
|
124 |
-
</body>
|
125 |
-
</html>
|
126 |
-
'''
|
127 |
-
|
128 |
-
# Route to serve a framed page
|
129 |
-
@app.route('/frame/<int:url_id>')
|
130 |
-
def frame(url_id):
|
131 |
-
try:
|
132 |
-
url = HUGGINGFACE_URLS[url_id]
|
133 |
-
title = extract_title(url)
|
134 |
-
return create_frame_page(url, title)
|
135 |
-
except IndexError:
|
136 |
-
return "URL not found", 404
|
137 |
-
|
138 |
# Homepage route
|
139 |
@app.route('/')
|
140 |
def home():
|
@@ -186,15 +117,16 @@ def get_urls():
|
|
186 |
search_query = request.args.get('search', '').lower()
|
187 |
|
188 |
results = []
|
189 |
-
for
|
190 |
title = extract_title(url)
|
|
|
191 |
|
192 |
if search_query and search_query not in url.lower() and search_query not in title.lower():
|
193 |
continue
|
194 |
|
195 |
results.append({
|
196 |
'url': url,
|
197 |
-
'
|
198 |
'title': title
|
199 |
})
|
200 |
|
@@ -646,7 +578,7 @@ if __name__ == '__main__':
|
|
646 |
}
|
647 |
|
648 |
urls.forEach(item => {
|
649 |
-
const { url,
|
650 |
|
651 |
// Create grid item
|
652 |
const gridItem = document.createElement('div');
|
@@ -676,7 +608,7 @@ if __name__ == '__main__':
|
|
676 |
|
677 |
// Create iframe to display the content
|
678 |
const iframe = document.createElement('iframe');
|
679 |
-
iframe.src =
|
680 |
iframe.title = title;
|
681 |
iframe.allow = 'accelerometer; camera; encrypted-media; geolocation; gyroscope; microphone; midi';
|
682 |
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
|
|
|
30 |
"https://huggingface.co/spaces/openfree/Article-Generator",
|
31 |
]
|
32 |
|
33 |
+
# Transform Huggingface URL to direct space URL
|
34 |
+
def transform_url(url):
|
35 |
+
prefix = "https://huggingface.co/spaces/"
|
36 |
+
if url.startswith(prefix):
|
37 |
+
rest = url[len(prefix):]
|
38 |
+
return f"https://{rest.replace('/', '-')}.hf.space"
|
39 |
+
return url
|
40 |
+
|
41 |
# Extract title from the last part of URL
|
42 |
def extract_title(url):
|
43 |
parts = url.split("/")
|
|
|
66 |
|
67 |
return False, None
|
68 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
# Homepage route
|
70 |
@app.route('/')
|
71 |
def home():
|
|
|
117 |
search_query = request.args.get('search', '').lower()
|
118 |
|
119 |
results = []
|
120 |
+
for url in HUGGINGFACE_URLS:
|
121 |
title = extract_title(url)
|
122 |
+
transformed_url = transform_url(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 |
+
'embedUrl': transformed_url,
|
130 |
'title': title
|
131 |
})
|
132 |
|
|
|
578 |
}
|
579 |
|
580 |
urls.forEach(item => {
|
581 |
+
const { url, embedUrl, 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 = embedUrl;
|
612 |
iframe.title = title;
|
613 |
iframe.allow = 'accelerometer; camera; encrypted-media; geolocation; gyroscope; microphone; midi';
|
614 |
iframe.setAttribute('allowfullscreen', '');
|