【Vue.js】NHK 프로그램표 API로 방송중인 프로그램을 표시한다

소개



요전날에 투고한 NHK 프로그램 표 API 사용 방법 를 근거로, Web 페이지상에 방송중의 프로그램을 표시해 보았습니다.

프런트 엔드의 지식은 깔끔하기 때문에 처음에는 일반 Javascript로 쓰려고 생각했지만 조금만 도전해 보자 ...라는 것으로 Vue.js를 처음 사용해 보았습니다.
망설이는 코드라고 생각합니다만, 큰 눈에 봐 주시면 고맙습니다.

코드



HTML


  • NHK 종합 1채널에 있어서 현재 방송중의 프로그램과, 직전에 방송된 프로그램, 직후에 방송될 예정의 프로그램을 표시시키고 있습니다.
  • Javascript의 외부 파일을 읽는 것은 head 요소 안보다 body 요소의 맨 아래에 두는 것이 좋습니다.이라는 기사를 참고하여 body 요소의 맨 아래에 배치했습니다.

  • nhk_api.html
    <!doctype html>
    <html lang="ja">
    <head>
        <meta charset="utf-8">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/foundation/6.3.1/css/foundation.min.css">
        <link rel="stylesheet" href="./nhk_api.css">
        <title>NHKで放送中の番組</title>
        <meta name="description" content="NHK番組表APIを使って、現在放送中の番組を表示しています。">
        <meta name="author" content="nkojima">
    </head>
    <body>
        <div class="container" id="app">
            <h1 class="text-center">NHK総合1で放送中の番組</h1>
            <div class="columns medium-4">
                <div class="card">
                    <div class="card-divider">
                        <span class="status">前の番組</span>
                    </div>
                    <div class="card-section">
                        <p><span class="title">{{results.previous_title}}</span></p>
                        <p>{{results.previous_subtitle}}</p>
                    </div>
                </div>
            </div>
            <div class="columns medium-4">
                <div class="card">
                    <div class="card-divider">
                        <p><span class="status">現在放送中の番組</span></p>
                    </div>
                    <div class="card-section">
                        <p><span class="title">{{results.present_title}}</span></p>
                        <p>{{results.present_subtitle}}</p>
                    </div>
                </div>
            </div>
            <div class="columns medium-4">
                <div class="card">
                    <div class="card-divider">
                        <span class="status">次の番組</span>
                    </div>
                    <div class="card-section">
                        <p><span class="title">{{results.following_title}}</span></p>
                        <p>{{results.following_subtitle}}</p>
                    </div>
                </div>
            </div>
        </div>
        <script src="https://unpkg.com/vue"></script>
        <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
        <script src="./nhk_api.js"></script>
    </body>
    </html>
    

    자바스크립트


  • Vue.js는 전혀 초보자이므로, Vue.js 튜토리얼 에서 조금 공부한 후, 여러분의 블로그등을 참조해 써 보았습니다.
  • 그 때문에, 통일감이 없는 코드가 되어 있을지도 모릅니다...

  • HTTP 통신은 XMLHttpRequest가 아니라, axios 라는 것이 일반적으로 사용되고 있는 것 같았기 때문에, 거기에 따라 써 보았습니다.

  • nhk_api.js
    new Vue({
      el: '#app',
      data: {
        results: []
      },
      created() {
        axios.get("http://api.nhk.or.jp/v2/pg/now/130/g1.json?key={あなたのAPIキー}")
        .then(response => {
          this.results = {
            previous_title: response.data.nowonair_list.g1.previous.title,
            previous_subtitle: response.data.nowonair_list.g1.previous.subtitle,
            present_title: response.data.nowonair_list.g1.present.title,
            present_subtitle: response.data.nowonair_list.g1.present.subtitle,
            following_title: response.data.nowonair_list.g1.following.title,
            following_subtitle: response.data.nowonair_list.g1.following.subtitle
          }
        })
      }
    });
    

    CSS



    nhk_api.css
    span.status {
        font-weight:bold;
        font-size:x-large;
    }
    
    span.title {
        font-weight:bold;
    }
    

    실제 페이지


  • 짧은 코드입니다만, 이하와 같이 3 컬럼 구성의 페이지를 만들 수 있었습니다.



  • 요약


  • Vue.js는 어렵습니다 ...
  • 프런트 엔드의 지식이 깔끔하기 때문에, 우선은 평범한 Javascript를 잘 다루지 않으면 엄격할 것 같다.
  • 어렵다고해도, 이전에 접한 적이 있다 Ext JS 4 보다는 이해하기 쉬울지도...

  • 익숙하지 않으면 에러를 잡는 것도 힘들다.
  • [Vue warn]: Property or method "〇〇〇" is not defined on the instance but referenced during render. 라는 에러가 나오더라도, 원인이 전혀 모르고 우왕좌왕했습니다.
  • Vue.js는 이용자가 많고 인터넷에도 정보량이 많기 때문에 꾸준히 조사하면 자력인 정도는 해결할 수 있을 것 같습니다만 ...

  • 좋은 웹페이지 즐겨찾기