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

如何通過 REST API 和 Spring MVC 提取電視節(jié)目詳細(xì)信息?

開發(fā)
REST API 是一種無需任何處理即可簡單靈活地訪問 Web 服務(wù)的方式。Spring MVC是一個(gè)用于構(gòu)建 Web 應(yīng)用程序的 Web MVC 框架。它是一個(gè)與 spring boot、spring-security 等相同的 spring 模塊。

表述性狀態(tài)傳輸 (REST)是一種架構(gòu)風(fēng)格,它定義了一組用于創(chuàng)建 Web 服務(wù)的約束。REST API 是一種無需任何處理即可簡單靈活地訪問 Web 服務(wù)的方式。

Spring MVC是一個(gè)用于構(gòu)建 Web 應(yīng)用程序的 Web MVC 框架。它是一個(gè)與 spring boot、spring-security 等相同的 spring 模塊。術(shù)語 MVC 代表模型-視圖-控制器架構(gòu)。REST API 調(diào)用如今被廣泛用于獲取各種信息,例如天氣、郵政編碼、secret、大學(xué)詳細(xì)信息等.

在本文中,讓我們嘗試通過以下方式獲取電視連續(xù)劇詳細(xì)信息。

http://api.tvmaze.com/search/shows?q=<任何電視連續(xù)劇名稱>

例子:

https://api.tvmaze.com/search/shows?q=mahabharata

JSON 輸出:

[
    {
        "score": 0.54483813,
        "show": {
            "id": 60856,
            "url": "https://www.tvmaze.com/shows/60856/the-mahabharata",
            "name": "The Mahabharata",
            "type": "Scripted",
            "language": "English",
            "genres": [],
            "status": "Ended",
            "runtime": null,
            "averageRuntime": null,
            "premiered": "1990-03-10",
            "ended": "1990-03-24",
            "officialSite": null,
            "schedule": {
                "time": "",
                "days": []
            },
            "rating": {
                "average": null
            },
            "weight": 5,
            "network": {
                "id": 269,
                "name": "Star Plus",
                "country": {
                    "name": "India",
                    "code": "IN",
                    "timezone": "Asia/Kolkata"
                },
                "officialSite": null
            },
            "webChannel": null,
            "dvdCountry": null,
            "externals": {
                "tvrage": null,
                "thetvdb": 213551,
                "imdb": "tt0097810"
            },
            "image": {
                "medium": "https://static.tvmaze.com/uploads/images/medium_portrait/398/996547.jpg",
                "original": "https://static.tvmaze.com/uploads/images/original_untouched/398/996547.jpg"
            },
            "summary": null,
            "updated": 1646508699,
            "_links": {
                "self": {
                    "href": "https://api.tvmaze.com/shows/60856"
                },
                "previousepisode": {
                    "href": "https://api.tvmaze.com/episodes/2289706"
                }
            }
        }
    },
    {
        "score": 0.40868765,
        "show": {
            "id": 5016,
            "url": "https://www.tvmaze.com/shows/5016/mahabharat",
            "name": "Mahabharat",
            "type": "Scripted",
            "language": "Hindi",
            "genres": [
                "Drama",
                "History"
            ],
            "status": "Ended",
            "runtime": 20,
            "averageRuntime": 20,
            "premiered": "2013-09-16",
            "ended": "2014-08-16",
            "officialSite": "http://www.hotstar.com/#!/mahabharat-435-s",
            "schedule": {
                "time": "20:30",
                "days": [
                    "Monday",
                    "Tuesday",
                    "Wednesday",
                    "Thursday",
                    "Friday",
                    "Saturday",
                    "Sunday"
                ]
            },
            "rating": {
                "average": null
            },
            "weight": 37,
            "network": {
                "id": 269,
                "name": "Star Plus",
                "country": {
                    "name": "India",
                    "code": "IN",
                    "timezone": "Asia/Kolkata"
                },
                "officialSite": null
            },
            "webChannel": null,
            "dvdCountry": null,
            "externals": {
                "tvrage": 46350,
                "thetvdb": 273350,
                "imdb": "tt3212600"
            },
            "image": {
                "medium": "https://static.tvmaze.com/uploads/images/medium_portrait/21/54241.jpg",
                "original": "https://static.tvmaze.com/uploads/images/original_untouched/21/54241.jpg"
            },
            "summary": "<p>The story of the throne of Hastinapura, the kingdom ruled by the Kuru clan. The two collateral branches of the family that participate in the struggle of the throne of Hastinapura are the Kaurava and the Pandava. Although the Kaurava is the senior branch of the family, Duryodhana, the eldest Kaurava, is younger than Yudhisthira, the eldest Pandava. Both Duryodhana and Yudhisthira claim to be first in line to inherit the throne. The struggle culminates in the great battle of Kurukshetra, in which the Pandavas are ultimately victorious. The battle produces complex conflicts of kinship and friendship, instances of family loyalty and duty taking precedence over what is right, as well as the converse.</p>",
            "updated": 1604823863,
            "_links": {
                "self": {
                    "href": "https://api.tvmaze.com/shows/5016"
                },
                "previousepisode": {
                    "href": "https://api.tvmaze.com/episodes/314287"
                }
            }
        }
    },
    {
        "score": 0.38368216,
        "show": {
            "id": 16607,
            "url": "https://www.tvmaze.com/shows/16607/mahabharat",
            "name": "Mahabharat",
            "type": "Scripted",
            "language": "Hindi",
            "genres": [
                "Drama"
            ],
            "status": "Ended",
            "runtime": 45,
            "averageRuntime": 45,
            "premiered": "1988-10-02",
            "ended": "1990-07-15",
            "officialSite": null,
            "schedule": {
                "time": "",
                "days": [
                    "Sunday"
                ]
            },
            "rating": {
                "average": null
            },
            "weight": 24,
            "network": {
                "id": 1093,
                "name": "DD National",
                "country": {
                    "name": "India",
                    "code": "IN",
                    "timezone": "Asia/Kolkata"
                },
                "officialSite": null
            },
            "webChannel": null,
            "dvdCountry": null,
            "externals": {
                "tvrage": null,
                "thetvdb": 84349,
                "imdb": "tt0158417"
            },
            "image": {
                "medium": "https://static.tvmaze.com/uploads/images/medium_portrait/55/138442.jpg",
                "original": "https://static.tvmaze.com/uploads/images/original_untouched/55/138442.jpg"
            },
            "summary": "<p><b>Mahabharat</b> is a successful Indian television series based on the ancient Indian epic Mahabharata. The 94-episode series originally ran from 1988 to 1990. It was produced by B. R. Chopra and directed by his son, Ravi Chopra.</p>",
            "updated": 1573325769,
            "_links": {
                "self": {
                    "href": "https://api.tvmaze.com/shows/16607"
                },
                "previousepisode": {
                    "href": "https://api.tvmaze.com/episodes/762035"
                }
            }
        }
    }
]

