본문 바로가기

멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차/WEB

2/10 목

728x90

목요일~~

지난 수업 때 하던 일별 박스오피스 API 서비스를 더 배운다.

 

AJAX의 async: true 비동기(데이터 수신 기다리지 않고 바로 다른 작업 실행. default) 혹은 동기(false. 순차적) 호출을 지정함

 

웹디자인까지 신경 쓸 여유는 없기 때문에,

Bootstrap Examples에서 페이스 소스(HTML)와 css 파일을 WebStorm으로 가져와서 활용한다!

Bootstrap Examples에서 페이스 소스 가져오기
Bootstrap Examples에서 css 파일 가져와 로컬에 저장

HTML에서 불필요한 라인들 지우고 jQuery CND, jQuery 파일, CSS 파일 연동시킴

 

input type="date"로 달력을 넣어 일별 박스오피스 순위를 조회할 수 있게 넣고,

Delegation Model(JS Event 처리 방식)로 Event가 처리될 수 있도록 'onclick' Event Attribute를 사용함

데이터 테이블을 만들기 위해 <thead> Tag 안에 <tr>과 <th>를 원하는 값으로 바꿔줌

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Daily Box Office Search!</title>
    
    <!-- Bootstrap CND (CSS only) -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
    
    <!-- jQuery CND -->
    <script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
    
    <script src="js/jQuery12.js"></script>
    
    <style>
        .bd-placeholder-img {
            font-size: 1.125rem;
            text-anchor: middle;
            -webkit-user-select: none;
            -moz-user-select: none;
            user-select: none;
        }

        @media (min-width: 768px) {
            .bd-placeholder-img-lg {
                font-size: 3.5rem;
            }
        }
    </style>
	<!-- Custom styles for this template -->
    <link href="css/dashboard.css" rel="stylesheet">
</head>
<body>
<header class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0 shadow">
    <a class="navbar-brand col-md-3 col-lg-2 me-0 px-3" href="#">jQuery Example</a>
    <button class="navbar-toggler position-absolute d-md-none collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#sidebarMenu" aria-controls="sidebarMenu" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>
<!--    <input class="form-control form-control-dark w-100" type="text" placeholder="Search" aria-label="Search">-->
    <input id="searchDate" class="form-control form-control-dark w-100" type="date">

    <div class="navbar-nav">
        <div class="nav-item text-nowrap">
            <a class="nav-link px-3" href="#" onclick="my_func()">Search!!</a>
        </div>
    </div>
</header>

<div class="container-fluid">
    <div class="row">
        <nav id="sidebarMenu" class="col-md-3 col-lg-2 d-md-block bg-light sidebar collapse">
            <div class="position-sticky pt-3">
                <ul class="nav flex-column">
                </ul>
                <ul class="nav flex-column mb-2">
                </ul>
            </div>
        </nav>

        <main class="col-md-9 ms-sm-auto col-lg-10 px-md-4">

            <h2>Box Office Rank</h2>
            <div class="table-responsive">
                <table class="table table-striped table-sm">
                    <thead>
                    <tr>
                        <th scope="col">순위</th>
                        <th scope="col">포스터 이미지</th>
                        <th scope="col">영화 제목</th>
                        <th scope="col">개봉일</th>
                        <th scope="col">누적관람객수</th>
                        <th scope="col">삭제</th>
                        <th scope="col">상세보기</th>
                    </tr>
                    </thead>
                    <tbody>
                    <tr>
                        <td>1,001</td>
                        <td>random</td>
                        <td>data</td>
                        <td>placeholder</td>
                        <td>text</td>
                    </tr>
                    </tbody>
                </table>
            </div>
        </main>
    </div>
</div>
</body>
</html>

Delegation Model(JS Event 처리 방식)

