ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๊ฐ•์˜] ์›น๊ฐœ๋ฐœ ์ข…ํ•ฉ๋ฐ˜ 4์ฃผ์ฐจ
    SPRING/SPARTA 2021. 8. 6. 04:27

    Flask๋ผ๋Š” ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋ฐ›๊ณ  ์‹œ์ž‘ํ•จ.

    ํŒŒ์ด์ฌ์„ ์ด์šฉํ•ด์„œ API๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํŒจํ‚ค์ง€์ธ๋“ฏ

     

    ๋„ˆ๋ฌด๋„ˆ๋ฌด ๋ฐ˜๋ณต์ค‘์ด์ง€๋งŒ

    ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ํ•˜๋Š” GET๊ณผ POST์˜ ์ฐจ์ด -> ์ฟผ๋ฆฌ๋กœ, ๋ฐ์ดํ„ฐ ์กฐํšŒ vs key:valueํ˜•ํƒœ๋กœ, ์ƒ์„ฑ, ๋ณ€๊ฒฝ, ์‚ญ์ œ

     

    meta tag : 

    htmlํŒŒ์ผ head์•ˆ์— ๋“ค์–ด์žˆ์Œ

    ์นด์นด์˜คํ†ก ๊ณต์œ  ๋“ฑ์— ๊ฐ„๋žตํ™” ํ•ด์„œ ์•ž์—์„œ ๋ณด์ด๊ฒŒ ๊ณต์œ ๋  ์ˆ˜ ์žˆ๋„๋ก ์ ์–ด๋†“์Œ

    ๋ผ์žŒ ๋””์Šค ์ด๊ฑฐ ์žฌ๋ฐŒ์œผ๋‹ˆ ํ•œ๋ฒˆ์”ฉ ๋ณด์„ธ์š”

     

    <๋ชจ๋‘์˜ ์ฑ…๋ฆฌ๋ทฐ>

    ์ œ๋ชฉ ์ €์ž ๋ฆฌ๋ทฐ ๋ฐ›์•„์„œ POST๋กœ ๋ณด๋‚ธ๋‹ค. (html)

    POST๋กœ ๋ฐ›์€ ๊ฐ’์„ ๋ฐ์ดํ„ฐ ํ˜•์‹์œผ๋กœ ๋งŒ๋“ค์–ด db์— ์ €์žฅํ•œ๋‹ค.(py)

     

    ์ง€๊ธˆ๊นŒ์ง€ ์ €์žฅํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋“ค์„ GET์œผ๋กœ ์กฐํšŒํ•˜์—ฌ ์›น ํŽ˜์ด์ง€์— ๋ณด์ด๊ฒŒํ•œ๋‹ค.

    db์— ์ €์žฅ๋œ ๋ชจ๋“  ๊ฐ’์„ list๋กœ ๋ฐ›์•„์„œ GET์œผ๋กœ ์ „๋‹ฌํ•œ๋‹ค.(py)

    ๋ฐ›์•„์„œ ๊ทธ ๋ฐ์ดํ„ฐ์— ์žˆ๋Š” ๊ฐ’๋“ค์„ ํ•˜๋‚˜ ํ•˜๋‚˜ ๊บผ๋‚ด ํ˜•์‹์— ๋งž์ถฐ ๋ถ™์—ฌ์ค€๋‹ค.(html)

    ์ด๊ฑธ ์›น ํŽ˜์ด์ง€ ๋กœ๋”ฉ ๋•Œ๋งˆ๋‹ค ํ•œ๋‹ค.

     

    <๋‚˜ํ™€๋กœ ๋ฉ”๋ชจ์žฅ>

    ๋„ค์ด๋ฒ„ ์˜ํ™” ์‚ฌ์ดํŠธ url๊ณผ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ POST๋กœ ๋ณด๋‚ธ๋‹ค. (html)

    POST๋กœ ๊ฐ’์„ ๋ฐ›๊ณ , ๋ฐ›์€ url์„ ํฌ๋กค๋งํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ˜•์‹์œผ๋กœ ๋งŒ๋“ค์–ด db์— ์ €์žฅํ•œ๋‹ค.(py)

     

    ์ง€๊ธˆ๊นŒ์ง€ ์ €์žฅํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋“ค์„ GET์œผ๋กœ ์กฐํšŒํ•˜์—ฌ ์›น ํŽ˜์ด์ง€์— ๋ณด์ด๊ฒŒํ•œ๋‹ค.

    db์— ์ €์žฅ๋œ ๋ชจ๋“  ๊ฐ’์„ list๋กœ ๋ฐ›์•„์„œ GET์œผ๋กœ ์ „๋‹ฌํ•œ๋‹ค.(py)

    ๋ฐ›์•„์„œ ๊ทธ ๋ฐ์ดํ„ฐ์— ์žˆ๋Š” ๊ฐ’๋“ค์„ ํ•˜๋‚˜ ํ•˜๋‚˜ ๊บผ๋‚ด ์นด๋“œ ๊ฐ’์œผ๋กœ ๋„ฃ๊ณ  ๋ถ™์—ฌ์ค€๋‹ค.(html)

    ์ด๊ฑธ ์›น ํŽ˜์ด์ง€ ๋กœ๋”ฉ ๋•Œ๋งˆ๋‹ค ํ•œ๋‹ค.

    ์ด๋ ‡๊ฒŒ ์ž…๋ ฅํ•œ ๊ฒƒ๋งˆ๋‹ค ๋ถ™๋Š”๋‹ค.

    ์ €๋ฒˆ์— ํ•˜๋˜ ๊ทธ ์ง„ ๋งž์Œ ๊ทธ๊ฑฐ ๋ฐœ์ „์‹œํ‚จ ๊ฒƒ

    ์•ฝ๊ฐ„ ์ด์ „ ํฌ๋กค๋ง + ์ด๋ฒˆ ์„œ๋ฒ„๊นŒ์ง€ ํ•ฉ์ณ์ง„ ์ฝ”๋“œ์˜€๊ธฐ์— ์ฒจ๋ถ€ํ•ด๋ณธ๋‹ค.

                $(document).ready(function () {
                    showArticles();
                });
    
                function postArticle() {
                    let url = $('#post-url').val()
                    let comment = $('#post-comment').val()
    
                    $.ajax({
                        type: "POST",
                        url: "/memo",
                        data: {url_give : url, comment_give : comment},
                        success: function (response) { // ์„ฑ๊ณตํ•˜๋ฉด
                            alert(response["msg"]);
                            window.location.reload()
                        }
                    })
                }
    
                function showArticles() {
                    $.ajax({
                        type: "GET",
                        url: "/memo",
                        data: {},
                        success: function (response) {
                            let articles = response['all_articles']
                            for(let i = 0 ; i < articles.length ; i++){
                                let title = articles[i]['title']
                                let image = articles[i]['image']
                                let url = articles[i]['url']
                                let desc = articles[i]['desc']
                                let comment = articles[i]['comment']
    
                                let temp_html = `<div class="card">
                                                    <img class="card-img-top" src="${image}" alt="Card image cap">
                                                    <div class="card-body">
                                                        <a target="_blank" href="${url}" class="card-title">${title}</a>
                                                        <p class="card-text">${desc}</p>
                                                        <p class="card-text comment">${comment}</p>
                                                    </div>
                                                </div>`
                                $('#cards-box').append(temp_html)
                            }
                        }
                    })
                }
    @app.route('/memo', methods=['GET'])
    def listing():
        articles = list(db.articles.find({}, {'_id' : False}))
        return jsonify({'all_articles': articles})
    
    ## API ์—ญํ• ์„ ํ•˜๋Š” ๋ถ€๋ถ„
    @app.route('/memo', methods=['POST'])
    def saving():
    
        comment_receive = request.form['comment_give']
    
        url_receive = request.form['url_give']
    
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
        data = requests.get(url_receive, headers=headers)
    
        soup = BeautifulSoup(data.text, 'html.parser')
    
        title = soup.select_one('meta[property="og:title"]')['content']
        image = soup.select_one('meta[property="og:image"]')['content']
        desc = soup.select_one('meta[property="og:description"]')['content']
    
        doc = {
                'title' : title,
                'image' : image,
                'desc' : desc,
                'url': url_receive,
                'comment': comment_receive
        }
        db.articles.insert_one(doc)
    
        return jsonify({'msg':'์ €์žฅ์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.'})

    DB์˜ ๋ชจ์Šต

     

    <๊ณผ์ œ : ๋˜ ์–‘์ดˆ>

    ์œ„์™€ ๋ฐฉ๋ฒ•์€ ๊ฐ™์•˜๋”ฐ.

Designed by Tistory.