使用Spring框架,讓我們嘗試提取REST API并將其呈現(xiàn)在頁面上。

項(xiàng)目結(jié)構(gòu):

pom.xml 編寫:

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
						http://maven.apache.org/maven-v4_0_0.xsd"> 
	<modelVersion>4.0.0</modelVersion> 
	<groupId>com.TVShow.TVShow_Rest_API</groupId> 
	<artifactId>TVShow_Rest_API</artifactId> 
	<packaging>war</packaging> 
	<version>0.0.1-SNAPSHOT</version> 
	<name>TVShow</name> 
	<url>http://maven.apache.org</url> 
	<properties> 
		<failOnMissingWebXml>false</failOnMissingWebXml> 
		<spring-version>5.1.0.RELEASE</spring-version> 
	</properties> 
	<dependencies> 
		
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
		<dependency> 
			<groupId>org.springframework</groupId> 
			<artifactId>spring-webmvc</artifactId> 
			<version>${spring-version}</version> 
		</dependency> 
		
		<!-- Required for spring-test -->
		<dependency> 
			<groupId>org.springframework</groupId> 
			<artifactId>spring-test</artifactId> 
			<version>${spring-version}</version> 
		</dependency> 

		<!-- JSTL Dependency -->
		<dependency> 
			<groupId>javax.servlet.jsp.jstl</groupId> 
			<artifactId>javax.servlet.jsp.jstl-api</artifactId> 
			<version>1.2.1</version> 
		</dependency> 
		
		<dependency> 
			<groupId>taglibs</groupId> 
			<artifactId>standard</artifactId> 
			<version>1.1.2</version> 
		</dependency> 

		<!-- Servlet Dependency -->
		<dependency> 
			<groupId>javax.servlet</groupId> 
			<artifactId>javax.servlet-api</artifactId> 
			<version>3.1.0</version> 
			<scope>provided</scope> 
		</dependency> 

		<!-- JSP Dependency -->
		<dependency> 
			<groupId>javax.servlet.jsp</groupId> 
			<artifactId>javax.servlet.jsp-api</artifactId> 
			<version>2.3.1</version> 
			<scope>provided</scope> 
		</dependency> 
		
		<!-- As REST API is extracted, this is required -->
		<dependency> 
			<groupId>com.google.code.gson</groupId> 
			<artifactId>gson</artifactId> 
			<version>2.8.6</version> 
		</dependency> 
		<dependency> 
			<groupId>commons-io</groupId> 
			<artifactId>commons-io</artifactId> 
			<version>2.5</version> 
		</dependency> 
		<dependency> 
			<groupId>junit</groupId> 
			<artifactId>junit</artifactId> 
			<version>4.12</version> 
			<scope>test</scope> 
		</dependency> 
	</dependencies> 
	<build> 
		<finalName>TVShow</finalName> 
		<sourceDirectory>src/main/java</sourceDirectory> 
		<plugins> 
			<plugin> 
				<artifactId>maven-compiler-plugin</artifactId> 
				<version>3.5.1</version> 
				<configuration> 
					<source>1.8</source> 
					<target>1.8</target> 
				</configuration> 
			</plugin> 
			
			<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-war-plugin</artifactId> 
