AngularJS で YouTube 検索結果表示

AngularJS で YouTube 検索結果表示

#06 YouTube検索を完成させよう
http://dotinstall.com/lessons/youtube_search_angularjs/21706
を元に、検索結果を表示していく

とりあえずブラウザで開いて
chrome develoer tools でバグがないか確認
さっそくバグ発見

.join() が
,join()
というような , と .の間違い

[] を {} としているなどなど

これらを修正してリロードし
検索欄に入力してボタンをおすと
console に結果が階層として表示される

Object の中に feed があり
その中に
entry がある
max-results=10
と指定したので、
Array[10]になっている

今回、必要なのは
さらにこの中にある
サムネイルなので、さらに階層を降りていくので
entry の中の数値から

1
media$group > media$thumbnail

の中にある url などを使う

また、タイトルに関しては
同じく entry の中の数字の中にある
title > $t を使って取得する

これらを使い

1
2
$http.jsonp(url).success(function(data){
});

の中に処理を書いていく

ちなみに、確認はできたので

1
console.dir(data);

はコメントアウト

1
$scope.results = data.feed.entry;

とする
これで、結果が格納される

データが取得できたので、次に
index.html で表示する

li要素のところへ
画像を表示したいので

1
<img ng-src="{{result.media$group.media$thumbnail[0].url}}">

タイトル取得には

1
{{result.media.title.$t}}

とすればOK

result は、取得した結果なので
あとは必要に応じて
階層を . で示して必要としているデータにアクセスして表示するようになる

youtube api で検索結果組み立て

youtube api で検索結果組み立て

#05 YouTubeのAPIを使ってみよう
http://dotinstall.com/lessons/youtube_search_angularjs/21705
を元に
YouTube API を使い、検索結果を組み立てる

YouTube API に関しては
https://developers.google.com/youtube/2.0/developers_guide_protocol_api_query_parameters
のリファレンスを参考にする

今回、編集するのは
myscript.js になる

まず、

1
2
3
$scope.doSearch = function(){
 
}

でユーザ関数作成

今回、YouTube API ver 2.0 を使用している

まず、

というようにベースURLを
変数に格納

さらに、オプションを指定していきたいので

1
2
3
+{
 
}.join('&');

として

join() を使って配列をつないで文字列にしている

join() の解説は
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/join
を参考

今回は

1
.join('&')

なので、オプションが&で連結され
リクエストURLができあがる

つぎに。
オプションを指定していく

1
'q='+encodeURIComponent($scope.query)

これは、検索欄で入力したキーワード
URIに適用するためにエンコードするので
encodeURIComponent() を使っている

encodeURIComponent()に関しては
http://www.m-bsys.com/code/javascripr-encodeuri
を参考にするとわかりやすい

1
'alt=json',

としてJSON形式を指定

1
'max-results=10'

として、検索結果を10件にする

1
'v=2'

として、使用するバージョンを2 に指定

angularJS を使うにはコールバックが必要なので

1
'callbak=JSON_CALLBACK'

を指定

コールバックは、読んだあとにどんな処理をするか書いたもの

結果を取得するには

1
2
$http.jsonp(url).success(function(data){
});

とする

まずは、どのようなデータが返ってきているか調べたいので、この中で

1
console.dir(data);

とする

検索結果の有無で表示、非表示切り替え

検索結果の有無で表示、非表示切り替え

#04 表示・非表示を切り替えよう
http://dotinstall.com/lessons/youtube_search_angularjs/21704
を元に
検索結果の有無で表示、非表示の切り替えを実装

li要素の中で、ng-repeat を使うことで
要素の分だけ繰り返し処理を行う

1
2
3
<li ng-repeat="result in results">
 
</li>

とする

そして、この ul li で作成されるリストの中に
データが入ってきたらリスト表示
データがないのなら
検索欄をつかって検索してください
というようなメッセージを表示する

まず、何も検索されていない状態なら

1
<p>↑から検索してください</p>

と表示する

これで、データがあるか判定するには

1
<ul style="list-style:none; padding:0">

1
<ul ng-show="results.length" style="list-style:none; padding:0">

というように

1
ng-show="results.length"


追加する

results.length があるということは
何らかの結果が返ってきているということなので
この値が true になり
リストが表示されるようになる

逆に、

1
<p>↑から検索してください</p>

の部分は
検索結果がある場合
つまり
results.length が true のときには消しておきたいので
ng-hide=”results.length” をつけて
かくすようにする

1
ng-show="results.length"

で表示

1
ng-hide="results.length"

で非表示

と覚えておく

なので

1
<p>↑から検索してください</p>

1
<p ng-hide="results.length">↑から検索してください</p>

とする

これでブラウザをリロードすると
まだ検索結果はないので
↑から検索してください
が表示される

検索フォームと結果表示領域の作成

検索フォームと結果表示領域の作成

#03 検索フォームを作ろう
http://dotinstall.com/lessons/youtube_search_angularjs/21703
をもとに
検索フォームと結果を表示する領域を作成

まずは index.html で
フォームを作成

1
<form ng-submit="doSearch()" name="myform">

としてフォーム領域を指定

この中に

1
<input type="text" ng-model="query" required>

として入力欄を作成
required をつけることで必須入力欄となる

1
<input type="submit" value="search">

で検索ボタン作成

また、入力欄になにも入力されていない場合
送信ボタンが無効になるようにしておく

これは

1
<input type="submit" value="search" ng-disabled="myform.$invalid">

とすればよい

1
ng-disabled="myform.$invalid"

これは
required になっている項目に入力されない限り
このフォーム自体が無効になる

続いて結果表示領域を作成
結果はリスト形式で表示する
このときに ul li で出る●はいらないので
スタイル設定で消す

1
2
<ul style="list-style:none; padding:0">
 </ul>

style=”list-style:none; を指定すると●が消える

AngularJSで Youtube検索

AngularJSで Youtube検索

これは、検索すると
Youtube の動画の縮小画像とタイトルがでるというもの

必要な知識は
AngularJS

使うツールは
chrome
vim

AgularJS については
http://dotinstall.com/lessons/basic_angularjs
を参照

まずは
#02 必要なファイルを揃えよう
http://dotinstall.com/lessons/youtube_search_angularjs/21702
を見ながら
index.html
myscript.js
を作成していく

最初に、あとで復習しやすくするため
mkdir angulajs-youtube
でディレクトリを作成して
この中で作っていく

まず、index.html の作成

ちょっと違うのは
angularjs を使うときには

1
<html lang="ja" ng-app>

というように
angularjs を使ったアプリの場合
ng-app をつけるようにするということ

そして、AngularJSを使うため
jQuery のときのようにライブラリを読み込むので

を追記する 

そして、後で処理を記述した myscript.js を読み込みたいので

1
<script src="myscript.js"></script>

としておく

body 部分には

1
2
3
<div ng-controller="mainCtrl">
 
</div>

を追記する

次に、myscript.js の作成

1
2
var mainCtrl = function($scope, $http){
}

とする
$http は youtube API アクセスに使う