透過YouTuBe API取得資料 建國科技大學 資管系 饒瑞佶 2018/1 V1.

Slides:



Advertisements
Similar presentations
第四章 类、对象和接口.
Advertisements

JAVA 编 程 技 术 主编 贾振华 2010年1月.
项目6 通用堆栈.
面向对象的程序设计(一).
MVC Servlet与MVC设计模式.
算法设计与分析 Algorithm Design and Analysis
第一章 面向对象程序设计.
14 JavaScript语言基础 JavaScript是一种轻量级、解释型的Web开发语言。所谓轻量级,就是语言的体系结构不是很庞杂,例如,没有C、Java等语言中的类、内存管理、系统管理等高深的知识范畴;所谓解释型,就是语言在浏览器或服务器等环境中直接被解释执行,不需要对源代码进行编译操作。
程設一.
C#程序设计 10软件1、2班 王槐彬 计算机工程学院.
第二章 JAVA语言基础.
Google App Engine Google 應用服務引擎.
類別與物件 Class & Object.
Android + Web Service 建國科技大學 資管系 饒瑞佶 2017/3 V1.
Ch07 PHP程式基礎 網頁程式設計.
程設一.
Ch08 巢狀類別 物件導向程式設計(II).
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
第5章 异常处理 王德俊 上海交通大学继续教育学院.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
Linked List Operations
第二章 C# 基础知识.
第四章 在 C# 中实现 OOP 概念.
例外處理(Exception Handling)
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
第8章 Android内容提供者(ContentProvider)应用
第十三章 文件和注册表操作.
本單元介紹何謂變數,及說明變數的宣告方式。
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
厦门大学数据库实验室 MapReduce 连接
第六章 继承性和派生类 胡昊 南京大学计算机系软件所.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
Java语言程序设计 第五部分 Java异常处理.
Java程序设计 第9章 继承和多态.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
例外處理與 物件序列化(Exception Handling and Serialization of Objects)
郑晟 昆明理工大学 云南省计算机技术应用重点实验室
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
第 十二 章 C# 中的文件处理.
Php class 組員: 賴羿陵 林昱廷 莊正暉 張雅晴
Java程序设计 第2章 基本数据类型及操作.
Ch02-基礎語法.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第六章 属性、索引器、委托和事件.
P2P聊天工具.
編譯程式設計 期末專題說明 V1.1 May 2004.
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
第三章 C# 基础知识.
第二章 Java基本语法 讲师:复凡.
C#程序设计基础 $3 成员、变量和常量.
第二章 Java基本语法 讲师:复凡.
第二章 Java语法基础.
Review 1~3.
目标 流程控制 字符串处理 C# 的类和对象 C# 访问修饰符 C# 构造函数和析构函数.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
第4讲 类和对象、异常处理 ggao.
讀取網路資料及JSON開放資料 靜宜大學資管系 楊子青
C#快速導讀 流程控制.
C++程序语言设计 Chapter 14: Templates.
第二章 Java基础语法 北京传智播客教育
第6章 继承和多态 伍孝金
Summary
Presentation transcript:

透過YouTuBe API取得資料 建國科技大學 資管系 饒瑞佶 2018/1 V1

改用Glide函式庫載入圖片 加入 compile 'com.github.bumptech.glide:glide:3.4.+' 修改CardPresenter Glide.with(mContext) .load(uri.toString()) .centerCrop() .error(mDefaultCardImage) .into(mCardView.getMainImageView());

取得相關影片API https://www.googleapis.com/youtube/v3/search?part=snippet&relatedToVideoId=XXXXX&type=video&key=XXXXXXXXXXX // 相關影片------------------------------------------------ private void callrelated(String videoid) { try { String strURI = "https://www.googleapis.com/youtube/v3/search?part=snippet&relatedToVideoId=" + videoid + "&type=video&key=xxxxxxxxxxxxxxxxx"; new DownloadTask().execute(strURI); // 下載相關影片資料 } catch (Exception ex) { }

result

JSON JavaScript Object Notation 一種用於資料傳輸與交換的輕量級語法 以文字為主

JSON sample Key-value pair var employee = { "fullname" : "Sam Kelly", "telephones" : [ {"type" : "work" , "value" : "123-4567"}, {"type" : "home" , "value" : "987-6543"}, ], "addresses" : [ {"type" : "work" , "value" : "11 1st Ave"}, {"type" : "home" , "value" : "22 Main St"}, ] }

JSON中的幾個符號 :  用以分隔名稱與資料 { } 用來表示資料集(物件) [] 用來表示陣列 ,  用來分割每段「資料對」

JSON格式 物件 (object) 一個物件以「{」開始,並以「}」結束。 一個物件包含一系列非排序的名稱/值對 每個名稱/值對之間使用「,」分割 名稱/值(collection) 名稱和值之間使用「:」隔開 名稱為一字串 值為字串、數值、物件、布林值、陣列或是null {name:value} 筆資料使用「,」分隔 陣列(Array) 使用中括弧「[ ]」將資料收集 多筆資料使用「,」分隔 [collection, collection, collection]

JSON解析 Google提供org.json.JSONObject類別 JSONObject(要解析的原字串) get(name) getJSONArray(name) 透過getJSONObject(index)取得JSONObject物件 getXXX(name), 如Int, Double, String…等 取得name對應的資料(依據資料格式)

DownloadTask private class DownloadTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { return downloadUrl(urls[0]); } protected void onPostExecute(String result) { try { HeaderItem cardPresenterHeader = new HeaderItem(2, "YouTuBe資料"); CardPresenter cardPresenter = new CardPresenter(); ArrayObjectAdapter cardRowAdapter = new ArrayObjectAdapter(cardPresenter);

JSONObject json = new JSONObject(result); String data = json.getString("items"); JSONArray dataArray = new JSONArray(data); for (int i = 0; i < dataArray.length(); i++) { Movie movie = new Movie(); movie.setVideoID(dataArray.getJSONObject(i).getJSONObject("id").getString("videoId")); movie.setTitle(dataArray.getJSONObject(i).getJSONObject("snippet").getString("title")); movie.setStudio(dataArray.getJSONObject(i).getJSONObject("snippet").getString("channelTitle")); movie.setDescription(dataArray.getJSONObject(i).getJSONObject("snippet").getString("description")); if (!dataArray.getJSONObject(i).getJSONObject("snippet").isNull("thumbnails")) { movie.setCardImageUrl(dataArray.getJSONObject(i).getJSONObject("snippet").getJSONObject("thumbnails").getJSONObject("default").getString("url")); } else { movie.setCardImageUrl(""); } cardRowAdapter.add(movie); mRowsAdapter.add(new ListRow(cardPresenterHeader, cardRowAdapter)); // 設定整個Fragment得資料來源是mRowsAdapter setAdapter(mRowsAdapter); } catch (Exception e) { e.printStackTrace();

downloadUrl private String downloadUrl(String urlString) { String strHTML = ""; try { URL url = new URL(urlString); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(10000); // milliseconds conn.setConnectTimeout(15000); conn.setRequestMethod("GET"); conn.setDoInput(true); conn.connect(); InputStream stream = conn.getInputStream();

if (stream != null) { int leng = 0; byte[] Data = new byte[200]; byte[] totalData = new byte[0]; int totalLeg = 0; do { leng = stream.read(Data); if (leng > 0) { totalLeg += leng; byte[] temp = new byte[totalLeg]; System.arraycopy(totalData, 0, temp, 0, totalData.length); System.arraycopy(Data, 0, temp, totalData.length, leng); totalData = temp; } while (leng > 0); ; strHTML = new String(totalData, "UTF-8"); } catch (Exception e) { e.printStackTrace(); return strHTML;

修正原MainFragment

使用playlist取得影片 https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=xxxxxxxx&key=xxxxxxxxxx&maxResults=50 範例 playlistId=PLnCLSKesstE2ymsTaIlcTZK_0I8JfCKx7

result 格式與前面有點不同 主要是在videoid部分

取單單一影片的資訊 https://www.googleapis.com/youtube/v3/videos?part=id%2C+snippet&id=xxxxx&key=xxxxxxxx

result