<version>3.3.2</version> 
</plugin> 

	<plugin> 
		<groupId>org.codehaus.mojo</groupId> 
		<artifactId>tomcat-maven-plugin</artifactId> 
		<version>1.0-beta-1</version> 
	</plugin> 
		</plugins> 
		
	</build> 
</project>

 index.jsp 編寫:

這是項(xiàng)目部署到tomcat時(shí)渲染的頁面

<!DOCTYPE html> 
<html lang="en"> 
<head> 
	<meta charset="utf-8"> 
	<meta http-equiv="X-UA-Compatible" content="IE=edge"> 
	<meta name="viewport" content="width=device-width, initial-scale=1"> 
	<title>TVShow</title> 
	<link rel="stylesheet" > 
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script> 
	// for making the page styles are applied 
	<style type="text/css"> 
		.main-form, .profile-area { 
			width: 500px; 
		} 
		.main-form { 
			margin: 50px auto 0px; 
		} 
		.profile-area { 
			margin: 10px auto; 
		} 
		.main-form section, .profile-area section { 
			margin-bottom: 15px; 
			background: #097969; 
			box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); 
			color: white; 
		} 
		.main-form section { 
			padding: 30px; 
		} 
		.profile-area section { 
			padding: 30px 30px 30px; 
		} 
		.profile-area section > div { 
			text-align: center; 
		} 
		.main-form h3 { 
			margin: 0 0 15px; 
		} 
		.form-control, .btn { 
			min-height: 38px; 
			border-radius: 2px; 
		} 
		.btn { 
			font-size: 15px; 
			font-weight: bold; 
		} 
		.hideElement { 
			display: none; 
		} 
	</style> 
</head> 
<body> 
<div class="main-form" id="main-form"> 
	<section> 
		<div class="form-group"> 
			// We need to input the search string in this box 
			<input id="searchStr" type="text" class="form-control" placeholder="Enter TVShow name here..." required="required"> 
		</div> 
		<div class="form-group"> 
			<button onclick="loadData()" class="btn btn-primary btn-block">Find TVShow Details</button> 
		</div> 
	</section> 
</div> 
<div class="profile-area hideElement" id="profile-area"> 
	<section> 
		<div id="loader" class="hideElement"> 
			<div class="spinner-border" role="status"> 
				<span class="sr-only">Loading...</span> 
			</div> 
		</div> 
		<div id="profile" class="hideElement"> 
			<br><br> 
			// parsed json object details are displayed here 
			
<p><strong>TVShowScore : </strong><span id="scores"></span></p> 

			
<p><strong>TVShow URL : </strong><span id="url"></span></p> 

			
<p><strong>IMDB : </strong><span id="imdb"></span></p> 

		</div> 
	</section> 
