在練習 Ajax 串接實作時,饅頭計畫中就推薦就找了幾個實作作業,找有開放資源的網站(如:YouTube、Github、氣象局),製作搜尋引擎取得資料。而在串接其他平台的資料,很重要的一點就是要練習看該平台所提供的官方文件,從提供的資料可以知道要怎麼取得所需要的資料、參數要如何放。必須說,一開始真的花滿多的時間在看文件,不段嘗試串接的參數,反覆查看取得的資料是否合乎需求。
取得授權:憑證
function 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: '放入申請的金鑰'// 使用 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)
function insertItems(item) {
let output = '';
$.each(item.items, function (index, value) {
let videoId = item.items[index].id.videoId;
let videoTitle = item.items[index].snippet.title;
let description = item.items[index].snippet.description;
let thumbnailURL = item.items[index].snippet.thumbnails.high.url;//高解析度影片縮圖
let channelTitle = item.items[index].snippet.channelTitle;
let publishedDate = item.items[index].snippet.publishedAt;
// 按鈕
output += `<li><div class="list-left">
<img src=" ${thumbnailURL}"></div>
<div class="list-right">
<h3>
<a data-fancybox data-type="iframe" data-src="https://www.youtube.com/embed/${videoId}" "href="javascript:;"> ${videoTitle} </a></h3> <small>By <span class="cTitle"> ${channelTitle}</span> on ${publishedDate}</small>
<p> ${description} <p></div></li> <div classs="clearfix"></div>
`
$('#results').html(output);
});
};
(!prevPageToken)
沒有上一頁的tokendata-token="${nextPageToken}" data-query="${value}"
,用於後續抓取屬性內容。function getBtn(value, prevPageToken, nextPageToken) {
console.log(nextPageToken)
if (!prevPageToken) {
var btnOutput = $(`<div class="button-container">
<button id="next-button" class="paging-button" data-token="${nextPageToken}" data-query="${value}" onclick="pressNext();"> Next Page</button></div>`
)
$("#buttons").append(btnOutput);
} else {
var btnOutput = $(`<div class="button-container"><button id="prev-button" class="paging-button" data-token="${prevPageToken}" data-query="${value}" onclick="pressPrev();"> Prev Page</button>
<button id="next-button" class="paging-button" data-token="${nextPageToken}" data-query="${value}" onclick="pressNext();">Next Page</button></div>`)
$("#buttons").append(btnOutput);
}
}
Youtube:Implementation: Pagination
//取得下一頁的資料
function pressNext() {
let youtubeURL = "https://www.googleapis.com/youtube/v3/search";
let token = $('#next-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: '放入申請的金鑰'// 使用 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');
}
});
}
token = $('#prev-button').data('token');
//前一頁
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: '放入申請的金鑰'// 使用 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)
使用fancyBox展示影片
使用iframe連結欲嵌入的外部影片連結
透過CDN方式連結fancybox套件
<!-- 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>
<h3><a data-fancybox data-type="iframe" data-src="https://www.youtube.com/embed/${videoId}" "href="javascript:;"> ${videoTitle}
</a></h3>
$('[data-fancybox]').fancybox({
toolbar : false,
smallBtn : true,
iframe : {
preload : false
}
})
今天文章的練習來源: [jQuery] - 練習-Youtube Search Engine