【Vue】YouTube Data APIで検索結果一覧表示しpageTokenでページ送りする

YouTubeで検索ワードの結果を取得して、Vue.jsで自分のサイトに表示させる方法を説明する。

今回は、「猫 集会」というキーワード行う。

API キーを取得

APIキーの取得には、Googleアカウントが必要。

Google Developers ConsoleでAPIキーを取得する。

Vueでコード書いていく

APIを叩くURLは以下のよう。

https://www.googleapis.com/youtube/v3/search?type=video&part=snippet&q=猫 集会&key={APIキーを入れる}

「猫 集会」の検索結果を一覧表示させる実際のコードは以下。

まずは、HTML。

HTML

<div id="app" class="content">
    <h1 class="h1 mb-4 pl-3 py-2">猫の集会動画</h1>
    <div v-for="i in info">
        <div v-for="item in i.items" class="card mb-3 border-danger">
            <div class="row no-gutters">
                <div class="col-md-4">
                    <a :href="'https://www.youtube.com/watch?v='+ item.id.videoId">
                        <img :src="item.snippet.thumbnails.medium.url" class="card-img" :alt="item.snippet.title">
                    </a>
                </div>
                <div class="col-md-8">
                    <div class="card-body">
                        <h5 class="card-title">{{item.snippet.title}}</h5>
                        <p class="card-text">{{item.snippet.description}}</p>
                        <div class="d-flex justify-content-between">
                        <p class="card-text"><small class="text-muted">{{item.snippet.publishedAt}}</small>
                        </p>
                        <a :href="'https://www.youtube.com/watch?v='+ item.id.videoId" class="btn btn-danger">動画を見る</a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <ul class="d-flex justify-content-between mt-5">
        <li class="btn btn-danger rounded-pill" v-on:click="nextpage(info.data.prevPageToken)">前へ</li>
        <li class="btn btn-danger rounded-pill" v-on:click="nextpage(info.data.nextPageToken)">次へ</li>
    </ul>
</div>

表示数はデフォルトでは5個の動画。

これだと検索結果のすべての動画を閲覧することができないため、ページ送り(前へ・次へ)を実装している。

まず、最初の一覧を取得するためのAPIを叩くと、5つの動画を取得できる。

同時に、PrevPageTokeとnextPageTokenというプロパティも取得できる。これは他のページを表示させるためのパラメータとなる。

これをVue.js側に渡してあげて、再度APIのURLを生成しリンクを設置。

Vue.jsでの処理は以下。

JavaScript(Vue.js)

   <script>
        new Vue({
            el: '#app',
            data() {
                return {
                    info: null,
                    api:'https://www.googleapis.com/youtube/v3/search',
                    params:{
                        type: 'video',
                        part: 'snippet',
                        q: '猫 集会',
                        order: 'date',
                        pageToken:'',
                        key: '{APIキーを入れる}'
                    }
                }
            },
            created(){
                const params = this.params
                axios.get(this.api, { params })
                .then(response => {
                    this.info = response
                })
            },
            methods:{
                nextpage:function(token){
                    this.params.pageToken = token
                    const params = this.params
                    axios.get(this.api, { params })
                    .then(response => {
                        this.info = response
                    })
                }
            }
        })
    </script>

これを、ブラウザで確認する

ブラウザで動作確認

ちゃんと表示されたらOK。

コメント