</div> 
</body> 
<script> 
	function loadData() { 
		document.getElementById("profile-area").classList.remove("hideElement"); 
		document.getElementById("loader").classList.remove("hideElement"); 
		document.getElementById("profile").classList.add("hideElement"); 

		var searchStr = document.getElementById("searchStr").value; 

		if(searchStr != "" && searchStr != null ) { 
			var xhttp = new XMLHttpRequest(); 
			xhttp.onreadystatechange = function() { 
				if (this.readyState == 4 && this.status == 200) { 
					var jsonResponse = JSON.parse(this.responseText); 
					document.getElementById("scores").innerHTML = jsonResponse.scores; 
					document.getElementById("url").innerHTML = jsonResponse.url; 
					document.getElementById("imdb").innerHTML = jsonResponse.imdb; 
					document.getElementById("loader").classList.add("hideElement"); 
					document.getElementById("profile").classList.remove("hideElement"); 
				} 
			}; 
			// GET method which redirects the jsp to connect to 
			// the servlet with the search string 
			xhttp.open("GET", "getTVShowDetailsBySearchString?searchStr="+ searchStr, true); 
			xhttp.send(); 
			console.log("done"); 
		} else { 
			console.log("Enter search string to check...") 
		} 
	} 
</script> 
</html>
-----------------------------------
?著作權(quán)歸作者所有:來自51CTO博客作者demo007x的原創(chuàng)作品,請(qǐng)聯(lián)系作者獲取轉(zhuǎn)載授權(quán),否則將追究法律責(zé)任
如何通過 REST API 和 Spring MVC 提取電視節(jié)目詳細(xì)信息?
https://blog.51cto.com/demo007x/7917153

輸出:

在輸入框中輸入任何電視節(jié)目名稱后,我們將獲得以下詳細(xì)信息。

執(zhí)行過程:

從 JSP 頁面,使用搜索字符串調(diào)用“GET”方法,并將其重定向到 Spring Controller 類,其中 REST API URL http://api.tvmaze.com/search/shows?q= 被調(diào)用,它將創(chuàng)建上面給出的 JSON 數(shù)組,從中,我們使用下面的參數(shù):

"score", "url" and "imdb" values alone

Example:
"score": 0.42338097,    
"url": "https://www.tvmaze.com/shows/16607/mahabharat",      
"imdb": "tt0158417"

實(shí)際上,在這個(gè)頁面上,我們只檢索了 TVShowScore、TVShow URL 和 IMDB。但我們可以獲取 JSON 中提供的所有其他詳細(xì)信息。檢索數(shù)據(jù)和解析 JSON 輸出所需的代碼如下。實(shí)現(xiàn)流程的重要必要文件

AppConfig.java 編寫:

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.view.InternalResourceViewResolver; 
import org.springframework.web.servlet.view.JstlView; 

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.TVShow.TVShow_Rest_API" }) 
public class AppConfig { 

	@Bean
	public InternalResourceViewResolver resolver() { 
		InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
		resolver.setViewClass(JstlView.class); 
		resolver.setPrefix("/"); 
		resolver.setSuffix(".jsp"); 
		return resolver; 
	} 

}

SpringMvcDispatcherServletInitializer.java:

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; 

public class SpringMvcDispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

	@Override
	protected Class<?>[] getRootConfigClasses() { 
		return null; 
	} 

	@Override
	protected Class<?>[] getServletConfigClasses() { 
		return new Class[] { AppConfig.class }; 
	} 

	@Override
	protected String[] getServletMappings() { 
		return new String[] { "/" }; 
	} 

}

TVShowController.java:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.StringTokenizer; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody; 

import com.google.gson.Gson; 
import com.google.gson.JsonArray; 
import com.google.gson.JsonElement; 
import com.google.gson.JsonObject; 

@Controller
public class TVShowController { 

