---
# System prepended metadata

title: Movie Info App - OMDb API
tags: ['Javascript, jQuery']

---

#  Movie Info App - OMDb API

---
tags: Javascript relate
---

###### tags: `Javascript, jQuery` 

# 製作一個尋找電影的網站

## 成品:

![](https://i.imgur.com/nBZ6USk.png)


[成品網址]()

## 成品功能:

1.搜尋欄位可以尋找電影
2.找到之後會有另外出現一個頁面取代當前頁面
3.並且具有IMBD的超連結，還有回到搜尋頁功能

# HTML

* 本網站有換頁功能
* 連接點使用JS處理(詳見下方`movieSelected()`)

[index.html](https://github.com/chiehLiu/git-projects/blob/gh-pages/MovieInfoApp/index.html)
[movie.html](https://github.com/chiehLiu/git-projects/blob/gh-pages/MovieInfoApp/movie.html)
# CSS:

* 主要處理width
* dispaly
* 文字圖片高度處理

[css 程式碼](https://github.com/chiehLiu/git-projects/blob/gh-pages/MovieInfoApp/css/main.css)

# 取得OMDb API:

[OMDb API](http://www.omdbapi.com/apikey.aspx?__EVENTTARGET=freeAcct&__EVENTARGUMENT=&__LASTFOCUS=&__VIEWSTATE=%2FwEPDwUKLTIwNDY4MTIzNQ9kFgYCAQ9kFgICBw8WAh4HVmlzaWJsZWhkAgIPFgIfAGhkAgMPFgIfAGhkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYDBQtwYXRyZW9uQWNjdAUIZnJlZUFjY3QFCGZyZWVBY2N0oCxKYG7xaZwy2ktIrVmWGdWzxj%2FDhHQaAqqFYTiRTDE%3D&__VIEWSTATEGENERATOR=5E550F58&__EVENTVALIDATION=%2FwEdAAU%2BO86JjTqdg0yhuGR2tBukmSzhXfnlWWVdWIamVouVTzfZJuQDpLVS6HZFWq5fYpioiDjxFjSdCQfbG0SWduXFd8BcWGH1ot0k0SO7CfuulHLL4j%2B3qCcW3ReXhfb4KKsSs3zlQ%2B48KY6Qzm7wzZbR&at=freeAcct&Email=)

![](https://i.imgur.com/QrcVXGP.png)


# JS:

## functions:

### `getMovies()`

使用 `$.ajax()` 方法
印出response之後取用裡面的資料並且填入DOM
主要使用資料有

![](https://i.imgur.com/dHefE5Y.png)

* movie.Poste
* movie.Title
* movie.imdbID

使用 `$.each(movies, (index, movie)` 逐個印出

* movies代表所有搜尋到的資料
* index 索引的部分也可以取得不過這邊沒有使用到
* movie 代表每一個被印出去的value

---

### `movieSelected()`

特別注意 `s=${searchText}`
s的參數代表搜尋藉著電影title來尋找
![](https://i.imgur.com/sWAloPl.png)

`url: http://www.omdbapi.com/?s=${searchText}&apikey=c8fa2a97`

主要作用在於儲存電影id以及換頁

1.`sessionStorage`

![](https://i.imgur.com/uS0mFIk.png)

跟LocalStorage很像會把資料存到Application裡面並且
存放在 sessionStorage 的資料會在頁面結束時清空(也就是我們想要的結果)

主要使用的方法有
* `setItem` 把資料存入
* `getItem` 取出資料做使用


2.`window.location = 'movie.html';`

點擊按鈕後轉後到下一個html頁面

---
### `getMovie()`

特別注意 `i=${movieId}`
![](https://i.imgur.com/HXffS48.png)
i的參數代表搜尋藉著電影id來尋找
 `url: https://www.omdbapi.com/?i=${movieId}&apikey=c8fa2a97`

處理得跟getMovies()差不多

* 提取資料
* 填入DOM
* 製作兩個按鈕1.超連結去IMBD 2.回到搜尋頁

---
## 事件監聽

```javascript=
$('#searchForm').submit((e) => {
        e.preventDefault();
        let searchText = $('#searchText').val();
        getMovies(searchText);
    });
```

* 主要處理在searchForm的輸入的值
* 把收集到的值填入getMovues()
![](https://i.imgur.com/vJznbxB.png)


## JS完整程式碼:
```javascript=
$(document).ready(() => {
    $('#searchForm').submit((e) => {
        e.preventDefault();
        let searchText = $('#searchText').val();
        getMovies(searchText);


    });
});

function getMovies(searchText) {
    $.ajax({
        type: "GET",
        url: `http://www.omdbapi.com/?s=${searchText}&apikey=c8fa2a97`,
        dataType: "json",
        success: function (res) {
            console.log(res);
            let movies = res.Search;
            console.log(movies);
            let output = '';

            $.each(movies, (index, movie) => {
                output += `
                <div class="col-md-3">
                  <div class="well text-center">
                    <img src="${movie.Poster}">
                    <h5>${movie.Title}</h5>
                    <a onclick="movieSelected('${movie.imdbID}')" class="btn btn-primary" href="#">Movie Details</a>
                  </div>
                </div>
              `;
            });
            $('#movies').html(output);
        },
        error: function (err) {
            console.log(err);
        }
    })
};

function movieSelected(id) {
    sessionStorage.setItem('movieId', id);
    window.location = 'movie.html';
    return false;
}

function getMovie() {
    let movieId = sessionStorage.getItem('movieId');

    $.ajax({
        type: "GET",
        url: `http://www.omdbapi.com/?i=${movieId}&apikey=c8fa2a97`,
        dataType: "json",
        success: function (res) {
            let movie = res;
            console.log(movie);
            let output = `
                <div class="row">
                  <div class="col-md-4">
                    <img src="${movie.Poster}" class="thumbnail">
                  </div>
                  <div class="col-md-8">
                    <h2>${movie.Title}</h2>
                    <ul class="list-group">
                      <li class="list-group-item"><strong>Genre:</strong> ${movie.Genre}</li>
                      <li class="list-group-item"><strong>Released:</strong> ${movie.Released}</li>
                      <li class="list-group-item"><strong>Rated:</strong> ${movie.Rated}</li>
                      <li class="list-group-item"><strong>IMDB Rating:</strong> ${movie.imdbRating}</li>
                      <li class="list-group-item"><strong>Director:</strong> ${movie.Director}</li>
                      <li class="list-group-item"><strong>Writer:</strong> ${movie.Writer}</li>
                      <li class="list-group-item"><strong>Actors:</strong> ${movie.Actors}</li>
                    </ul>
                  </div>
                </div>
                <div class="row">
                  <div class="well">
                    <h3>Plot</h3>
                    ${movie.Plot}
                    <hr>
                    <a href="http://imdb.com/title/${movie.imdbID}" target="_blank" class="btn btn-primary">View IMDB</a>
                    <a href="index.html" class="btn btn-default">Go Back To Search</a>
                  </div>
                </div>
              `;

            $('#movie').html(output);

        },
        error: function (err) {
            console.log(err);
        }
    })
}
```



