觀察功能需求
- 搜尋框,輸入搜尋關鍵字,下方會列出5筆列表
- 有圖片縮圖、影片標題、影片描述
- 按下next page 會取得下5筆資料
- 按下prev page,會取得上5筆資料
ajax 在同一個頁面,不做刷新就可以改變頁面的內容。
q: query
youtube API(application programming interface)資料查看
取得授權:憑證
API 金鑰:AIzaSyCKPRCaNS-PQJLl2jzoQEf-O4I0tnrtd8M
1 | jQuery API D ocument => 表示看官方文件 |
檢視範例,ajax資料的情形
JS 部分
1.嘗試串接Youtube API
- 首先需考量,我們所需要的資料參數有哪些(
- 在抓取成功的部分,要設置抓取五筆搜尋到的五筆資料,並將其呈現於頁面
- 除了5筆資料外,還需要跳轉上、下頁的按鈕網址放入參數
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32function getVideo() {
let value = $('#search-field').val();
let youtubeURL = "https://www.googleapis.com/youtube/v3/search";
$.ajax({
type: "GET",
url: youtubeURL,
data: {//將要放入網址的參數放在這
part:
'id,snippet',// 必填,把需要的資訊列出來
q: value,// 查詢文字
maxResults: 5,// 預設為五筆資料,可以設定1~50
type: "video",
key: 'AIzaSyCKPRCaNS-PQJLl2jzoQEf-O4I0tnrtd8M'// 使用 API 只能取得公開的播放清單
},
dataType: "json",
success: function (data) {
//console.log(data);
let nextPageToken = data.nextPageToken;
let prevPageToken = data.prevPageToken;
//試著將收到的資料傳入,並呈現於畫面中
insertItems(data);
getBtn(data, prevPageToken, nextPageToken)
}, error: function (err) {
console.log('oh no');
}
});
}
[JS] 使用 JavaScript 解析網址與處理網址中的參數(URL Parameters)
- 除了5筆資料外,還需要跳轉上、下頁的按鈕
2.將資料呈現於頁面(insertItems())
- 透過迴圈方式將要抓取的資料依序填入
- 觀察原本畫面結構,並依據去找尋資料中符合的資料
- videoId、videoTitle、description、channelTitle…
1 | function insertItems(item) { |
3.製作上、下頁的按鈕鍵
- 注意該函式要帶入的參數有哪些
- 我們要判斷為,在第一頁時,只有下一頁的按鈕
- 判斷方式為,
(!prevPageToken)
沒有上一頁的token - (截圖)
- 判斷方式為,
- 在判斷之中,我們需要將要插入的標籤與內容,放入,並append到畫面要呈現的位置
- 注意:在插入的button之中,加入
data-token="${nextPageToken}" data-query="${value}"
,用於後續抓取屬性內容。
1 | function getBtn(value, prevPageToken, nextPageToken) { |
Youtube:Implementation: Pagination
4.下一頁點下後,下五筆的資料
- 同樣以ajax的方式來抓取
- 在參數的地方我們要抓取的是,按取下一頁的token
- success之中所應用的函示,同樣為插入5筆的資料,以及上下頁的按鈕
1 | //取得下一頁的資料 |
5.上一頁
- 同樣的抓取方式,只有要帶入的資料有些差異
token = $('#prev-button').data('token');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43//前一頁
function pressPrev() {
// 清空內容
$('#results').html('');
$('#buttons').html('');
let youtubeURL = new URL(`https://www.googleapis.com/youtube/v3/search?`);
let token = $('#prev-button').data('token');
let value = $('#search-field').val();
$.ajax({
type: "GET",
url: youtubeURL,
data: {//將要放入網址的參數放在這
part:
'id,snippet',// 必填,把需要的資訊列出來
q: value,// 查詢文字
pageToken: token,
maxResults: 5,// 預設為五筆資料,可以設定1~50
type: "video",
key: 'AIzaSyCKPRCaNS-PQJLl2jzoQEf-O4I0tnrtd8M'// 使用 API 只能取得公開的播放清單
},
dataType: "json",
success: function (data) {
console.log(data);
let nextPageToken = data.nextPageToken;
let prevPageToken = data.prevPageToken;
// 清空內容
$('#results').html('');
$('#buttons').html('');
//試著將收到的資料傳入,並呈現於畫面中
insertItems(data);
getBtn(data, prevPageToken, nextPageToken)
}, error: function (err) {
console.log('oh no');
}
});
}
HTML5 自定義屬性 data-* 和 jQuery.data 詳解
2018.06.20
[技術分享] 什麼是 HTML 5 中的資料屬性(data-* attribute)
6.運用fancybox的方式彈出
使用fancyBox展示影片
使用iframe連結欲嵌入的外部影片連結
透過CDN方式連結fancybox套件
1
2
3<!-- fancyBox -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.js"></script>在我們點選該影片名稱區,插入影片id
1
2<h3><a data-fancybox data-type="iframe" data-src="https://www.youtube.com/embed/${videoId}" "href="javascript:;"> ${videoTitle}
</a></h3>1
2
3
4
5
6
7$('[data-fancybox]').fancybox({
toolbar : false,
smallBtn : true,
iframe : {
preload : false
}
})
補充知識:
XMLHttpRequest(XHR):是一種規範,用來發ajax使用
token(令牌):唯一的、可以認證身份或取得資料
GET:向伺服器發request,(伺服器會告訴我們要發伺服器的網址,我們向它請求資訊)
用瀏覽器debug
- 可在watch加上要觀察的變數
參考資料
[30apis] Day 7 : YouTube Data API + 基礎 Fetch API
How To Implement A Youtube Video Search Using Youtube Data API V3
Youtube Data API 使用手札
Youtube Data API 申請
配額
1 | { |
問題:
- script.js: Allow attribute will take precedence over ‘allowfullscreen’.