	@RequestMapping("/getTVShowDetailsBySearchString") 
	public @ResponseBody
	JsonObject getTVShowDetailsBySearchString(String searchStr) throws IOException { 
		// According to the search string, JSONArray 
		// or JSON Object is constructed. 
		// In our case, it is producing JSONArray 
		JsonArray jsonArray = new JsonArray(); 
		jsonArray = getTVShowDetailsBySearchStr(searchStr); 
		JsonObject finalJsonObject = new JsonObject(); 
		ArrayList scoreList = new ArrayList(); 
		ArrayList showUrlList = new ArrayList(); 
		ArrayList showUrlLinks = new ArrayList(); 
		ArrayList telecastedList = new ArrayList(); 
		ArrayList imdbList = new ArrayList(); 
		Iterator<JsonElement> objectIterator = jsonArray.iterator(); 
		// Iterating 
		while(objectIterator.hasNext()) { 
			JsonElement object = objectIterator.next(); 
			JsonObject jObj = object.getAsJsonObject(); 
			// We have to get the score and 
			// replace the special characters 
			scoreList.add(jObj.get("score").toString().replaceAll("^\"|\"$", "")); 
			// Similarly show 
			showUrlList.add(jObj.get("show").toString().replaceAll("^\"|\"$", "")); 

		} 
		
		for (int i = 0;i < showUrlList.size();i++) {		 
			
			StringTokenizer jsonTokenizer = new StringTokenizer(showUrlList.get(i).toString(),","); 
			String expectedTag = null; 
			int idx = 0; 
			while (jsonTokenizer.hasMoreTokens()) { 
				expectedTag = jsonTokenizer.nextToken(); 
				if (expectedTag.contains("url")) { 
					showUrlLinks.add(expectedTag.substring(7,expectedTag.length()-1).toString()); 
				} 
				if (expectedTag.contains("timezone")) { 
					telecastedList.add(expectedTag.substring(12,expectedTag.length()-3).toString()); 
				} 
				if (expectedTag.contains("imdb")) { 
					imdbList.add(expectedTag.substring(8,expectedTag.length()-2).toString()); 
				} 
		} 
	} 
		finalJsonObject.addProperty("scores", scoreList.toString()); 
		finalJsonObject.addProperty("scoresize", scoreList.size()); 
		finalJsonObject.addProperty("url", showUrlLinks.toString()); 
		finalJsonObject.addProperty("urlsize", showUrlLinks.size()); 
		finalJsonObject.addProperty("timezone", telecastedList.toString()); 
		finalJsonObject.addProperty("imdb", imdbList.toString()); 
		finalJsonObject.addProperty("imdbsize", imdbList.size()); 
		// After retrieving the elements, 
		// in an object , all are constructed 
		return finalJsonObject; 
	} 

	private JsonArray getTVShowDetailsBySearchStr(String searchString) throws IOException { 

		StringBuilder responseData = new StringBuilder(); 
		JsonArray jsonArray = null; 

		URL url = null; 
		// http://api.tvmaze.com/search/shows?q=<searchstring> 
		// is the url to access the TV show details 
		url = new URL("http://api.tvmaze.com/search/shows?q=" + searchString); 
		
		HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
		con.setRequestMethod("GET"); 
		con.setRequestProperty("User-Agent", "Mozilla/5.0"); 
		int responseCode = con.getResponseCode(); 

		System.out.println("\nSending 'GET' request to URL : " + url); 
		// System.out.println("Response Code : " + responseCode); 

		try (BufferedReader in = new BufferedReader( 
				new InputStreamReader(con.getInputStream()))) { 

			String line; 

			while ((line = in.readLine()) != null) { 
				responseData.append(line); 
			} 
			// It is getting converted to 
			// JSONArray by means of below code 
			jsonArray = new Gson().fromJson(responseData.toString(), JsonArray.class);	 
		} 
		return jsonArray; 
	} 
}
-----------------------------------
?著作權(quán)歸作者所有:來自51CTO博客作者demo007x的原創(chuàng)作品,請(qǐng)聯(lián)系作者獲取轉(zhuǎn)載授權(quán),否則將追究法律責(zé)任
如何通過 REST API 和 Spring MVC 提取電視節(jié)目詳細(xì)信息?
https://blog.51cto.com/demo007x/7917153

結(jié)論

通過使用 Spring-webmvc,我們可以從 REST API 調(diào)用中獲取詳細(xì)信息。上面就是一個(gè)很好的例子。同樣,有很多開源 REST API 調(diào)用可供使用。這意味著我們可以使用它們來檢索數(shù)據(jù)。開源 REST API 調(diào)用的幾個(gè)示例。

責(zé)任編輯:龐桂玉 來源: 51CTO博客
相關(guān)推薦

2011-09-19 10:32:54

IOS應(yīng)用Android應(yīng)用Spott

2010-06-22 10:10:18

超算“沃森”美國電視節(jié)目

2014-06-20 10:36:49

微軟Windows Azu創(chuàng)客星球

2011-01-28 15:26:34

深藍(lán)人機(jī)大戰(zhàn)沃森

2014-07-11 10:11:59

OTT機(jī)頂盒

2020-12-14 12:39:43

數(shù)據(jù)分析Netflix詞匯

2020-05-15 07:00:00

Linux硬盤信息

2016-01-07 13:52:17

Windows 10登錄顯示

