Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -18,8 +18,9 @@ TELEGRAM_STRING_SESSION = "1ApWapzMBu8a9o9Wu1GexPdkO7Jsr6po1xym67EcfAxkEbVx1oxw6
|
|
| 18 |
|
| 19 |
# ----------- Настройки ВКонтакте -----------
|
| 20 |
# Вставляем ваши токены
|
| 21 |
-
VK_ACCESS_TOKEN =
|
| 22 |
-
VK_REFRESH_TOKEN =
|
|
|
|
| 23 |
|
| 24 |
# Остальные настройки ВКонтакте
|
| 25 |
VK_CLIENT_ID = os.environ.get("VK_CLIENT_ID", "")
|
|
@@ -55,6 +56,8 @@ if "VK_ACCESS_TOKEN" not in st.session_state:
|
|
| 55 |
st.session_state["VK_ACCESS_TOKEN"] = VK_ACCESS_TOKEN
|
| 56 |
if "VK_REFRESH_TOKEN" not in st.session_state:
|
| 57 |
st.session_state["VK_REFRESH_TOKEN"] = VK_REFRESH_TOKEN
|
|
|
|
|
|
|
| 58 |
|
| 59 |
def human_format_views(num: int) -> str:
|
| 60 |
if num < 1000:
|
|
@@ -75,17 +78,18 @@ def refresh_vk_token() -> bool:
|
|
| 75 |
"""
|
| 76 |
# Берём текущие значения из session_state
|
| 77 |
current_refresh = st.session_state["VK_REFRESH_TOKEN"]
|
| 78 |
-
|
| 79 |
-
|
|
|
|
| 80 |
return False
|
| 81 |
|
| 82 |
-
url = "https://id.vk.com/oauth2/auth" # л
|
| 83 |
data = {
|
| 84 |
"grant_type": "refresh_token",
|
| 85 |
"client_id": VK_CLIENT_ID,
|
| 86 |
"client_secret": VK_CLIENT_SECRET,
|
| 87 |
-
"refresh_token": current_refresh
|
| 88 |
-
|
| 89 |
}
|
| 90 |
|
| 91 |
resp = requests.post(url, data=data)
|
|
@@ -249,68 +253,4 @@ if st.button("Обработать"):
|
|
| 249 |
vk_total_views = 0
|
| 250 |
|
| 251 |
for link in lines:
|
| 252 |
-
platform = detect_platform(
|
| 253 |
-
if platform == "telegram":
|
| 254 |
-
res_line, views = process_telegram_link(link)
|
| 255 |
-
tg_results.append((res_line, views))
|
| 256 |
-
tg_total_views += views
|
| 257 |
-
elif platform == "vk":
|
| 258 |
-
res_line, views = process_vk_link(link)
|
| 259 |
-
vk_results.append((res_line, views))
|
| 260 |
-
vk_total_views += views
|
| 261 |
-
else:
|
| 262 |
-
st.markdown(f"**Ошибка**: не распознал платформу — {link}", unsafe_allow_html=True)
|
| 263 |
-
|
| 264 |
-
tg_results.sort(key=lambda x: x[1], reverse=True)
|
| 265 |
-
vk_results.sort(key=lambda x: x[1], reverse=True)
|
| 266 |
-
|
| 267 |
-
md_lines = []
|
| 268 |
-
|
| 269 |
-
# --- Telegram ---
|
| 270 |
-
md_lines.append("## Telegram")
|
| 271 |
-
md_lines.append(f"**Суммарный охват постов — {human_format_views(tg_total_views)} просмотров**")
|
| 272 |
-
if tg_results:
|
| 273 |
-
for r_line, _ in tg_results:
|
| 274 |
-
md_lines.append(r_line)
|
| 275 |
-
else:
|
| 276 |
-
md_lines.append("_Нет ссылок на Telegram_")
|
| 277 |
-
md_lines.append("")
|
| 278 |
-
|
| 279 |
-
# --- ВКонтакте ---
|
| 280 |
-
md_lines.append("## ВКонтакте")
|
| 281 |
-
md_lines.append(f"**Суммарный охват постов — {human_format_views(vk_total_views)} просмотров**")
|
| 282 |
-
if vk_results:
|
| 283 |
-
for r_line, _ in vk_results:
|
| 284 |
-
md_lines.append(r_line)
|
| 285 |
-
else:
|
| 286 |
-
md_lines.append("_Нет ссылок на ВКонтакте_")
|
| 287 |
-
md_lines.append("")
|
| 288 |
-
|
| 289 |
-
st.markdown("### Результат:")
|
| 290 |
-
for line in md_lines:
|
| 291 |
-
st.markdown(line, unsafe_allow_html=True)
|
| 292 |
-
|
| 293 |
-
markdown_result = "\n".join(md_lines)
|
| 294 |
-
|
| 295 |
-
# Кнопка копирования
|
| 296 |
-
copy_button_html = f"""
|
| 297 |
-
<html>
|
| 298 |
-
<head>
|
| 299 |
-
<script>
|
| 300 |
-
function copyToClipboard() {{
|
| 301 |
-
const btn = document.getElementById("copy-btn");
|
| 302 |
-
const text = `{markdown_result}`;
|
| 303 |
-
navigator.clipboard.writeText(text).then(function() {{
|
| 304 |
-
btn.innerText = "Скопировано успешно";
|
| 305 |
-
}}, function(err) {{
|
| 306 |
-
btn.innerText = "Ошибка при копировании";
|
| 307 |
-
}});
|
| 308 |
-
}}
|
| 309 |
-
</script>
|
| 310 |
-
</head>
|
| 311 |
-
<body>
|
| 312 |
-
<button id="copy-btn" onclick="copyToClipboard()" style="padding: 8px 16px; font-size: 16px;">Скопировать код</button>
|
| 313 |
-
</body>
|
| 314 |
-
</html>
|
| 315 |
-
"""
|
| 316 |
-
components.html(copy_button_html, height=80)
|
|
|
|
| 18 |
|
| 19 |
# ----------- Настройки ВКонтакте -----------
|
| 20 |
# Вставляем ваши токены
|
| 21 |
+
VK_ACCESS_TOKEN = os.environ.get("VK_ACCESS_TOKEN", "")
|
| 22 |
+
VK_REFRESH_TOKEN = os.environ.get("VK_REFRESH_TOKEN", "")
|
| 23 |
+
VK_DEVICE_ID = os.environ.get("VK_DEVICE_ID", "") # Добавляем device_id
|
| 24 |
|
| 25 |
# Остальные настройки ВКонтакте
|
| 26 |
VK_CLIENT_ID = os.environ.get("VK_CLIENT_ID", "")
|
|
|
|
| 56 |
st.session_state["VK_ACCESS_TOKEN"] = VK_ACCESS_TOKEN
|
| 57 |
if "VK_REFRESH_TOKEN" not in st.session_state:
|
| 58 |
st.session_state["VK_REFRESH_TOKEN"] = VK_REFRESH_TOKEN
|
| 59 |
+
if "VK_DEVICE_ID" not in st.session_state:
|
| 60 |
+
st.session_state["VK_DEVICE_ID"] = VK_DEVICE_ID
|
| 61 |
|
| 62 |
def human_format_views(num: int) -> str:
|
| 63 |
if num < 1000:
|
|
|
|
| 78 |
"""
|
| 79 |
# Берём текущие значения из session_state
|
| 80 |
current_refresh = st.session_state["VK_REFRESH_TOKEN"]
|
| 81 |
+
device_id = st.session_state.get("VK_DEVICE_ID", "") # Получаем device_id
|
| 82 |
+
if not current_refresh or not VK_CLIENT_ID or not VK_CLIENT_SECRET or not device_id:
|
| 83 |
+
st.error("Невозможно обновить токен: нет refresh_token, client_id, client_secret или device_id.")
|
| 84 |
return False
|
| 85 |
|
| 86 |
+
url = "https://id.vk.com/oauth2/auth" # Endpoint для обновления токена
|
| 87 |
data = {
|
| 88 |
"grant_type": "refresh_token",
|
| 89 |
"client_id": VK_CLIENT_ID,
|
| 90 |
"client_secret": VK_CLIENT_SECRET,
|
| 91 |
+
"refresh_token": current_refresh,
|
| 92 |
+
"device_id": device_id # Передаем device_id
|
| 93 |
}
|
| 94 |
|
| 95 |
resp = requests.post(url, data=data)
|
|
|
|
| 253 |
vk_total_views = 0
|
| 254 |
|
| 255 |
for link in lines:
|
| 256 |
+
platform = detect_platform(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|