-
아,, 스파르톤 끝나서 그냥 자러갈뻔;;
복습일지 마무리하고 자러감.. 일단.. 복습일지 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차 목표는 이렇데 완료하였다!
다음 목표는.. 책리뷰인가? 그거 따라 그려봐야겠다.
'개발일지' 카테고리의 다른 글
복습일지 대신 프로젝트일지 02 (0) 2021.09.14 복습일지 대신 프로젝트일지 01 (0) 2021.09.08 복습일지 03.5 (0) 2021.09.05 스파르톤 생존일지 (21:00~06:00) (0) 2021.09.04 내일배움단 프로젝트 챌린지 개발일지(1~15일차) (0) 2021.09.03