[Python] Flask๋กœ ๊ฐ„๋‹จํ•œ RSS ๋ฆฌ๋” ํŽ˜์ด์ง€ ๊ตฌํ˜„ํ•˜๊ธฐ

2025. 1. 16. 16:42ยท๐Ÿงฉ Language/Python
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
'๐Ÿงฉ Language/Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Python] Faker๋ฅผ ์ด์šฉํ•œ ๊ฐ€์งœ ๋ฐ์ดํ„ฐ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
  • [Python] Flask ๊ธฐ์ดˆ ๋ฐฐ์šฐ๊ธฐ: Python์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ
  • [Python] FTP ํ”„๋กœํ† ์ฝœ ์—ฐ๊ฒฐ ๋ฐ ์ž๋™ํ™”
  • ํŒŒ์ด์ฌ ์—‘์…€ ๋ฌธ์„œ ์ž๋™ํ™”
WISHee
WISHee
IT์™€ ๋ณด์•ˆ์— ๋Œ€ํ•œ ๊ณต๋ถ€ ๊ธฐ๋ก์„ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์•„๊ฐ€๋Š” ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๐Ÿ›ก๏ธ๐Ÿ’ป
  • WISHee
    DevwithWish
    WISHee
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐ŸŒณ ROOT (128)
      • โ›“๏ธ ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ (10)
        • ๊ธฐ๋ณธ ๊ฐœ๋… (9)
        • ํŒจํ‚ท ๋ถ„์„ (1)
        • ์นจ์ž… ํƒ์ง€ ๋ฐ ๋ฐฉ์ง€ (0)
      • โš™๏ธ ์‹œ์Šคํ…œ ๋ณด์•ˆ (0)
        • ์šด์˜์ฒด์ œ ๋ณด์•ˆ (0)
        • ์ทจ์•ฝ์  ๋ถ„์„ (0)
        • ๋กœ๊ทธ ๋ถ„์„ (0)
      • ๐ŸŒ ์›น ๋ณด์•ˆ (1)
        • OWASP TOP 10 (1)
        • ์›น ์„œ๋ฒ„ ๋ณด์•ˆ (0)
        • ์›น ์ทจ์•ฝ์  ๋ถ„์„ (0)
      • โ˜๏ธ ํด๋ผ์šฐ๋“œ ๋ณด์•ˆ (3)
        • AWS (3)
      • ๐Ÿ” ์•”ํ˜ธํ™” & ์ธ์ฆ (3)
        • ์•”ํ˜ธํ™” ๊ฐœ๋… (2)
        • TLS,SSL (0)
        • ์ธ์ฆ & ์ ‘๊ทผ์ œ์–ด (1)
      • ๐Ÿšจ ๋ณด์•ˆ ์‹ค๋ฌด (30)
        • ๋ณด์•ˆ ๊ด€์ œ (14)
        • ๋ชจ์˜ ํ•ดํ‚น (12)
        • ์ทจ์•ฝ์  ์ง„๋‹จ (3)
        • ๋””์ง€ํ„ธํฌ๋ Œ์‹ (1)
      • ๐Ÿ“š ISMS & ISO27001 (9)
        • ISMS, ISMS-P ์ธ์ฆ (2)
      • ๐Ÿ“ฐ ๋ณด์•ˆ ๋‰ด์Šค & ํŠธ๋ Œ๋“œ (1)
        • ์ตœ์‹  ๋ณด์•ˆ ์ด์Šˆ (1)
        • ์‚ฌ์ด๋ฒ„ ์œ„ํ˜‘ ์ •๋ณด (0)
        • ๋ณด์•ˆ ์ปจํผ๋Ÿฐ์Šค ๋ฆฌ๋ทฐ (0)
      • ๐Ÿ”ฅ SKShieldusRookies (15)
        • Review (3)
        • PBL (0)
        • ๊ณผ์ œ (4)
        • ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ (8)
        • ์ตœ์ข… ํ”„๋กœ์ ํŠธ (0)
      • ๐Ÿ—‚๏ธ Project (3)
        • SOAR (0)
        • BlockChain (3)
      • ๐Ÿงฉ Language (23)
        • Java (1)
        • Python (16)
        • Programmers (6)
      • ๐Ÿ‘ฅ ๋ฒ„์ „๊ด€๋ฆฌ & ํ˜‘์—…๋„๊ตฌ (9)
        • Git, GitHub (4)
        • etc (5)
      • ๐Ÿ’œ ์ผ์ƒ (21)
        • Boot Camp (4)
        • Study (6)
        • Travel (8)
        • Study Abroad (3)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • GitHub
  • ๊ณต์ง€์‚ฌํ•ญ

    • ๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค!
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํŒŒ๋ฆฌ์—ฌํ–‰
    ๊นƒํ—ˆ๋ธŒ
    ๋ณด์•ˆ์‹ค์Šต
    ์œˆ๋„์šฐ๋ณด์•ˆ
    ์œ ๋Ÿฝํ•œ๋‹ฌ์—ฌํ–‰
    ํ•ด์™ธ์—ฌํ–‰
    ๋ธ”๋ก์ฒด์ธ์‹ค์Šต
    ์นผ๋ฆฌ๋ฆฌ๋ˆ…์Šค
    flask
    VSCode
    ๋ฆฌ๋ˆ…์Šค๋ณด์•ˆ
    ๋ชจ์˜ํ•ดํ‚น
    ์œ ๋Ÿฝ์—ฌํ–‰
    ํ˜‘์—…๋„๊ตฌ
    sk์‰ด๋”์Šค๋ฃจํ‚ค์ฆˆ
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ํŒŒ์ด์ฌ
    Github
    ํ”„๋ž‘์Šค์—ฌํ–‰
    Python
    ํ”Œ๋ผ์Šคํฌ
    slack
    ๋Ÿฐ๋˜์—ฌํ–‰
    ์˜นํ”Œ๋ขฐ๋ฅด
    ์ •๋ณด๋ณด์•ˆ
    ์™€์ด์–ด์ƒคํฌ
    ๋ชฝ์ƒ๋ฏธ์…ธ
    ํ•œ๋‹ฌ์—ฌํ–‰
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    git
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • 160x600
    250x250
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
WISHee
[Python] Flask๋กœ ๊ฐ„๋‹จํ•œ RSS ๋ฆฌ๋” ํŽ˜์ด์ง€ ๊ตฌํ˜„ํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”