ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 복습일지 04
    개발일지 2021. 9. 5. 06:21

    아,, 스파르톤 끝나서 그냥 자러갈뻔;;

     

    복습일지 마무리하고 자러감.. 일단.. 복습일지 1차 목표였던 나홀로메모장 0부터 구성하기는 성공했다!!!

     

    작성순서는 서버의 post > 클라이언트의 post > 서버의 get > 클라이언트의 get 

     

    단순한 단계인데 작성하고 에러잡고 제대로 실행되는데만 2시간이나 걸렸다구;;

    아무튼 app 파일부터 작성을 시작했다.

    from pymongo import MongoClient
    client = MongoClient('localhost', 27017)
    #client 뒤에 오는 큰 경로안에 db가 저장된다구~
    db = client.dbpractice

     기본적인 뼈대는 가지고 있지만, db파일 위치를 변경하고 싶어서 client 뒤에 다른 경로를 입력했다.

     

    post 부분은 망설임 없이 작성!

    ## API 역할을 하는 부분
    @app.route('/memo', methods=['POST'])
    def saving():
        #input 박스로 받는 부분 url을 받아서 크롤링이 필요합니다!
        url_receive = request.form['url_give']
        comment_receive = request.form['comment_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'}
        #데이터 넣고!(url 수정필수!)
        data = requests.get(url_receive, headers=headers)
        #soup 호출까지!
        soup = BeautifulSoup(data.text, 'html.parser')
    
        #url 에서 가져와야 하는 것 -> 제목, 이미지, 설명
        #meta에 있는 정보들이다. meta og는 대부분 같은 형식이니 그대로 쓰면 될 듯 하다.
        #<meta property="og:url" content="https://movie.naver.com/movie/bi/mi/basic.naver?code=171539">
        #태그와 속성값으로 찾는 방법 soup.select('태그명[속성="값"]')과 ['content(속성)'] 항목이 필요하다
        title_receive = soup.select_one('meta[property="og:title"]')['content']
        img_receive = soup.select_one('meta[property="og:image"]')['content']
        desc_receive = soup.select_one('meta[property="og:description"]')['content']
    
        #다 찾았으면 doc에 넣어주자!
        doc = {
            'img':img_receive,
            'title':title_receive,
            'desc':desc_receive,
            'url':url_receive,
            'comment':comment_receive
        }
    
        db.memolist.insert_one(doc)
    
        return jsonify({'msg':'포스팅이 완료되었습니다.'})

    했지만 주석이 많은 이유는 혼자 작성하다 다 틀려먹었기 때문이다.

    진자 외않되 였음 글자 다 틀려먹은게 내 app 파일같아서 ^^:;

     

    유의해야 했던 점은 이 app는 url을 input 박스로 받아서 해당 url을 이용해 크롤링을 한다는 점이다.

    soup의 배치를 보면 대충 아하 싶겠지, 하지만 혼자선 못해먹는게 현실이고,,, 더 연습해야 할 뿐이고,,

     

    ['content']로 속성까지 싹싹 긁어오는 것도 잊으면 안된다. 계속 에러가 나서 너무 슬펐는데 아주 곳곳이 문제였다.

    function posting() {
                let url = $(`#article_input`).val()
                let comment = $(`#comment_input`).val()
    
                    $.ajax({
                        type: "POST",
                        url: "/memo",
                        data: {url_give:url,comment_give:comment},
                        success: function (response) {
                            console.log(url,comment)
                            alert(response["msg"]);
                            window.location.reload();
                        }
                    })
                }

    클라이언트는 크게 문제가 없었다. 하지만 계속 에러가 났지.. 그래서 ajax를 전부 지우고 처음부터 다시 적었더니 갑자기 에러가 사라졌다. 읭? 연습도 되고 오히려 좋은 걸로;;

     

    여기 해결됐을때가 5시 좀 넘었을 무렵이었던 것 같은데 일단 너무 행복했다.

    기쁨의 스샷

     

    계속해서 GET을 진행하는데, 하나라도 조용히 넘어가면 내가 아닌가보다^^ 또 다 틀려먹어서 처음부터 다시 뜯어고쳤다...

     

    그래도 솔직히 서버 get은 틀리지도 않고 뚝딱 잘 써냈다.

    @app.route('/memo', methods=['GET'])
    def listing():
        movie = list(db.memolist.find({}, {'_id': False}))
        return jsonify({'movie_list': movie})
    function showpost() {
                    $.ajax({
                        type: "GET",
                        url: "/memo",
                        data: {},
                        success: function (response) {
                            let movies = response['movie_list']
                            for (i=0; i<movies.length; i++){
                                let title = movies[i]['title']
                                let image = movies[i]['img']
                                let url = movies[i]['url']
                                let desc = movies[i]['desc']
                                let comment = movies[i]['comment']
    
                                let temp_html = `<div class="card">
                                                     <img src="${image}"/>
                                                     <div class="card-text">
                                                         <a href="${url}">${title}</a>
                                                         <p>${desc}</p>
                                                         <p class="text_color">${comment}</p>
                                                     </div>
                                                 </div>`
    
                                $(`#card_box`).append(temp_html)
                            }
                        }
                    })
                }

    클라이언트 쪽은 컨닝은 조금 했지만 어떻게 돌아가는지 알고있다구!

    근데 이상하게 계속 작동이 안되서 30분 정도 멘붕에 빠져있었다. 좀 있음 스파르톤 끝나는데;;? 왜..?

     

    잠시 고민을 하다 나름 금방(?) 해결할 수 있었다.

     

    나는 .. get을 사용한 함수를 호출하지 않았다... 몽초이..

     

    $(document).ready(function () {
                    showpost();
                });

     

    호출까지 해서 깔쌈하게 완료! 진짜...잊지말자... 정수리 깨버리고싶다 정말...

     

     

    정상적으로 작동중인 페이지!

     

    복습일지 1차 목표는 이렇데 완료하였다!

     

    다음 목표는.. 책리뷰인가? 그거 따라 그려봐야겠다.

    댓글

Designed by Tistory.