728x90
๋ฐ์ํ
โป SK ์ด๋์ค ๋ฃจํค์ฆ 24๊ธฐ (ํด๋ผ์ฐ๋๊ธฐ๋ฐ ์ค๋งํธ ์ตํฉ๋ณด์ ๊ณผ์ ) ๊ต์ก์ ๋ค์ผ๋ฉด์ ์์ฑํ ๋ด์ฉ์ ๋๋ค.
Flask์ feedparser ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ RSS ๋ฆฌ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด ๋ณด์๋ค
1๏ธโฃ Flask ์ฑ ์์ฑ
from flask import Flask
app = Flask(__name__) # Flask ์ ํ๋ฆฌ์ผ์ด์
์์ฑ
- Flask ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ
- ์์ฑ๋ ``app`` ๊ฐ์ฒด๋ ๋ผ์ฐํ , ์์ฒญ ์ฒ๋ฆฌ, ์๋ต ์์ฑ ๋ฑ์ ํต์ฌ ์ญํ ์ ๋ด๋น
2๏ธโฃ ํํ์ด์ง ๊ตฌํ
@app.route("/")
def home():
return render_template("index.html")
- ๊ธฐ๋ณธ ๊ฒฝ๋ก /์ ๋ํ ์์ฒญ ์ฒ๋ฆฌ
- ``render_template`` ํจ์๋ก ``index.html`` ํ ํ๋ฆฟ์ ๋ ๋๋ง
- ``index.html``์๋ ``RSS`` ํผ๋ ``URL``์ ์ ๋ ฅ๋ฐ๋ ํผ์ด ํฌํจ๋์ด ์์
3๏ธโฃ RSS ๋ฐ์ดํฐ ์ฒ๋ฆฌ
@app.route("/rss", methods=['POST'])
def rss():
rss_url = request.form['rss_url'] # ์ฌ์ฉ์๊ฐ ์ ์ถํ RSS URL ๊ฐ์ ธ์ค๊ธฐ
feed = feedparser.parse(rss_url) # RSS ๋ฐ์ดํฐ๋ฅผ ํ์ฑ
return render_template('rss.html', feed=feed)
- POST ์์ฒญ์ผ๋ก ํผ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ
- ``feedparser.parse(rss_url)``์ ์ฌ์ฉํ์ฌ ``RSS`` ๋ฐ์ดํฐ๋ฅผ ํ์ฑํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ``feed`` ๋ณ์์ ์ ์ฅ
- ํ์ฑ๋ ``feed`` ๋ฐ์ดํฐ๋ฅผ ``rss.html`` ํ ํ๋ฆฟ์ ์ ๋ฌํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
4๏ธโฃ HTML ํ ํ๋ฆฟ ์์ฑ
RSS URL์ ์ ๋ ฅ๋ฐ๋ ํ์ด์ง: index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RSS Reader</title>
</head>
<body>
<h1>RSS Reader</h1>
<form method="post" action="{{ url_for('rss') }}">
<b>Enter RSS URL:</b>
<input type="text" name="rss_url" size="40">
<button type="submit">Submit</button>
</form>
</body>
</html>
RSS ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ํ์ด์ง: rss.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RSS Results</title>
</head>
<body>
<h1>RSS Feed Results</h1>
<table border="1">
<tr>
<th>Title</th>
<th>Link</th>
<th>Description</th>
</tr>
{% for entry in feed.entries %}
<tr>
<td>{{ entry.title }}</td>
<td>{{ entry.link }}</td>
<td>{{ entry.description }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
5๏ธโฃ Flask ์ ํ๋ฆฌ์ผ์ด์ ์คํ
if __name__ == "__main__":
app.run(debug=True)
- Flask ๊ฐ๋ฐ ์๋ฒ๋ฅผ ์คํ
- ``debug=True``๋ก ์ค์ ํ๋ฉด ์ฝ๋ ๋ณ๊ฒฝ ์ ์๋ฒ๊ฐ ์๋์ผ๋ก ์ฌ์์๋๊ณ , ๋๋ฒ๊ทธ ์ ๋ณด๋ฅผ ํ์ธ ๊ฐ๋ฅ
๐ป ์ต์ข ์ฝ๋
from flask import Flask, render_template, request
import feedparser
app = Flask(__name__)
@app.route("/")
def home():
return render_template("index.html")
@app.route("/rss", methods=['POST'])
def rss():
rss_url = request.form['rss_url']
feed = feedparser.parse(rss_url)
return render_template('rss.html', feed=feed)
if __name__ == "__main__":
app.run(debug=True)
๐ ํ ์คํธ ๊ฒฐ๊ณผ
- RSS URL ์: https://www.dailysecu.com/rss/allArticle.xml
- ๋ธ๋ผ์ฐ์ ์ RSS ํผ๋์ ์ ๋ชฉ, ๋งํฌ, ์ค๋ช ์ด ํ ์ด๋ธ๋ก ์ถ๋ ฅ๋จ.
๐(+์ถ๊ฐ) CSS ์คํ์ผ ์ ์ฉ
body {
font-family: Arial, sans-serif;
}
h1 {
color: #333;
}
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
tr:hover {
background-color: #f5f5f5;
}
<!DOCTYPE html>
<html lang="en">
<head>
...
<link rel="stylesheet" type="text/css" href="{{url_for('static', filename='style.css')}}">
</head>
<body>
...
</body>
</html>
728x90
๋ฐ์ํ
'๐งฉ Language > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] Faker๋ฅผ ์ด์ฉํ ๊ฐ์ง ๋ฐ์ดํฐ ์์ฑํ๋ ๋ฐฉ๋ฒ (1) | 2025.01.17 |
---|---|
[Python] Flask ๊ธฐ์ด ๋ฐฐ์ฐ๊ธฐ: Python์ผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ (1) | 2025.01.16 |
[Python] FTP ํ๋กํ ์ฝ ์ฐ๊ฒฐ ๋ฐ ์๋ํ (0) | 2025.01.16 |
ํ์ด์ฌ ์์ ๋ฌธ์ ์๋ํ (0) | 2025.01.16 |
Python ์น ์คํฌ๋ํ (2) Requests ๋ผ์ด๋ธ๋ฌ๋ฆฌ (0) | 2025.01.16 |