티스토리 뷰
@5-1. DB만들기 (데이터 쌓기)
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta
# DB에 저장할 영화인들의 출처 url을 가져옵니다.
def get_urls():
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('https://movie.naver.com/movie/sdb/rank/rpeople.nhn', headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#old_content > table > tbody > tr')
urls = []
for tr in trs:
a = tr.select_one('td.title > a')
if a is not None:
base_url = 'https://movie.naver.com/'
url = base_url + a['href']
urls.append(url)
return urls
# 출처 url로부터 영화인들의 사진, 이름, 최근작 정보를 가져오고 mystar 콜렉션에 저장합니다.
def insert_star(url):
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')
name = soup.select_one('#content > div.article > div.mv_info_area > div.mv_info.character > h3 > a').text
img_url = soup.select_one('#content > div.article > div.mv_info_area > div.poster > img')['src']
recent_work = soup.select_one(
'#content > div.article > div.mv_info_area > div.mv_info.character > dl > dd > a:nth-child(1)').text
doc = {
'name': name,
'img_url': img_url,
'recent': recent_work,
'url': url,
'like': 0
}
db.mystar.insert_one(doc)
print('완료!', name)
# 기존 mystar 콜렉션을 삭제하고, 출처 url들을 가져온 후, 크롤링하여 DB에 저장합니다.
def insert_all():
db.mystar.drop() # mystar 콜렉션을 모두 지워줍니다.
urls = get_urls()
for url in urls:
insert_star(url)
### 실행하기
insert_all()
#GET
@app.route('/api/list', methods=['GET'])
def show_stars():
movie_star = list(db.mystar.find({}, {'_id': False}).sort('like', -1))
return jsonify({'movie_stars': movie_star})
#like 큰 순서대로 나열 : .sort('like', -1) -1 내림차순, 1 : 오름차순
function showStar() {
$.ajax({
type: 'GET',
url: '/api/list?sample_give=샘플데이터',
data: {},
success: function (response) {
let mystars = response['movie_stars']
for (let i = 0; i < mystars.length; i++) {
let name = mystars[i]['name']
let img_url = mystars[i]['img_url']
let recent = mystars[i]['recent']
let url = mystars[i]['url']
let like = mystars[i]['like']
let temp_html = `<div class="card">
<div class="card-content">
<div class="media">
<div class="media-left">
<figure class="image is-48x48">
<img
src="${img_url}"
alt="Placeholder image"
/>
</figure>
</div>
<div class="media-content">
<a href="${url}" target="_blank" class="star-name title is-4">${name} (좋아요: ${like})</a>
<p class="subtitle is-6">${recent}</p>
</div>
</div>
</div>
<footer class="card-footer">
<a href="#" onclick="likeStar('${name}')" class="card-footer-item has-text-info">
위로!
<span class="icon">
<i class="fas fa-thumbs-up"></i>
</span>
</a>
<a href="#" onclick="deleteStar('${name}')" class="card-footer-item has-text-danger">
삭제
<span class="icon">
<i class="fas fa-ban"></i>
</span>
</a>
</footer>
</div>`
$('#star-box').append(temp_html)
}
}
});
}
# Robo 3T : edit document > like 1로 바꾸기 > 확인
#POST
@app.route('/api/like', methods=['POST'])
def like_star():
name_receive = request.form['name_give']
target_star = db.mystar.find_one({'name': name_receive})
current_like = target_star['like']
new_like = current_like + 1
db.mystar.update_one({'name': name_receive}, {'$set': {'like': new_like}})
return jsonify({'msg': '좋아요 완료!'})
이름 찾기 > 찾은 것 중에 like 값 찾기 > like +1 한거로 업데이트
function likeStar(name) {
$.ajax({
type: 'POST',
url: '/api/like',
data: {name_give:name},
success: function (response) {
alert(response['msg']);
window.location.reload()
}
});
}
@5-2. 삭제하기
@app.route('/api/delete', methods=['POST'])
def delete_star():
name_receive = request.form['name_give']
db.mystar.delete_one({'name': name_receive})
return jsonify({'msg': '삭제완료!'})
function deleteStar(name) {
$.ajax({
type: 'POST',
url: '/api/delete',
data: {name_give:name},
success: function (response) {
alert(response['msg']);
window.location.reload()
}
});
}
@5-3. 서버 올리기
#리눅스 (Ubuntu)
#aws 인스턴스 > 인스턴스 시작 > 18.04 선택 > 키 페어 보관(중요) > git bash > ssh -i (키페어) ubuntu@ (주소) > yes
# mkdir sparta : 폴터 만들기
# ls : 내위치
# cd sparta/ : 폴더 들어가기
# .. : 폴더 나가기
#서버 세팅
#filezilla > host 주소 입력 > port 22 > key file user : ubuntu 키파일 등록
# sudo chmod 755 initial_ec2.sh > ./initial_ec2.sh
#pip(라이브러리 설치)install flask, pymongo
#python app.py 서버 시작
# control + C 서버 끄기
#AWS방화벽 뚫기
보안 > 보안그룹 > 인바운드 규칙 편집 > 5000, 80, 27017(mogodb) 추가
#업로드
3T 열기 > create > address aws 서버 카피 > authentication perform 체크 > name password 입력
#nohup 설정
nohup python app.py & : bash 꺼도 실행 가능
ps -ef | grep 'app.py' > kill -9 (2개의 코드 입력) : 꺼짐
#도메인 구입(gabia)
DNS관리툴 > 설정 > 레코드 수정 > 레코드 추가 > 호스트: @ > IP추가 > 확인
#OG태그
<meta property="og:title" content="내 사이트의 제목" />
<meta property="og:description" content="보고 있는 페이지의 내용 요약" />
<meta property="og:image" content="{{ url_for('static', filename='ogimage.png') }}" />
static 이미지 저장
페이스북 og 태그 초기화 하기: https://developers.facebook.com/tools/debug/
카카오톡 og 태그 초기화 하기: https://developers.kakao.com/tool/clear/og
'📁Frontend > 📓etc' 카테고리의 다른 글
[항해99]JWT와 API (0) | 2022.07.17 |
---|---|
[스파르타 코딩 클럽] 팀 프로젝트 개발일지 및 후기 (0) | 2022.03.18 |
[스파르타 코딩 클럽]Sever (0) | 2022.03.02 |
[스파르타 코딩 클럽]Python (0) | 2022.03.01 |
[스파르타 코딩 클럽]Javascript (0) | 2022.02.28 |
- Total
- Today
- Yesterday
- Router
- CS
- db
- CSS
- 서버
- scss
- HTML
- 메이킹 챌린지
- CS 스터디
- DB몽고
- sass
- react
- JavaScript
- 크롤링
- 트러블 슈팅
- Wil
- Python
- DESIGN
- flask
- 알고리즘
- Redux
- 항해99
- API
- Til
- styled-components
- JWT
- Git Code
- 스파르타코딩클럽
- 자바스크립트
- git
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |