精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

在JavaScript SDK里使用SoundCloud API

開發(fā) 前端
在這個教程里,我們將學(xué)到如何訪問SoundCloud API和如何簡化使用SoundCloud SDK的過程。我們將從SoundCloud上學(xué)習(xí)如何設(shè)置SoundCloud SDK,然后接著編寫JavaScript代碼來獲取SoundCloud數(shù)據(jù),播放音頻和更多SoundCloud提供的功能。

SoundCloud開發(fā)出了一款可被開發(fā)者使用的API,這款A(yù)PI能使開發(fā)者獲得他們想要的幾乎任何數(shù)據(jù)。但是該API的用法有些混亂,特別是對初學(xué)者來說,因為此時的SoundCloud API開發(fā)文檔和文檔示例使用的都是SDK(軟件開發(fā)工具箱)的不同版本。

SoundCloud介紹鏈接地址: http://baike.sogou.com/v128528573.htm

SoundCloud API和SoundCloud SDK之間有什么區(qū)別呢?從根本上說,SoundCloud API是一個URL的集合,它給開發(fā)者提供了從SoundCloud服務(wù)器獲取數(shù)據(jù)的權(quán)限, 而SoundCloud SDK是為查詢SoundCloud API提前寫好的庫(或者客戶端)。如果想了解更多關(guān)于這方面的內(nèi)容,點擊以下鏈接:http://stackoverflow.com/questions/834763/difference-between-an-api-and-sdk

在這個教程里,我們將學(xué)到如何訪問SoundCloud API和如何簡化使用SoundCloud SDK的過程。我們將從SoundCloud上學(xué)習(xí)如何設(shè)置SoundCloud SDK,然后接著編寫JavaScript代碼來獲取SoundCloud數(shù)據(jù),播放音頻和更多SoundCloud提供的功能。

入門指南

Promises介紹鏈接地址: http://www.oschina.net/translate/what-is-the-point-of-promises?print

了解HTTP和API的概念和工作方式對你學(xué)習(xí)本教程將會有幫助。如果你想了解更多關(guān)于API的信息,我推薦你看看:An Introduction to APIs(對API的一個介紹。鏈接地址:https://zapier.com/learn/apis/)。同時知道一點關(guān)于異步JavaScript,promises和回調(diào)函數(shù)對你學(xué)習(xí)本教程也是有幫助的。在本文我們的代碼示例中使用了jQuery,所以如果你了解jQuery的基本知識,那么你閱讀本文的代碼示例就不會那么痛苦。

為了使用JavaScript來開始查詢SoundClound API,我們需要下載由SoundClound提供的JavaScript SDK。就像在文章開頭提到的,這里共有兩個不同的SDK版本可以使用。

使用哪個版本的SDK呢?

這兩個版本的SDK的主要不同之處在于當(dāng)一個異步請求產(chǎn)生并將請求發(fā)送給SoundClound API時它們返回數(shù)據(jù)的方式不同。***版本的SDK返回的是一個Promise,而另一個版本的SDK需要把一個回調(diào)函數(shù)作為一個參數(shù)返回。

我注意到一個問題,隨著文檔使用的SDK版本,在該版本的SDK用戶登錄功能界面上似乎有一個問題,這個問題就是彈出的登錄窗口不會自動關(guān)閉。

因此,為了簡單起見,并且因為老版本SDK更穩(wěn)定,我們將在文章示例中使用老版本的SDK來貫穿本教程。此版本的SDK將需要為客戶端的異步請求返回一個回調(diào)函數(shù)。

使用SoundCloud API

設(shè)置一個基本的HTML文檔

我們創(chuàng)建一個基本的HTML頁面,該頁面用作我們的主頁。我們在這個頁面上<script>標(biāo)簽的屬性src里包含進(jìn)了SDK的地址,這樣我們就可以使用SDK的功能了。

  1. <!DOCTYPE html> 
  2. <html> 
  3.   <head> 
  4.     <title>Include SDK - Using SoundCloud API</title> 
  5.     <script src="//connect.soundcloud.com/sdk.js"></script> 
  6.   </head> 
  7.   <body></body> 
  8. </html> 

注意:我們在HTML頁面里的<script>標(biāo)簽的src里包含進(jìn)去的SDK地址是SoundCloud的服務(wù)器地址。你也可以把SDK下載下來,然后像下面這樣引用:

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

可以通過下面的方法步驟測試一下SoundCloud的SDK是否在你的網(wǎng)頁中被正確加載:

  • 用瀏覽器打開這個頁面(建議使用谷歌的Chrome瀏覽器)。

  • 在瀏覽器里打開開發(fā)者控制臺(在谷歌Chrome瀏覽器里打開開發(fā)者控制臺的快捷鍵是Ctrl+Shift+J)。

  • 在開發(fā)者控制臺里輸入SC,然后按Enter鍵。SC就是剛剛我們在HTML頁面里包含的SDK創(chuàng)建的一個JavaScript對象。

如果出現(xiàn)了未知的錯誤,那就說明SoundCloud的SDK沒有被正確加載。試著刷新一下,同時確定你的SDK文件(也就是sdk.js文件)的路徑是正確的。

注冊一個SoundCloud App

去注冊一個SoundCloud app,你需要做的就是擁有一個SoundCloud賬戶。如果你還沒有一個SoundClound賬戶,就去創(chuàng)建一個。通過注冊一個 app,SoundCloud服務(wù)器就能夠驗證我們的請求,這樣其他人就不可能以我們的名義來發(fā)送一個請求了。

注意:如果我們不準(zhǔn)備在我們自己的網(wǎng)站中使用SoundClound用戶登錄功能,我們可以跳過這一步。這將在下面的部分解釋。

  • 打開SoundClound app頁面。在這個頁面上所有我們已經(jīng)創(chuàng)建好的app都會被列出來。確保你登錄了你的SoundCloud賬戶。注意:你不用為了這個目的創(chuàng)建一個獨立的賬戶。你可以用同一個賬戶來為你的個人目的使用。

  • 點擊注冊一個新應(yīng)用按鈕。

  • 給你的app起一個名字,然后點擊復(fù)選框接受SoundCloud的開發(fā)者政策條款

  • 點擊那個大大的”注冊”按鈕,來完成app的注冊。

在我們成功注冊之后,注冊頁面將直接跳轉(zhuǎn)到我們剛剛創(chuàng)建好的app設(shè)置頁面。在app設(shè)置頁面上,我們將看到我們的app客戶端ID,這個ID將會被用來驗證授權(quán)我們的請求。我們可以關(guān)掉該頁面,然后現(xiàn)在開始回調(diào)字段了。我們之后會用到這個客戶端ID的。

初始化客戶端

通過”初始化客戶端”,那也就是意味著我們使客戶端準(zhǔn)備好在它和SoundCloud API之間做數(shù)據(jù)的交換。我們可以在我們之前創(chuàng)建的基本HTML文檔里來做初始化客戶端的工作,或者在一個內(nèi)部js文件里來做初始化客戶端的工作。

JavaScript語法是這樣做的:

  1. SC.initialize({ 
  2.   client_id: "CLIENT_ID"
  3.   redirect_uri: "CALLBACK_URL" 
  4. });

(代碼見原文)

讓我們分段來看它:

  • 上面代碼中的CLIENT_ID會在我們注冊app的時候提供給我們。

  • 上面代碼中的CALLBACK_URL是callback.html的URL,這個callback.html是用戶登錄后一個HTML文件的稱呼。我們很快就會創(chuàng)建它。

在初始化完成之后,現(xiàn)在我們可以準(zhǔn)備查詢SoundCloud API了。讓我們看看在那之前我們可以做的一些例子。

示例

如果我們打開瀏覽器的控制臺并輸入”SC.”,然后與SC對象有關(guān)的方法就會列出來。SC.get(uri,callback)就是其中一個方法,這個方法用來向SoundCloud API產(chǎn)生GET請求。

獲得一份跟蹤列表

為了獲得跟蹤的隨機(jī)列表,我們可以使用SC.get()方法,像下面這樣:

  1. SC.get("/tracks", function(response) { 
  2.   for (var i = 0; i < response.length; i++) { 
  3.     $("ul").append("<li>" + response[i].title + "</li>"); 
  4.   } 
  5. });

(代碼見原文)

上面的代碼是干什么的,它是用來查詢/tracks端點并且在查詢完端點后返回一個回調(diào)函數(shù)的。響應(yīng)數(shù)據(jù)是保存在回調(diào)響應(yīng)參數(shù)里的,它是一個有著很 多屬性的JavaScript對象數(shù)組,title屬性就是眾多屬性中的一個。我們可以在代碼里寫:console.log(response[0])來 在控制臺日志輸出響應(yīng)數(shù)據(jù)的***個,而不用循環(huán)遍歷所有的對象和對象所對應(yīng)的屬性。然后,我們就會知道哪些屬性我們可以使用。

注意:在這個代碼示例中,我們在初始化的時候并沒有指定一個回調(diào)URL。這是因為我們指定不指定都不重要。不管怎樣我們的代碼都會執(zhí)行。但是一旦我 們實現(xiàn)了用戶登錄功能,這就是必須的而且很重要了,因為當(dāng)你指定一個回調(diào)URL后,其他人就不可能使用我們的Client ID。

嵌入一段跟蹤代碼

SC對象提供了其他的方法:SC.oEmbed(url,options,callback)。該方法把SoundCloud播放器嵌入我們的網(wǎng)站,并且允許我們播放我們選擇的軌跡。

  1. SC.oEmbed('https://soundcloud.com/username/complete-url-to-the-track', {maxheight: 200, auto_play: false}, function(res) { 
  2.   $("#player").html(res.html); 
  3. }); 

 

我們分段來看它:

  • 首先在該方法的***個參數(shù)里,我們給了一個完整的我們想要播放的跟蹤URL。

  • 該方法的第二個參數(shù)是可選參數(shù),在這個參數(shù)里,我們可以為播放器設(shè)置一些選項。如果想了解更多,點擊下面鏈接:https://developers.soundcloud.com/docs/api/reference#oembed

  • 第三個參數(shù)是一個回調(diào)函數(shù),在這個回調(diào)函數(shù)里,我們將我們頁面里的(id為player)的一個元素的內(nèi)容用該播放器(res.html)的HTML代碼替換。

這個跟蹤路徑可以用來在一個網(wǎng)站里嵌入一首歌或者一首音樂。

實現(xiàn)用戶登錄

為了實現(xiàn)用戶登錄功能,我們需要有一個回調(diào)URL來達(dá)到驗證授權(quán)的目的。這是OAuth協(xié)議的要求。如果你想了解OAuth協(xié)議,這里有一個OAuth協(xié)議的簡單解釋:OAuth 2 Simplified(鏈接地址:https://aaronparecki.com/2012/07/29/2/oauth2-simplified)。因此讓我們在app設(shè)置里添加一個名為”callback.html”的回調(diào)URL,這個callback.html我們接下來就會創(chuàng)建。

OAuth協(xié)議介紹鏈接地址: http://menglimengwai.iteye.com/blog/496250

創(chuàng)建回調(diào)頁

在一個用戶登錄后,彈出式窗口會重定向到該文件。在我們的例子中,我們把該文件定義為”callback.html”,并且該文件和我們的主頁(index.html)保存在相同的目錄里。這個文件就是在我們的app設(shè)置里我們需要在回調(diào)字段里給定的文件。

 

我們需要在回調(diào)文件里使用的代碼在開發(fā)文檔里有提供。然而,開發(fā)文檔有點過時,因此我們需要稍微調(diào)整一下來滿足現(xiàn)在的開發(fā)需要標(biāo)準(zhǔn)。

你可以根據(jù)你個人的喜好來調(diào)整它的通知和設(shè)計,但是現(xiàn)在,我們使它越簡單越好:

 

  1. <!DOCTYPE html> 
  2. <html lang="en"
  3.   <head> 
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"
  5.     <title>Connect with SoundCloud</title> 
  6.   </head> 
  7.   <body> 
  8.     <h4>This popup should automatically close in a few seconds</h4> 
  9.  
  10.     <script> 
  11.       document.onload = function () { 
  12.         window.opener.setTimeout(window.opener.SC.connectCallback, 1); 
  13.       } 
  14.     </script> 
  15.   </body> 
  16. </html> 

用戶登錄

SC.connect(callback)就是實現(xiàn)用戶登錄功能的方法。它通過打開一個彈窗式的窗口,提醒用戶登錄他們的SoundCloud賬戶。基本的使用方法如下:

  1. SC.connect(function () { 
  2.   console.log("User has logged in"); 
  3. }); 

如下是更有趣的示例:

  1. SC.connect(function () { 
  2.   SC.get("/me", function (response) { 
  3.     console.log("Welcome" + response.username); 
  4.   }); 
  5. }); 

讓我們分段來看它:

  • 在用戶完成登錄以后,用戶登錄頁面將會被重定向到我們之前創(chuàng)建的callback.html頁面。

  • 然后隨著我們閱讀完callback.html里的代碼,彈出式窗口會自動關(guān)閉。

  • 在那之后,我們的回調(diào)函數(shù)將獲得回調(diào),該回調(diào)是在SC.get()方法里通過一個GET請求到”/me”端點獲得的。

  • 當(dāng)GET請求完成時,上述代碼的回調(diào)函數(shù)就會執(zhí)行,然后在控制臺會輸出一條歡迎登陸的信息。

注意:請求”/me”返回的是當(dāng)前登陸用戶的數(shù)據(jù)。因此,在用戶登錄之前請求該URL將產(chǎn)生一個錯誤的信息。

處理用戶數(shù)據(jù)

一旦用戶登錄完成,有很多事情我們可以做。為了演示一些功能,我在GitHub上創(chuàng)建了一個演示站點。你可以點擊這里查看源代碼: https://github.com/sitepoint-editors/SC_API,并且可以點擊這里看看它的執(zhí)行效果: http://mustagheesbutt.github.io/SC_API/

讓我們看看這兩個文件。在index.html里,有四個重要的div元素,它們在用戶完成登錄后將會填滿用戶的數(shù)據(jù):

  1. <main> 
  2.  
  3.     <div id="ui"
  4.         <h2>Welcome <span></span></h2> 
  5.         <img id="avatar" /> 
  6.         <div id="description"></div> 
  7.     </div> 
  8.  
  9.     <!-- TRACKS --> 
  10.     <div id="tracklist"
  11.         <h3>Your Tracks:</h3> 
  12.         <ul></ul> 
  13.     </div> 
  14.     <!-- PLAYLISTS --> 
  15.     <div id="playlists"
  16.         <h3>Your Playlists:</h3> 
  17.         <ul></ul> 
  18.     </div> 
  19.  
  20.     <div id="player"></div> 
  21.  
  22. </main> 

第二個最重要的文件是script.js:所有的奇跡都發(fā)生在這個文件里。大部分代碼我們都很熟悉,但是我們還是快速地看看:

  1. // Initialization of SDK 
  2. SC.initialize({ 
  3.   client_id: "21832d295e3463208d2ed0371ae08791"
  4.   redirect_uri: "http://mustagheesbutt.github.io/SC_API/callback.html" 
  5. }); 

首先初始化我們的app。注意,這次我們用redirect_uri指定了我們的callback.html頁面。這個URL或者URI必須和我們在app設(shè)置里指定的一致。

  1. // Login handler 
  2. var user_perma; 
  3. $("#login").click(function () { 
  4.     SC.connect(function () { 
  5.         SC.get("/me", function (me) { 
  6.             user_perma = me.permalink; 
  7.             setUI(me.username, me.avatar_url, me.description); 
  8.         }); 
  9.         if (SC.isConnected) { 
  10.             $("header, main").addClass("loggedIn"); 
  11.         } 
  12.         getTracks(); 
  13.         getPlaylists(); 
  14.     }); 
  15. }); 

然后我們給標(biāo)簽id為login的button添加一個點擊事件句柄。當(dāng)該按鈕被點擊時,將會在點擊事件代碼里執(zhí)行SC.connect(callback)代碼,該代碼執(zhí)行后,將會彈出一個窗口提示用戶登錄。

當(dāng)用戶登錄完成后,彈出的窗口會關(guān)閉。然后SC.connect()里的回調(diào)函數(shù)就會執(zhí)行。在回調(diào)函數(shù)里,我們對”/me”端點發(fā)起一個GET請 求,而”/me”端點返回當(dāng)前登錄用戶對象。在剛才我們發(fā)起的GET請求回調(diào)里,我們在變量user_perma里存儲用戶的***鏈接,該參數(shù)是在全局范 圍定義的,所以我們之后可以使用它。

setUI()方法,getTracks()方法和getPlaylists()方法的功能分別是,設(shè)置UI,列出用戶的跟蹤記錄和列出每個用戶的播放列表。這些功能在同一個文件里已經(jīng)被定義了。

 

  1. //找點東西播放 
  2.  
  3. function play(uri) { 
  4.  
  5.     url = "http://soundcloud.com/" + user_perma + "/" + uri; 
  6.  
  7.     SC.oEmbed(url, {maxheight: 200}, function (resp) { 
  8.  
  9.         $("#player").html(resp.html); 
  10.  
  11.     }); 
  12.  

//當(dāng)一個播放軌跡或者一個播放列表被檢查時,使用’play()’函數(shù)播放

 

  1. $("ul").on("click", function (e) { 
  2.  
  3.     var title = e.target.innerHTML; 
  4.  
  5.     if ( tracks.hasOwnProperty(title) ) { 
  6.  
  7.         play(tracks[title]); 
  8.  
  9.     } else if (playlists.hasOwnProperty(title)) { 
  10.  
  11.         play("sets/" + playlists[title]); 
  12.  
  13.     } 
  14.  
  15. }); 

當(dāng)任何跟蹤路徑或者播放列表名被點擊,play()方法就會執(zhí)行,該方法會為點擊的跟蹤路徑或者播放列表名通過SC.oEmbed()方法來在我們的頁面中嵌入一個音頻播放器。

我們能通過代碼做很多事情,例如獲取用戶類型或者更新用戶的信息,獲取用戶的頭像,接下來運行代碼看看SoundCloud服務(wù)器返回的信息里用戶是誰和他們的愛好是什么。

總結(jié)

  • 如果老版本的SDK的用戶登錄功能可以使用,請使用老版本的SDK。因為老版本的SDK穩(wěn)定,并且返回的數(shù)據(jù)使用回調(diào)函數(shù)返回。

  • 如果老版本的用戶登錄功能不可用,可以使用SDK的新版本。新版本的SDK使用promises來返回數(shù)據(jù)。

  • 通過一個簡單的GET請求就能訪問SoundCloud API獲取到數(shù)據(jù)。

  • 用戶特有的數(shù)據(jù)可以通過”/me”端點獲取,但是只有在用戶使用他們的SoundCloud賬戶登錄我們的網(wǎng)站的情況下才有效。

從客戶端查詢一個API是一個很強(qiáng)大的工具,因為它在復(fù)雜的后端保存了我們的信息。SDK使我們的編程生活變得簡單很多。在學(xué)習(xí)了它的基礎(chǔ)用法后,我們甚至可以編寫出更加強(qiáng)大的和用戶更加友好的web應(yīng)用。點擊查看一些示例(鏈接地址: http://codepen.io/search/pens?q=soundcloud&limit=all&type=type-pens),并且查看官方的SoundCloud文檔來學(xué)習(xí)更多關(guān)于這個強(qiáng)大的API的可以使用的方法。

我希望從你那里聽到你用SoundCloud SDK構(gòu)建的應(yīng)用的信息(或者正計劃構(gòu)建的應(yīng)用的信息)。請讓我看見你們的評論!

作者介紹:

[[165387]]

Mustaghees Butt 是一名Web開發(fā)人員和作家

Mustaghees是一名自由的Web設(shè)計師和開發(fā)者,他有時也寫些文章和教程。

他的興趣包括計算機(jī)科學(xué)(包括機(jī)器人技術(shù),AI人工智能和網(wǎng)絡(luò)技術(shù))和文學(xué)藝術(shù)。

譯文鏈接:http://www.codeceo.com/article/javascript-sdk-soundcloud-api.html
英文原文:Using the SoundCloud API with the JavaScript SDK

責(zé)任編輯:王雪燕 來源: 碼農(nóng)網(wǎng)
相關(guān)推薦

2014-09-11 10:33:06

Linux

2015-09-28 11:16:50

SoundCloud微服務(wù)

2009-08-11 14:16:00

Winform調(diào)用WEC#

2010-09-28 15:27:09

JavaScript

2023-07-27 14:38:33

開源鴻蒙

2010-04-22 10:41:18

靜態(tài)庫bada

2022-01-06 07:46:01

Traefik 開源Gateway API

2010-07-02 12:58:39

Meego開發(fā)

2011-05-17 11:30:57

Ubuntu Unit傳統(tǒng)菜單Cardapio

2023-07-18 14:00:00

鴻蒙Sample案例

2011-05-27 12:51:44

Android API

2012-04-11 10:39:32

Eclipse

2014-03-25 10:09:46

2016-03-29 09:59:11

JavaScriptAPI設(shè)計

2010-09-08 17:26:46

JavaScript

2023-06-19 15:38:38

JavaScripAPI

2021-07-29 09:07:44

React視圖庫Web 開發(fā)

2010-05-12 16:18:33

Subclipse插件SVNSubversion的

2020-12-22 13:46:48

APISKD

2024-04-26 00:07:27

SDKAPI工具
點贊
收藏

51CTO技術(shù)棧公眾號

欧美黄色激情| 国产又大又黄的视频| 爽爽窝窝午夜精品一区二区| 日韩欧美精品免费在线| 日本黄网免费一区二区精品| 国产浮力第一页| 天堂久久一区二区三区| 久久久国产一区二区| 鲁大师私人影院在线观看| 欧美日韩在线精品一区二区三区激情综合 | 亚洲aⅴ怡春院| 天堂精品视频| 好吊色视频一区二区| 日本aⅴ亚洲精品中文乱码| 精品中文字幕在线观看| 精品无码在线观看| 国产一区调教| 日韩一二三区视频| 日本www.色| 超碰99在线| 亚洲乱码国产乱码精品精98午夜 | 国产剧情日韩欧美| 日韩精品――中文字幕| 中文字幕免费精品| 国产一区二区三区18| 精品人妻在线视频| 免费观看亚洲视频大全| 欧美亚洲国产一区在线观看网站| 国产毛片视频网站| 日本aa在线| 综合自拍亚洲综合图不卡区| 欧美性大战久久久久| 天堂在线观看免费视频| 国产福利一区在线| 川上优av一区二区线观看 | 欧美一区日韩一区| 污版视频在线观看| 在线看欧美视频| 一本到三区不卡视频| 国产人妻777人伦精品hd| 2020国产在线视频| 亚洲欧美日韩久久| 一级全黄肉体裸体全过程| 日本中文在线观看| 中文字幕在线视频一区| 亚洲精品日韩精品| 高清美女视频一区| 国产亚洲一区二区三区四区| 久久婷婷开心| 水莓100国产免费av在线播放| 不卡的av网站| 九九九九精品| 天天综合天天综合| av毛片久久久久**hd| 国产精品swag| 少妇高潮久久久| jizz一区二区| 欧美精品亚洲| youjizz在线播放| 国产精品私房写真福利视频| 亚洲精品一区二| 巨大荫蒂视频欧美大片| 亚洲精品免费播放| 久久福利一区二区| 高清毛片在线观看| 91福利区一区二区三区| 一起操在线视频| 亚洲精品v亚洲精品v日韩精品| 日韩女优av电影在线观看| 亚洲成年人在线观看| 欧美1区二区| 亚洲三级黄色在线观看| 亚洲女人毛茸茸高潮| 亚洲最新色图| 2019中文字幕在线免费观看| 亚洲国产成人无码av在线| 日本亚洲三级在线| 91在线免费看网站| 天天综合在线视频| 欧美激情在线一区二区三区| 精品一区二区三区毛片| www.综合| 欧美日韩一区小说| 欧美图片自拍偷拍| 国产精品亚洲片在线播放| 中文字幕亚洲二区| 久久97人妻无码一区二区三区| 国产欧美日韩一级| 成人午夜黄色影院| 日韩二区三区| 中文字幕日韩av资源站| 欧美人成在线观看| 青青热久免费精品视频在线18| 日韩欧美你懂的| 国内精品久久99人妻无码| 日韩欧美中文| 91国产中文字幕| 一级片视频免费| 波多野结衣中文一区| 亚洲乱码一区二区三区| 丁香花在线高清完整版视频| 欧美亚日韩国产aⅴ精品中极品| 亚洲欧美综合视频| 日本在线电影一区二区三区| 久久久欧美一区二区| 亚洲综合一区中| aaa亚洲精品一二三区| 在线国产伦理一区| 日本乱码一区二区三区不卡| 91精品国产综合久久精品app | 日本黄大片一区二区三区| 国产福利资源一区| 久久精品成人动漫| 五月天婷婷导航| 成人不卡免费av| 熟女视频一区二区三区| 国产一区二区主播在线| 亚洲免费影视第一页| 久久一级黄色片| 精品一区二区日韩| 日韩一二三区不卡在线视频| 欧美一级鲁丝片| 精品国产电影一区二区| 亚洲一级生活片| 蜜桃视频一区二区三区| 欧美日韩免费观看一区| 蜜桃av.网站在线观看| 日韩视频在线永久播放| 国产精品精品软件男同| 日本伊人午夜精品| 日本婷婷久久久久久久久一区二区| 超碰99在线| 亚洲精品720p| 日韩精品久久久久久久酒店| 国产.欧美.日韩| 99视频精品全部免费看| 高清一区二区中文字幕| 日韩综合视频在线观看| 中文字幕一级片| 欧美激情在线一区二区| 在线黄色免费观看| 四虎国产精品免费观看| 国产精品免费一区豆花| 成人在线播放视频| 在线观看视频一区| 国产三级在线观看完整版| 日韩激情视频在线观看| 四虎永久国产精品| 99久久er| 久久精品亚洲一区| 国产精品爽爽久久| 亚洲精品写真福利| 国产无套精品一区二区三区| 国内精品福利| 国新精品乱码一区二区三区18| 毛片网站在线看| 亚洲激情国产精品| 日韩特级黄色片| 国产亚洲欧洲997久久综合 | 日韩欧乱色一区二区三区在线| 中文国产亚洲喷潮| 国产精品久久综合青草亚洲AV| 日韩美女精品在线| 亚洲av午夜精品一区二区三区| 影音先锋久久精品| 麻豆蜜桃91| 青青在线精品| 欧美裸身视频免费观看| 亚洲aⅴ在线观看| 在线免费观看一区| 中国1级黄色片| 国产不卡在线一区| 北条麻妃在线视频观看| 竹菊久久久久久久| 91视频88av| 国产美女高潮在线| 一区二区av在线| 国产高清在线免费| 欧美日韩一区免费| 一级免费黄色录像| 成人爱爱电影网址| 国产av人人夜夜澡人人爽| 99久久亚洲精品蜜臀| 国产精品裸体一区二区三区| 欧美三级网址| 欧美激情视频给我| 国内三级在线观看| 日韩一级二级三级| 视频一区二区三区四区五区| 亚洲欧洲韩国日本视频| 日本道中文字幕| 久久精品国产99久久6| 久久成人福利视频| 99精品全国免费观看视频软件| 国产成人女人毛片视频在线| 性欧美videohd高精| 欧美另类69精品久久久久9999| 日韩一二三四| 日韩午夜三级在线| 91视频在线视频| 亚洲高清免费一级二级三级| 色屁屁草草影院ccyy.com| 国产成人99久久亚洲综合精品| 男人女人黄一级| 亚洲经典三级| 综合国产精品久久久| 亚洲国产合集| 国产精品国产一区二区| 午夜不卡一区| 国产97免费视| 日产福利视频在线观看| 久久电影一区二区| 国产51人人成人人人人爽色哟哟 | 色视频在线免费观看| 亚洲精品国产综合区久久久久久久| 在线免费av片| 色诱亚洲精品久久久久久| 国产小视频在线看| 亚洲日本在线视频观看| 国产成人免费观看网站| 久久久久久久久久久黄色| www.四虎精品| 国产传媒欧美日韩成人| 国产成人美女视频| 蜜桃视频在线一区| 国产九九在线视频| 国产日韩欧美一区二区三区在线观看 | 中文字幕制服丝袜| 黄色日韩网站视频| 天堂一区在线观看| 免费在线观看不卡| 天天爱天天操天天干| 天堂在线亚洲视频| 国产91对白刺激露脸在线观看| 最新成人av网站| 国产不卡一区二区视频| 伊人久久久大香线蕉综合直播 | 日韩欧美在线综合网| 国产又粗又猛又色又| 欧美猛男gaygay网站| 中文字幕人妻色偷偷久久| 日本高清不卡一区| 亚洲欧美一二三区| 欧美视频在线一区| 中文字幕欧美色图| 91精品在线免费| 国产精品国产av| 欧美一区二区三区视频免费播放| 国产又粗又猛又爽又黄的| 91麻豆精品国产91久久久久久 | 欧美精品在线免费观看| a级片国产精品自在拍在线播放| 久久久国产精品视频| a天堂中文在线官网在线| 欧美精品免费在线| 国产丝袜在线播放| 91精品国产91久久久久久最新 | 中国av在线播放| 久国内精品在线| 国产精品蜜芽在线观看| 亚洲**2019国产| 欧美日韩在线观看首页| 国产精品99一区| 欧洲美女精品免费观看视频| 亚洲bt天天射| 欧美xxxx在线| 深田咏美在线x99av| 婷婷综合久久| www.avtt| 日韩精品1区2区3区| 成年网站免费在线观看| 国产成人在线影院| 中日韩精品一区二区三区| 国产欧美日韩综合| 全程偷拍露脸中年夫妇| 婷婷丁香激情综合| 天天天天天天天干| 日韩欧美区一区二| 久草在现在线| 久久久精品国产| 色综合桃花网| 成人精品一区二区三区| 红杏视频成人| 亚洲人体一区| 99成人在线| 五月婷婷六月丁香激情| 成人18精品视频| 一级特黄曰皮片视频| 亚洲黄一区二区三区| 亚洲自拍一区在线观看| 91精品国产免费| 青青久在线视频免费观看| 久久久久www| 中文字幕人成乱码在线观看| 成人在线视频网站| 日韩a级大片| 免费成人深夜夜行网站视频| 亚洲一区二区三区高清| 亚洲第一成肉网| 久久精品水蜜桃av综合天堂| 欧美丰满艳妇bbwbbw| 在线观看免费亚洲| 日韩一级片免费| 北条麻妃99精品青青久久| 一根才成人网| 国产在线精品一区二区中文| 欧美hd在线| 亚洲色成人www永久在线观看| 久久精品72免费观看| 三级电影在线看| 亚洲综合免费观看高清完整版 | 国产综合色产在线精品| 国产免费一区二区三区网站免费| 亚洲国产另类av| 国产乱淫a∨片免费视频| 亚洲色图在线观看| 密臀av在线播放| 国产精品青青草| 亚洲欧美网站在线观看| 欧美大尺度做爰床戏| 久久综合色之久久综合| 日韩经典在线观看| 日韩女优电影在线观看| а天堂中文在线官网| 成人免费自拍视频| 日韩久久精品网| 538在线视频观看| 久久久精品影视| 国产综合精品视频| 日韩电视剧免费观看网站| 黄色美女视频在线观看| 国产成人看片| 亚洲三级网站| 国产精品一区二区人妻喷水| 亚洲一区二区三区四区在线| 国产成人精品毛片| 久久中文字幕国产| 精品亚洲二区| 成人在线免费高清视频| 国产成人精品综合在线观看 | 日韩福利电影在线观看| 全黄一级裸体片| 欧美在线free| 日本在线天堂| 亚洲一区二区三区乱码aⅴ蜜桃女| 99精品视频精品精品视频| 手机免费看av网站| 综合自拍亚洲综合图不卡区| japanese国产| 欧美富婆性猛交| 国产精品任我爽爆在线播放| 久久这里只有精品23| 91玉足脚交白嫩脚丫在线播放| 国产www在线| 国产一区二区日韩| 日韩欧美激情| 少妇久久久久久被弄到高潮| gogogo免费视频观看亚洲一| 91九色丨porny丨肉丝| 亚洲老头同性xxxxx| 高清亚洲高清| 国产资源第一页| av爱爱亚洲一区| 无码人妻一区二区三区免费| 最近2019年日本中文免费字幕| 国产在线一区不卡| 欧美视频在线观看视频| 久久久久久久久久久黄色| 一级黄色片视频| 久久久久国产精品免费网站| 亚洲最好看的视频| 老司机久久精品| 亚洲国产一区二区在线播放| 久青青在线观看视频国产| 国产女精品视频网站免费| 欧美私人啪啪vps| 中文精品在线观看| 欧美精品乱码久久久久久| 波多野结衣在线播放| 日韩精品在在线一区二区中文 | 香蕉视频久久久| 欧美一级生活片| 激情开心成人网| 日本老太婆做爰视频| 99精品欧美一区二区蜜桃免费| 一级片在线免费观看视频| 国内精品免费午夜毛片| 精品久久不卡| 91成人在线观看喷潮蘑菇| 91成人在线免费观看| 欧美理论电影| 亚洲精品成人a8198a| www.日本不卡| 国产美女免费视频| 热99久久精品| 欧美视频日韩| 韩国一级黄色录像| 亚洲女在线观看| a级日韩大片| 午夜不卡福利视频|