2012-05-14 10:49:25

Cloud Found

2010-11-09 11:54:50

sql server查

2020-07-07 07:00:00

Spring WebFREST APIReactive AP

2020-08-23 18:22:15

網(wǎng)絡(luò)

2014-12-09 13:06:30

華為移動(dòng)公交

2020-12-04 06:14:45

5G 廣電 通信網(wǎng)絡(luò)

2013-11-05 10:18:48

2023-05-11 12:40:00

Spring控制器HTTP

2013-11-05 10:01:45

2019-08-26 11:53:38

Linux系統(tǒng)GUI

2010-09-02 15:39:08

2013-02-01 10:09:46

TV客
點(diǎn)贊
收藏

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

欧美喷水一区二区| 91麻豆国产福利在线观看| 欧美理论电影在线播放| 精品1卡二卡三卡四卡老狼| 国产精欧美一区二区三区蓝颜男同| 中文字幕亚洲综合久久菠萝蜜| 18成人免费观看网站下载| 欧美 日韩 精品| 亚洲香蕉av| 亚洲欧美国产高清va在线播| 手机在线视频一区| 欧美成人h版| 亚洲精品视频免费观看| 欧美日韩在线一区二区三区| 99久久久国产精品无码网爆| 老鸭窝91久久精品色噜噜导演| 久久九九全国免费精品观看| 中文字幕一二三四区| 日韩高清在线观看一区二区| 色综合久久综合网欧美综合网| 99久re热视频精品98| 免费毛片在线| 国产a视频精品免费观看| 国产精品一区久久久| 日韩 欧美 综合| 欧美在线看片| www.日韩免费| 日本少妇xxxxx| 欧美成人专区| 日韩精品一区二区三区三区免费 | 亚洲综合三区| 欧美黑人性生活视频| 战狼4完整免费观看在线播放版| 日韩三级视频| 亚洲高清久久久久久| 一本之道在线视频| av日韩一区| 欧美日韩高清在线播放| 老司机午夜av| 一呦二呦三呦精品国产| 精品国产老师黑色丝袜高跟鞋| 少妇一晚三次一区二区三区| 国产一二区在线观看| 国产精品伦理一区二区| 天堂精品视频| 国产人成在线观看| 国产婷婷一区二区| 欧美日韩一区二区视频在线| 国内在线免费高清视频| 国产亚洲一区二区三区在线观看| 蜜桃网站成人| 黄色小视频在线免费观看| 久久久久成人黄色影片| 欧美日韩高清免费| 蜜桃免费在线| 欧美激情综合在线| 亚洲国产婷婷香蕉久久久久久99| 337p日本欧洲亚洲大胆鲁鲁| 国产精品免费观看视频| 亚洲欧美丝袜| 国产乱色在线观看| 亚洲精品v日韩精品| 国产自产在线视频| 午夜不卡影院| 在线观看日韩一区| mm131亚洲精品| 国产精品国产亚洲精品| 日韩一区二区影院| 国产高清自拍视频| 国产一区二区三区91| 日韩中文在线不卡| 久久网免费视频| 亚洲一区二区毛片| 国产精品91免费在线| 亚洲天堂视频在线| 国产精品456露脸| 韩日午夜在线资源一区二区| 国产小视频在线观看| 国产精品国产a| 免费看欧美黑人毛片| 外国成人直播| 欧美一级黄色录像| 美女又爽又黄免费| 欧美三级情趣内衣| 欧美巨猛xxxx猛交黑人97人| 日韩精品视频播放| 美国欧美日韩国产在线播放| 国产高清一区二区三区| 欧美xxx.com| 亚洲欧美一区二区三区孕妇| 亚洲美免无码中文字幕在线| 欧美男男gaygay1069| 精品国精品国产尤物美女| a天堂中文字幕| 午夜激情一区| 国产成人精品视频在线| 国产免费不卡视频| 久久一留热品黄| 亚洲区成人777777精品| 免费观看成人性生生活片| 4438成人网| 国产肥白大熟妇bbbb视频| 在线成人直播| 国产精品欧美激情| 日本高清视频在线| 国产精品久久久久国产精品日日| 国产精品久久久久久久乖乖| 伦一区二区三区中文字幕v亚洲| 亚洲国产精品va在线看黑人动漫| 四虎地址8848| 日韩av在线发布| 国产亚洲欧美一区二区三区| 亚洲乱亚洲乱妇| 日韩欧美亚洲综合| 91传媒理伦片在线观看| 久久精品免费一区二区三区| 国产精品91一区| 偷拍25位美女撒尿视频在线观看| 亚洲精品视频一区二区| 亚洲另类第一页| 国产日韩欧美一区二区三区| 97不卡在线视频| 亚洲成a人片77777精品| 最新国产成人在线观看| 国产三级日本三级在线播放| 女一区二区三区| 久久久久久国产免费| 国产黄色一级大片| 亚洲视频免费看| www.51色.com| 我不卡伦不卡影院| 国产欧美精品xxxx另类| 高清国产福利在线观看| 色综合久久综合中文综合网| 一区二区三区少妇| 一区二区毛片| 精品国产一区二区三区免费| 超碰97国产精品人人cao| 91精品蜜臀在线一区尤物| 欧美人与禽zoz0善交| 日韩成人精品视频| 免费毛片一区二区三区久久久| jizzjizz中国精品麻豆| 亚洲国产精品免费| 日本中文字幕网| 成人手机在线视频| 国产精品成人久久电影| 开心激情综合| 777国产偷窥盗摄精品视频| 熟妇人妻中文av无码| 黄色成人av在线| www.中文字幕av| 日韩激情中文字幕| 偷拍视频一区二区| 少妇高潮一区二区三区99| 久久香蕉国产线看观看av| av免费在线不卡| 亚洲国产精品一区二区久久| 亚洲av网址在线| 久久综合中文| 影音先锋欧美资源| 国产精久久一区二区| 欧美福利视频在线| 亚洲 国产 欧美 日韩| 色婷婷综合久久久中文一区二区| 日韩精品电影一区二区| 麻豆精品视频在线观看| 免费的av在线| 极品束缚调教一区二区网站| 日本欧美黄网站| 日本福利在线| 欧美va天堂va视频va在线| 国产乱国产乱老熟| 中文字幕日韩精品一区| 亚洲天堂av网站| 日韩中文字幕一区二区三区| 在线不卡视频一区二区| 国产精品17p| 国产精品wwwwww| 操你啦视频在线| 日韩精品在线电影| 国产精品视频一二区| 精品免费在线观看| 亚洲精品电影院| 成人av网站在线| 99re精彩视频| 1024日韩| 亚洲一区二区三区精品动漫| 亚洲五码在线| 国产精品免费久久久久久| 色噜噜狠狠狠综合欧洲色8| 亚洲免费视频在线观看| a毛片在线免费观看| 欧美日韩中文字幕综合视频 | 一区二区在线观看不卡| 亚洲AV无码国产精品| 久久精品国产精品亚洲红杏 | 久久国产精品国语对白| 99久久久国产精品| 91亚洲一区二区| 丝袜美腿亚洲一区二区图片| 黄色特一级视频| av中字幕久久| 精品在线观看一区二区| 日本一区二区三区视频在线看 | 成人51免费| 国产98色在线| 91丝袜在线| 久久天天躁狠狠躁老女人| 日本一本草久在线中文| 精品国产欧美一区二区| 一区二区日韩视频| 色偷偷久久人人79超碰人人澡| 免费在线视频观看| 亚洲欧美中日韩| 亚洲码无人客一区二区三区| 成+人+亚洲+综合天堂| 污视频在线观看免费网站| 蜜桃视频在线一区| 韩国一区二区av| 国产亚洲一区在线| 成年人午夜免费视频| 欧美高清一区| 一二三四中文字幕| 亚洲情侣在线| 国产91av视频在线观看| 欧美色图国产精品| 日韩欧美电影一区二区| 久久99国内| 日本一区二区精品视频| 丝袜美腿综合| 久久久久综合一区二区三区| 国产精品成人自拍| 国产91社区| 97精品久久| 国产精品v欧美精品v日韩| 蜜桃在线一区| 91久久偷偷做嫩草影院| av在线精品| 97人人干人人| 都市激情亚洲| 精品久久一区二区三区蜜桃| 国内精品免费| 精品综合久久| 亚洲香蕉视频| 色综合电影网| 欧美色女视频| 人人妻人人澡人人爽精品欧美一区| 欧美好骚综合网| 一区二区三视频| 亚洲欧美偷拍自拍| 欧妇女乱妇女乱视频| 精品成人一区| 日韩av三级在线| 中文字幕一区二区中文字幕| 国产精品福利在线观看播放| 国产一二三四五| 韩日视频一区| 99爱视频在线| 日本欧美久久久久免费播放网| a在线观看免费视频| 精品一区免费av| 色哟哟无码精品一区二区三区| 99久久婷婷国产| 亚洲精品国产精品国自产网站| 国产精品久久久久久亚洲伦| 印度午夜性春猛xxx交| 性久久久久久久久久久久| 福利网址在线观看| 欧美日韩mp4| 蜜臀久久99精品久久久| 亚洲一区二区久久久| v片在线观看| 51色欧美片视频在线观看| 福利一区在线| 国产精品日韩二区| 国产免费av一区二区三区| 美国av在线播放| 国产欧美在线| 中文字幕 欧美日韩| 波多野洁衣一区| 四虎国产成人精品免费一女五男| 亚洲一区中文在线| 久久精品五月天| 欧美不卡激情三级在线观看| 巨骚激情综合| 久久大大胆人体| 午夜激情电影在线播放| 91免费精品国偷自产在线| 偷拍一区二区| 亚洲区成人777777精品| 三级不卡在线观看| 国产香蕉精品视频| 国产精品国产自产拍在线| 五月天婷婷网站| 欧美日韩1234| 毛片免费在线播放| 欧美国产亚洲视频| 国产精品天堂蜜av在线播放 | 亚洲成精国产精品女| 中文字幕乱码人妻无码久久| 亚洲国产成人精品久久久国产成人一区| 成av人电影在线观看| 午夜精品一区二区三区在线视 | 天美传媒免费在线观看| 亚洲成人av福利| av中文字幕播放| 中文字幕在线视频日韩| 亚洲性色av| 国产精品久久久久久久免费大片 | 欧美巨大黑人极品精男| 成人精品国产| 日本成人三级电影网站| 亚洲三级网站| 欧美图片自拍偷拍| 亚洲激情第一区| 91亚洲精品国偷拍自产在线观看| 亚洲人成电影网站色xx| 国产精品电影| 国产传媒一区二区三区| 你懂的视频一区二区| 午夜剧场在线免费观看| 亚洲国产高清不卡| 亚洲黄网在线观看| 亚洲理论在线a中文字幕| 国产在线观看www| 国产精品视频免费一区| 欧美日韩伊人| 免费看91视频| 一区二区三区在线视频观看| 国产福利第一视频| 麻豆成人在线看| 精品国模一区二区三区欧美| gogogo免费高清日本写真| 久久99精品久久久久久动态图| 天天操天天干天天操天天干| 欧美午夜电影一区| 97视频在线观看网站| 国产精品网红福利| 日韩欧美视频| 中文字幕12页| 亚洲欧美区自拍先锋| 国产女人高潮的av毛片| 久久亚洲精品一区二区| 成人在线日韩| 热久久最新地址| 成人av在线影院| 九一国产在线观看| 国产亚洲欧美日韩精品| 青青在线精品| 免费的一级黄色片| 99久久免费国产| 婷婷激情五月综合| 最近2019年中文视频免费在线观看| 欧美91在线|欧美| 国产91porn| 波多野结衣一区二区三区| 在线观看日本视频| 一区二区中文字幕| 亚洲我射av| 妞干网在线播放| 99国产精品久久久久久久久久久| 日本中文字幕在线| 中文字幕不卡在线视频极品| 99国内精品久久久久| www.好吊操| 久久精品在这里| 国产精品久久久久久久一区二区| 美女黄色丝袜一区| 任我爽精品视频在线播放| 男女视频在线看| 一区二区三区精品| 九色视频网站在线观看| 亚洲a在线播放| 亚洲尤物在线| 国产精品一区二区亚洲| 精品国内二区三区| 黄色精品视频| 免费在线黄网站| 中文幕一区二区三区久久蜜桃| 精品国自产拍在线观看| 欧美在线视频播放| 婷婷综合社区| 91av在线免费| 日韩一区二区三区在线观看| gay欧美网站| 日韩国产精品毛片| 久久亚洲私人国产精品va媚药| 国产精品伦一区二区三区| 91精品91久久久久久| 我不卡伦不卡影院| 国产精品1000部啪视频| 欧美一区二区三区日韩视频| 三级成人黄色影院| 乱熟女高潮一区二区在线| 国产午夜精品理论片a级大结局| 亚洲男女视频在线观看| 国产综合香蕉五月婷在线| 性伦欧美刺激片在线观看| 青青草手机视频在线观看|