#init.py
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.mystar2.insert_one(doc)
print('완료!', name)
# 기존 mystar 콜렉션을 삭제하고, 출처 url들을 가져온 후, 크롤링하여 DB에 저장합니다.
def insert_all():
db.mystar2.drop() # mystar 콜렉션을 모두 지워줍니다.
urls = get_urls()
for url in urls:
insert_star(url)
### 실행하기
insert_all()
#app.py
@app.route('/api/list', methods=['GET'])
def show_stars():
stars = list(db.mystar2.find({}, {'_id': False}).sort('like', -1))
return jsonify({'all_stars': stars})
//index.html
$(document).ready(function () {
showStar();
});
function showStar() {
$.ajax({
type: 'GET',
url: '/api/list',
data: {},
success: function (response) {
let stars = response['all_stars']
for (let i = 0; i < stars.length; i++) {
let img = stars[i]['img_url']
let like = stars[i]['like']
let name = stars[i]['name']
let recent = stars[i]['recent']
let url = stars[i]['url']
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}" 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="#"token interpolation">${name}')" class="card-footer-item has-text-info"> 위로! <span class="icon"><i class="fas fa-thumbs-up"></i></span></a>
<a href="#"token interpolation">${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);
}
}
});
}
# 좋아요
@app.route('/api/like', methods=['POST'])
def like_star():
name_receive = request.form['name_give']
stars = db.mystar2.find_one({'name':name_receive})
like = stars['like']
new_like = like + 1
db.mystar2.update_one({'name': name_receive}, {'$set': {'like': new_like}})
return jsonify({'msg': '좋아요 완료'})
# 삭제
@app.route('/api/delete', methods=['POST'])
def delete_star():
name_receive = request.form['name_give']
db.mystar2.delete_one({'name': name_receive})
return jsonify({'msg': '삭제 완료 ✔'})
// 좋아요
function likeStar(name) {
$.ajax({
type: 'POST',
url: '/api/like',
data: {name_give: name},
success: function (response) {
alert(response['msg']);
window.location.reload();
}
});
}
// 삭제
function deleteStar(name) {
$.ajax({
type: 'POST',
url: '/api/delete',
data: {name_give: name},
success: function (response) {
alert(response['msg']);
window.location.reload();
}
});
}
시작하기
1) 인스턴스 시작
2) Ubuntu 18.04 체크 (우분투: 리눅스 배포판)
3) 키페어 이름 설정 후 받아서 보관
1년 후 자동결제 방지
→ 인스턴스 중지 or 정지
AWS EC2에 접속하기
1) GitBash 실행 ↔ 종료는 exit 입력
ssh -i 받은키페어를끌어다놓기 buntu@IPv4퍼블릭IP
간단한 리눅스 명령어
ls → 내 위치의 모든 파일을 보기
pwd → 내 위치(폴더의 경로) 보기
mkdir aaa → 현 위치에 aaa 폴더 만들기
cd aaa → aaa 폴더로 이동
cd .. → 폴더 나가기 (상위 폴더로 이동)
cp -r [복사할 것] [붙여넣기 할 것] → 복사 붙여넣기
rm -rf [지울 것] → 지우기
sudo [실행 할 명령어] → 명령어를 관리자 권한으로 실행
sudo su → 관리가 권한으로 들어감 (나올때는 exit)
왼쪽 상단 사이트 관리자 열기 클릭
새 사이트 → 이름 설정
FTP는 SFPT 로 설정
host는 퍼블릭IPv4주소
포트는 22
로그온 유형 → 키 파일
사용자 → ubuntu
키 파일 찾아서 열기 → 연결
위 파일 파일질라로 업로드
git bash 실행
sudo chmod 755 initial_ec2.sh
포트 여는 방법
1) 인스턴스 → 보안 → 보안그룹 → 인바운드 규칙 편집
2) 규칙 추가로 포트 열기
→ 5000(flask 기본포트)
→ 80(http 접속을 위한 기본포트)
→ 27017(외부에서 mongoDB 접속하기 하기 위한 포트)
3) 소스유형 : 위치무관 (현재 위치무관 없음)
→ IPv4 IPv6 각각 열기
4) 규칙 저장
→ 포트 다 연 후 퍼블릭IPv4주소:5000 접속하면 접속됨
돌아가고 있는 flask 끄는 방법
Ctrl + C
(구매 후) My가비아
(도메인 우측) 관리
(좌측 세번째) DNS 정보 → DNS 관리
(도메인 우측) 관리 → 레코드 수정 → 레코드 추가
1) 호스트 → @
2) 값/위치 → 퍼블릭IPv4주소
구매한 도메인으로 접속
→ 이때 nohup으로 켜져있어야 함
<meta property="og:title" content="내 사이트의 제목" />
<meta property="og:description" content="보고 있는 페이지의 내용 요약" />
<meta property="og:image" content="{{ url_for('static', filename='ogimage.png') }}" />
og:title , og:description 내용 적기
구글에서 원하는 사이즈 이미지 찾아서 적용
1) 가로 사이즈 * 세로 사이즈 검색
2) '이미지를 다른 이름으로 저장' → static에 저장
3) og:image에 이미지 이름을 적고, jpg파일인지 png파일인지 확인후 맞게 적기
서버가 돌아가고 있다면 끄기
ps -ef | grep 'app.py'
kill -9 pid값1
kill -9 pid값2
refresh 후 FileZilla 기존파일 삭제 후 바뀐 파일 업로드
서버 다시 켜서 확인
nohup python app.py &
코드 오타 등
카카오나 페이스북 즉시 업데이트 X
1) 성능T상의 문제로 og 태그를 바로 업데이트 하지 않기 때문
2) 수동으로 초기화(캐쉬삭제)해야 함
카카오톡 캐쉬삭제 방법
페이스북 캐쉬삭제 방법