function my_func() {
    let my_date = $('#searchDate').val()
    if (my_date == '') {
        alert('검색을 위해 날짜를 선택해 주세요!')
    }
    else {
        let modified_date = my_date.replace(/-/g, '') // 2022-02-10 날짜 사이의 - 지우기
        $.ajax({
            async: true,
            url: 'http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json',
            data: {
                key: '67c59b547b84d9de7658ebb921457f4c',
                targetDt: modified_date},
            method: 'GET',
            timeout: 3000,
            dataType: 'json',
            success: function(result) {
                console.log(result)
                $('tbody').empty()
                // <tr>
                //     <td>순위</td>
                //     <td>
                //         <img src=~~~>
                //     </td>   포스터 이미지
                //     <td>영화 제목</td>
                //     <td>개봉일</td>
                //     <td>누적관람객수</td>
                //     <td>
                //         <input type="button" value="삭제" class="btn btn-primary">
                //     </td> 삭제버튼
                //     <td>상세보기</td>
                // </tr>
                for(let i=0;i<10;i++) {
                    let tr = $('<tr></tr>')
                    let rankTd = $('<td></td>').text(result['boxOfficeResult']['dailyBoxOfficeList'][i]['rank'])
                    let imgTd = $('<td></td>')
                    let searchTitle = result['boxOfficeResult']['dailyBoxOfficeList'][i]['movieNm'] + " 포스터"
                    let img = $('<img />')
                    imgTd.append(img)

                    $.ajax({
                        async: true,
                        url: 'https://dapi.kakao.com/v2/search/image',
                        method: 'GET',
                        headers: {
                            Authorization: "KakaoAK " + '1d1912440cd92cf0ce61794b6cb3b7fd'
                        },
                        data: {
                            query: searchTitle
                        },
                        timeout: 4000,
                        dataType: 'json',
                        success: function(result) {
                            let imgUrl = result['documents'][0]['thumbnail_url']
                            img.attr('src', imgUrl)
                        },
                        error: function () {
                            alert('뭔가 이상해요!')
                        }
                    })

                    let titleTd = $('<td></td>').text(result['boxOfficeResult']['dailyBoxOfficeList'][i]['movieNm'])
                    let openTd = $('<td></td>').text(result['boxOfficeResult']['dailyBoxOfficeList'][i]['openDt'])
                    let assAudiTd = $('<td></td>').text(result['boxOfficeResult']['dailyBoxOfficeList'][i]['audiAcc'])
                    let delTd = $('<td></td>')
                    let delBtn = $('<input />').attr('type', 'button').attr('value','삭제')
                    // btn-primary는 파란색, btn-warning는 노란색, btn-info는 초록색, btn-danger는 빨간색
                    delBtn.addClass('btn btn-danger')
                    delBtn.on('click', function() {
                        $(this).parent().parent().remove()
                    })
                    delTd.append(delBtn)
                    tr.append(rankTd)
                    tr.append(imgTd)
                    tr.append(titleTd)
                    tr.append(openTd)
                    tr.append(assAudiTd)
                    tr.append(delTd)
                    $('tbody').append(tr)
                }
            },
            error: function() {
                alert('뭔가 이상해요!')
            }
        });
    }
}

 

1. 1/17 월 2. 1/18 화 3. 1/19 수 4. 1/20 목 5. 1/21 금
취업 특강 파이썬
환경 설정

(파이참, 아나콘다, 주피터 노트북)
파이썬
데이터 타입

(list, tuple)
파이썬
데이터 타입

(range, string, dictionary, set, bool)
파이썬
사용자 정의 함수,

객체지향,
사용자 정의 클래스
6. 1/24 월 7. 1/25 화 8. 1/26 수 9. 1/27 목 10. 1/28 금
파이썬
사용자 정의 클래스,

사용자 정의 모듈
DB(MySQL)
DBMS,

MySQL 환경 설정,
DB/테이블 생성,
DB 입력·활용,
Index
DB(MySQL)
View,

백업과 복원,
DB 모델링,
관계(PK, FK),
DML(CRUD),
데이터 타입

DB(MySQL)
DML(CRUD),

WHERE 조건,
패턴 매칭,
SubQuery,
정렬,
그룹핑,
집계 함수,
트랜잭션(ACID 특성)
DB(MySQL)
JOIN,

UNION,
NOT IN,
WEB
11. 2/3 목 12. 2/4 금 13. 2/7 월 14. 2/8 화 15. 2/9 수
WEB
WebStorm 환경 설정,

HTML,
CSS,
JavaScript,
jQuery CDN
WEB
jQuery 문법,

Selector,
Method
WEB
jQuery Method,

Event,
AJAX
GitHub 특강
소스코드 관리,

Fork, Clone, Branch,
Commit,
Push, Pull-Request,
Rebase
GitHub 특강
프로젝트 관리,
Fetch, Rebase,
Merge,
Conflict
16. 2/10 목 17. 2/11 금 18. 2/14 월 19. 2/15 화 20. 2/16 수
WEB
jQuery AJAX,
Bootstrap,
Open API
Django      

* 기본을 흡수하고 응용하자!

728x90

'멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차 > WEB' 카테고리의 다른 글

2/14 월  (0) 2022.02.14
2/11 금  (0) 2022.02.11
2/9 수  (0) 2022.02.09
2/8 화  (0) 2022.02.08
2/7 월  (0) 2022.02.08