개인 미니 프로젝트 제작 기록 & 복습 용
링크 가져오면, 좋아요, 삭제, 댓글, 댓글수 버튼을 함께 가져오는 부분 예제.
각각의 기능들은 따로 따로 구현해야함.
밑의 HTML과 PYTHON은 링크를 단순하게 가져오는 크롤링과 그것을 HTML에 어떻게 적용하느냐는 예제
[ HTML ]
function showArticles(url) {
$.ajax({
type: "GET",
url: "/memo",
data: {},
success: function (response) {
let list = response['list_receive']
for (let i = 0; i < list.length; i++) {
let title = list[i]['title']
let img = list[i]['img']
let url = list[i]['url']
let comment = list[i]['comment']
let like = list[i]['like']
let counter = list[i]['counter']
let temp_html = `
<div class="card" style="">
<img class="card-img-top"
src="${img}"
alt="Card image cap">
<div class="card-body">
<a target="_blank" href="${url}" class="card-title">${title}</a>
<p class="card-text">${comment}</p>
<div style="width:500px;">
<button type="button" class="btn btn-info" onclick="likeStar('${url}')" style="width:50px;">👍${like}</button>
<button type="button" class="btn btn-light" id="${url}_save" onclick="show90('${url}')" style="width:100px;">댓글 <span style = "color:red;">${counter} 개</span></button>
<button type="button" class="btn btn-dark" id="${url}_bts" onclick="openClose2('${url}')" style="width:100px;">댓글 작성</button>
<button type="button" class="btn btn-danger" onclick="deleteStar('${url}')" style="width:50px;">삭제</button>
</div>
<div id="${url}" class="form-post" style="display:none; margin-top:10px; margin-bottom:10px;">
<div class="form-group">
<label for="post-url">이름</label>
<input class="form-control" placeholder="" id="${url}_name" style="width:70px;"></div>
<div class="form-group">
<label for="post-comment">댓글</label>
<input class="form-control" rows="2" id="${url}_rev"></div>
<button type="button" class="btn btn-primary" onclick="makeReview('${url}')")>댓글 저장</button>
</div>
<table class="table">
<thead>
<tr>
<th scope="col">이름</th>
<th scope="col">댓글</th>
</tr>
</thead>
<tbody id="${url}_box" class="9999">
</tbody>
</table>
`
$('#cards-box').append(temp_html)
}
}
})
}
GET으로 요청하여 가지고 온다.
list를 for(반복문)으로 돌린다.
여기서 중요한 것은 각각 Ajax에서 가져온 값을 $(url) 이런식으로 각각 붙여줄 수 있다는 것.
각각 가져온 $(url)은 나중에 다른 기능을 쓸 때 사용해 준다.
[Python]
@app.route('/memo', methods=['POST'])
def saving():
url = 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, headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
thumbnail = soup.select_one('meta[property="og:image"]')['content']
title = soup.select_one('meta[property="og:title"]')['content']
url = soup.select_one('meta[property="og:url"]')['content']
comment_give = request.form['comment_give']
doc = {'title' : title, 'img' : thumbnail, 'url': url, 'comment': comment_give, 'like' : 0, 'counter' : 0}
## counter은 댓글 수
db.youtubes.insert_one(doc)
return jsonify({'msg':'저장 완료!'})
'Back > Python' 카테고리의 다른 글
Ajax 기본 및 예제 (1) | 2021.03.07 |
---|---|
Flask jinja2, requests - args 활용 예제 (0) | 2021.03.05 |
다음 뉴스 랭킹 크롤링(Crawling) 예제 (0) | 2021.03.02 |
Python, Ajax 활용 예제 - 좋아요 기능 (1) | 2021.02.21 |
Flask에서 Ajax 요청하기 POST 예제 - 북리뷰(book-review) (0) | 2021.02.20 |