[ 항해99] 부트캠프 3일차 Web project

IT/Bootcamp 항해99|2021. 6. 10. 20:40

항해 99

 

3일차 :     월요일 화요일 모두 새벽 2시까지 비비다가 잤는데, 혼자서 공부했엇더라면 오늘 아침에 못일어났겟지, 

               9시시전부터일어나서 게더타운접속했다.

 

 

질문 :    list 에있는 item 을 하나씩 빼서  dictraiony 안으로 집어넣을순없나? 

           검색을 해봤는데 나오지가않는다.

 

 

네이버 API 로 받아와서 , 딕셔너리 형태에  영화 줄거리를 추가해주려고헀는데 추가가 안됐다.

API로 영화 검색을 하면 이렇게 아래처럼나온다.

{'lastBuildDate': 'Wed, 09 Jun 2021 15:19:46 +0900', 
'total': 31, 
'start': 1, 
'display': 20,
'items': [{'title': '극장판 <b>짱구</b>는 못말려: 신혼여행 허리케인~ 사라진 아빠!', 
			'link': 'https://movie.naver.com/movie/bi/mi/basic.nhn?code=183772', 
            'image': 'https://ssl.pstatic.net/imgmovie/mdi/mit110/1837/183772_P08_181006.jpg', 
            'subtitle': '映&amp;#30011;クレヨンしんちゃん\u3000新婚旅行ハリケ&amp;#12540;ン ~失われたひろし~', 
            'pubDate': '2019',
            'director': '하시모토 마사카즈|', 
            'actor': '박영남|김환진|강희선|여민정|정유미|',
            'userRating': '9.02'},
            
           {'title': '극장판 <b>짱구</b>는 못말려: 아뵤! 쿵후 보이즈 ~라면 대란~',
           'link': 'https://movie.naver.com/movie/bi/mi/basic.nhn?code=172975', 
           'image': 'https://ssl.pstatic.net/imgmovie/mdi/mit110/1729/172975_P10_141815.jpg',
           'subtitle': 'Crayon Shin-chan Burst Serving Kung Fu Boys Ramen Rebellion', 
           'pubDate': '2018', 
           'director': '타카하시 와타루|',
           'actor': '박영남|강희선|김환진|여민정|',
           'userRating': '8.10'}, 

1. 내가 한방법은 ,  받아온 영화 마다의 link를가지고  beautifulsoup을 돌려서 

   줄거리를 가져와서 새로  desclist를 만들어줫는데,

 

 줄거리 list에서 줄거리를하나씩 가져와서 , 각각의 영화의끝에 추가해주려고했는데 돼지않는다. 

원래 리스트에서 element를가져와서 다른곳에 붙여줄수없는건가?

 

그래서 다른방법으로 해결을했다.

@app.route('/search/<keyword>', methods=['GET'])
def search(keyword):
    r = requests.get(f"https://openapi.naver.com/v1/search/movie.json?query={keyword}&display=20", headers={ "X-Naver-Client-Id": "Uvㅁ9",
                    "X-Naver-Client-Secret": "ㅁAj"})
    result = r.json()
    print(result)
    print(keyword)
    movies = result['items']

    movieLinkList=[]
    movieDescList=[]

    for movie in movies:


        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(movie['link'], headers=headers)
        soup = BeautifulSoup(data.text, 'html.parser')
        desc = soup.select_one(
            "#content > div.article > div.section_group.section_group_frst > div:nth-child(1) > div > div > p")

        movie["desc"] = desc.text

    print(movies[0])
    print(movies[1])


    return render_template('search.html', word=keyword, result=result, movies=movies)

그냥  처음에 받아왔을때 , 영화마다 바로  beautiful soup을돌려서 나온결과를 붙여준다.

확실히 이방법이 쉽고 더 빠른방법이긴한데, 아까말한 list에서 item을 가져와서 dictionary에 넣을수없는건가?

 

 

질문 : jinaja2 variable 을 다시 falsk로 다시보내기:

 

 

 

html code: 

 

 

godb().에서  item을 arg로 보내주면 js에 에서 item으로 받아올수가있엇다.

 

이거 굉장히 많이 찾아봤는데,   못찾었다. 

jinja2 variable send to flask 이렇게 찾았엇는데, 

     {%  for  item  in result['items'] %}
        <div class="container">
         <h1 id="word" style="display: inline;"> {{ item.title |safe}}  </h1>
         <div class="box-wrap">
            <div class="box" >
                <div>
                     <img src="{{item.image}}" style=" width: 170px; height: 180px" class="movie-img" />
                </div>
             <button type="button" class="btn btn-secondary" onclick="godb({{ item }})"> 추가하기
             <i class="fa fa-plus" aria-hidden="true"></i></button>

            </div>
            <div class="box" >
                       <h3 id="word" style="display: inline;">  출시년도 : {{  item.pubDate |safe}} </h3>
                <hr>
                        <h3 id="word" style="display: inline;">  감독: {{  item.director|safe }} </h3>
                <hr>
                <h4 id="word" style="display: inline;">   배우 :{{  item.actor|safe }} </h4>
             </div>
        </div>
            <div class="desc">
               <h4 id="word" style="display: inline;">   줄거리 :{{ item.desc|safe }}  </h4>
            </div>
        </div>
        {% endfor %}

 

java script 

 function find_movie(){
        let word = $("#input-word").val();

        if(word) {
            window.location.href=`/search/${word}?status_give=new`
        } else {
            alert("영화 제목을 입력해주세요!")
        }
    }

    function godb(item){
        let title = item['title'];
        let image = item['image'];
        let pubDate = item['pubDate'];
        let actor = item['actor'];
        let director = item['director'];
        let desc = item['desc'];
        let genre = item['genre']
        alert("추가완료 ")
        $.ajax({
            type: "POST",
            url: "/search/save",
            data: {
                title_give: title,
                image_give: image,
                pubDate_give: pubDate,
                actor_give: actor,
                director_give: director,
                desc_give: desc,
                genre_give: genre
            },
            success: function (response) {
                alert(response['msg']);
                window.location.href=`/`
            }
        });

3. Github conflict 생기면 해결방법. 

반응형

댓글()