Skip to content

Commit 6f4da24

Browse files
committed
fix names table
1 parent 6ef1c00 commit 6f4da24

File tree

2 files changed

+39
-31
lines changed

2 files changed

+39
-31
lines changed

.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
SECRET_KEY="SECRETFORMYPROJECT007"
2-
DATABASE_URL=postgresql://tirion:1234@localhost:5432/mydb
2+
DATABASE_URL=postgresql://tirion:1234@localhost:5432/mydb2

page_analyzer/app.py

Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
from dotenv import load_dotenv
66
import validators
77
from bs4 import BeautifulSoup
8-
9-
8+
from urllib.parse import urlparse
109

1110
load_dotenv()
1211
DATABASE_URL = os.getenv('DATABASE_URL')
@@ -28,28 +27,28 @@ def index():
2827
flash('Некорректный URL', 'error')
2928
return redirect(url_for('index'))
3029

30+
# Извлекаем домен из URL
31+
domain = urlparse(url).netloc
32+
3133
conn = get_db_connection()
3234
cur = conn.cursor()
3335
try:
34-
# Проверяем, существует ли уже этот URL
35-
cur.execute('SELECT id FROM urls WHERE name = %s', (url,))
36+
# Проверяем, существует ли уже этот домен
37+
cur.execute('SELECT id FROM urls WHERE name = %s', (domain,))
3638
existing_url = cur.fetchone()
3739

3840
if existing_url:
39-
# Если URL уже существует, перенаправляем на его детали
41+
# Если домен уже существует, перенаправляем на его детали
4042
url_id = existing_url[0]
4143
flash('Страница уже существует', 'error')
4244
return redirect(url_for('url_detail', url_id=url_id))
4345

44-
# Если URL не существует, добавляем его
45-
cur.execute('INSERT INTO urls (name) VALUES (%s)', (url,))
46+
# Если домен не существует, добавляем его
47+
cur.execute('INSERT INTO urls (name) VALUES (%s) RETURNING id', (domain,))
48+
url_id = cur.fetchone()[0]
4649
conn.commit()
4750
flash('Страница успешно добавлена', 'success')
4851

49-
# Получаем ID добавленного URL для перенаправления
50-
cur.execute('SELECT id FROM urls WHERE name = %s', (url,))
51-
url_id = cur.fetchone()[0]
52-
5352
return redirect(url_for('url_detail', url_id=url_id))
5453
except Exception as e:
5554
conn.rollback()
@@ -68,18 +67,18 @@ def urls():
6867

6968
# Объединяем запросы для получения всех URL и последней проверки
7069
cur.execute('''
71-
SELECT u.id, u.name, u.created_at,
72-
uc.status_code, uc.created_at AS last_check,
73-
uc.h1, uc.title, uc.description
74-
FROM urls u
75-
LEFT JOIN url_checks uc ON u.id = uc.url_id
76-
AND uc.created_at = (
77-
SELECT MAX(created_at)
78-
FROM url_checks
79-
WHERE url_id = u.id
80-
)
81-
ORDER BY u.created_at DESC
82-
''')
70+
SELECT u.id, u.name, u.created_at,
71+
uc.status_code, uc.created_at AS last_check,
72+
uc.h1, uc.title, uc.description
73+
FROM urls u
74+
LEFT JOIN url_checks uc ON u.id = uc.url_id
75+
AND uc.created_at = (
76+
SELECT MAX(created_at)
77+
FROM url_checks
78+
WHERE url_id = u.id
79+
)
80+
ORDER BY u.created_at DESC
81+
''')
8382
urls = cur.fetchall()
8483

8584
cur.close()
@@ -104,6 +103,8 @@ def url_detail(url_id):
104103
return render_template('result.html', url=url, checks=checks)
105104

106105

106+
from urllib.parse import urlparse
107+
107108
@app.route('/check_url/<int:url_id>', methods=['POST'])
108109
def add_check(url_id):
109110
conn = get_db_connection()
@@ -113,11 +114,16 @@ def add_check(url_id):
113114
url = cur.fetchone()
114115

115116
if url is None:
116-
flash('URL не найден.')
117+
flash('URL не найден.', 'error')
117118
return redirect(url_for('urls'))
118119

119120
url_name = url[0]
120121

122+
# Проверка и добавление схемы к URL, если она отсутствует
123+
parsed_url = urlparse(url_name)
124+
if not parsed_url.scheme:
125+
url_name = 'http://' + url_name # Добавляем http по умолчанию
126+
121127
try:
122128
response = requests.get(url_name)
123129
response.raise_for_status() # Проверка на ошибки HTTP
@@ -134,24 +140,26 @@ def add_check(url_id):
134140
title_content = title_tag.text if title_tag else None
135141
description_content = description_tag['content'] if description_tag else None
136142

137-
138143
# Записываем код статуса и SEO-данные в базу данных
139-
140144
cur.execute('''
141145
INSERT INTO url_checks (url_id, status_code, h1, title, description)
142146
VALUES (%s, %s, %s, %s, %s)
143-
''', (url_id, response.status_code, h1_content, title_content, description_content))
147+
''', (url_id, response.status_code, h1_content, title_content, description_content))
148+
144149
conn.commit()
145-
flash('Страница успешно проверена')
146-
except requests.exceptions.RequestException:
147-
flash('Произошла ошибка при проверке.')
150+
flash('Страница успешно проверена', 'success')
151+
except Exception as e:
152+
conn.rollback()
153+
flash('Произошла ошибка при проверке', 'error')
148154
finally:
149155
cur.close()
150156
conn.close()
151157

152158
return redirect(url_for('url_detail', url_id=url_id))
153159

154160

161+
162+
155163
if __name__ == '__main__':
156164
app.run(debug=True)
157165

0 commit comments

Comments
 (0)