精品欧美一区二区三区在线观看 _久久久久国色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)

69视频免费在线观看| 又色又爽又黄18网站| 91高清在线视频| 九一九一国产精品| 98精品国产高清在线xxxx天堂| 成年人在线观看av| 最新亚洲国产| 欧美日韩亚洲天堂| 在线播放 亚洲| 五月婷婷六月丁香综合| 麻豆精品久久久| 国产69精品久久久| 中文字幕美女视频| 欧美色资源站| 日韩三级电影网址| 人人爽人人av| 国产高潮在线| 亚洲欧美日韩国产手机在线| 欧美一区视久久| 亚洲黄色片视频| 乱一区二区av| 国产91精品最新在线播放| 极品盗摄国产盗摄合集| 国产欧美日韩在线观看视频| 欧美成人免费网站| aaa一级黄色片| 日韩精品免费观看视频| 午夜影院久久久| 天天在线免费视频| 91在线品视觉盛宴免费| 久久综合999| 国产91一区二区三区| 一级黄在线观看| 日本欧美一区二区三区| 91po在线观看91精品国产性色| 永久久久久久久| 999久久久精品国产| 亚洲色图第一页| 中文字幕丰满孑伦无码专区| 理论片一区二区在线| 日韩视频永久免费| 午夜视频在线网站| 成人国产精品入口免费视频| 91国在线观看| 国产成人精品无码播放| 成人福利视频| 色婷婷激情一区二区三区| av动漫在线看| 日本不卡免费高清视频在线| 亚洲国产毛片aaaaa无费看 | 91成人天堂久久成人| 黄页网站免费观看| 欧美大片专区| 欧美国产在线电影| 久久久全国免费视频| 国产精品av一区二区| 欧美黄色三级网站| 久久久久久久久精| 亚洲国产激情| 欧美一级免费看| 日韩在线 中文字幕| 久久久国产精品一区二区中文| 国产999精品久久久| 91黑人精品一区二区三区| 视频一区视频二区中文| 国产精品扒开腿做| 一区二区三区免费在线视频| 国产综合色视频| 官网99热精品| 你懂的在线观看| 欧美激情资源网| 艳色歌舞团一区二区三区| 黄色大片在线播放| 亚洲一本大道在线| 大陆极品少妇内射aaaaa| 日韩免费福利视频| 欧美日韩免费不卡视频一区二区三区 | 国模精品视频| 在线观看亚洲精品视频| 亚洲网中文字幕| 国产丝袜一区| 亚洲午夜精品久久久久久久久久久久| 一级片久久久久| 欧美一区二区三区另类| 97人人模人人爽人人喊中文字| 中文字幕手机在线视频| 国产在线精品一区二区三区不卡 | www.久久成人| 91欧美一区二区| 综合网五月天| 国产白浆在线免费观看| 欧美性受xxxx黑人xyx| 99精品视频国产| 婷婷五月色综合香五月| 播播国产欧美激情| 成年人免费看毛片| 久久成人av少妇免费| 精品91免费| 粗大黑人巨茎大战欧美成人| 欧美日韩中文字幕在线视频| 一级做a免费视频| 丝袜美腿一区二区三区动态图| 色黄久久久久久| 天海翼一区二区| 狠狠久久亚洲欧美| 欧美日韩国产综合在线| 老司机午夜在线| 在线免费观看日本欧美| 亚洲成年人av| 五月天久久777| 日韩av电影国产| 亚洲av无码乱码国产精品| 日本一区二区视频在线观看| 成人午夜精品久久久久久久蜜臀| 欧美激情啪啪| 亚洲欧美另类人妖| 久久久久久久久97| 国产一区二三区| 亚洲国产精品视频一区| 在线最新版中文在线| 精品剧情在线观看| 国产又黄又爽又无遮挡| 日本亚洲最大的色成网站www| 国产欧美日韩综合一区在线观看| 成人在线影视| 欧美高清www午色夜在线视频| 亚洲色成人网站www永久四虎| 亚洲手机视频| 亚洲精品日韩激情在线电影| 日本欧美在线视频免费观看| 欧美色视频在线| 免费看污片网站| 国产亚洲在线| 国语精品中文字幕| 黄页网站在线| 精品国产免费久久| wwwav国产| 国产一区在线观看麻豆| 伊人婷婷久久| a一区二区三区亚洲| 色多多国产成人永久免费网站| 亚洲国产av一区二区三区| 97超碰欧美中文字幕| 黄色片网址在线观看| 精品亚洲自拍| 9.1国产丝袜在线观看| 亚洲日本国产精品| 狠狠久久亚洲欧美专区| www.自拍偷拍| 久久亚洲精品伦理| 日韩视频专区| 欧美xxxx性| 久久精品国产69国产精品亚洲| 中文字幕一区二区三区免费看| 中文字幕免费观看一区| 日本特黄a级片| 天天做天天爱天天综合网| 成人午夜小视频| 免费在线观看的电影网站| 精品粉嫩超白一线天av| 国产精品第56页| 2023国产精品| 亚洲少妇久久久| 亚洲一级毛片| 国产精品国产精品国产专区不卡| 成入视频在线观看| 亚洲欧美三级在线| 91精品视频免费在线观看| 亚洲欧美日韩国产一区二区三区| 美女网站视频在线观看| 六月婷婷一区| 美女黄色片网站| 红杏成人性视频免费看| 国产98色在线| 少女频道在线观看高清 | 国产在线不卡| 欧美日韩国产精品一区二区| 开心久久婷婷综合中文字幕 | 欧美gay视频| 色偷偷88888欧美精品久久久 | 欧美激情一区二区三区| www.欧美激情.com| 亚洲激情欧美| 亚洲图片欧洲图片日韩av| 日韩免费一级| 国产mv免费观看入口亚洲| wwwav在线| 亚洲日本成人网| 国产成人久久精品77777综合| 精品magnet| 91麻豆制片厂| 成人黄色网址在线观看| 日本久久久久久久久久久久| 国内激情久久| 亚洲午夜精品久久久久久浪潮| 粉嫩精品导航导航| 国产伊人精品在线| 丝袜诱惑一区二区| 久久综合久久八八| 国产在线视频网站| 精品国产网站在线观看| 奴色虐av一区二区三区| 亚洲成人在线观看视频| 日日操免费视频| 久久人人超碰精品| 佐佐木明希电影| 国内精品在线播放| 动漫av免费观看| 亚洲美女91| 男插女免费视频| 日韩激情图片| 免费看国产精品一二区视频| xxxxxhd亚洲人hd| 成人免费网站在线| 国产成人精选| 国产成人在线一区二区| 国产高清视频色在线www| 久久中文字幕在线视频| 在线观看a视频| 亚洲一级一级97网| 内衣办公室在线| 精品视频中文字幕| 日本美女一级视频| 精品国产乱码久久久久久浪潮 | 日本午夜精品久久久久| 日韩av片免费在线观看| f2c人成在线观看免费视频| 九九久久久久99精品| 日本www在线观看| 日韩中文在线观看| www视频在线观看免费| 亚洲美女久久久| 亚洲日本中文字幕在线| 亚洲精品国产品国语在线| 粉嫩小泬无遮挡久久久久久| 日韩免费在线观看| 精品国产99久久久久久宅男i| 欧美日韩精品高清| 国产在成人精品线拍偷自揄拍| 在线观看欧美黄色| 中文字幕一二区| 欧美日韩国产综合视频在线观看| 欧美另类高清videos的特点| 欧美亚洲一区三区| 中文字幕在线播放av| 欧美日韩不卡在线| 国产精品欧美激情在线| 欧美精品一二三| 国产草草影院ccyycom| 日韩精品在线一区二区| 日本韩国在线观看| 亚洲精品一区二三区不卡| 全色精品综合影院| 亚洲精品国产精品乱码不99按摩 | 人妻丰满熟妇av无码区app| 美女爽到呻吟久久久久| 999精品视频在线| 久久精品国产秦先生| 久久出品必属精品| 粉嫩一区二区三区性色av| 精品国产一区在线| 久久久五月婷婷| 免费黄在线观看| 亚洲免费在线视频| 欧美一级高潮片| 91传媒视频在线播放| 一级特黄aaa大片在线观看| 欧美一区二区三区精品| 五月天福利视频| 在线观看欧美日韩| 最新超碰在线| 欧美孕妇孕交黑巨大网站| 国产亚洲人成a在线v网站| 91超碰在线电影| 亚洲小说图片| 国产精品久久成人免费观看| 国产日韩欧美| 亚洲va在线va天堂va偷拍| 成人av资源在线| 极品尤物一区二区| 亚洲成人免费影院| 亚洲男人天堂网址| 精品国产凹凸成av人网站| 国产一二三在线观看| 麻豆一区二区在线观看| 人狥杂交一区欧美二区| 成人性生交大片免费看小说| 女同另类激情重口| 中文字幕中文字幕在线中一区高清 | 日韩一中文字幕| 超免费在线视频| 国产精品极品尤物在线观看| 香蕉免费一区二区三区在线观看| 麻豆久久久9性大片| 一区二区不卡| 男人舔女人下面高潮视频| 国产精品18久久久久久vr| 亚洲熟妇一区二区三区| 亚洲免费在线观看视频| 欧美视频xxxx| 亚洲国产另类久久精品 | 蜜乳av综合| 肉大捧一出免费观看网站在线播放| 欧美综合二区| 年下总裁被打光屁股sp| 国产精品二区一区二区aⅴ污介绍| 国产福利久久久| 91麻豆精品国产91久久久久久久久| 四虎成人免费在线| 久久91亚洲人成电影网站| 久久亚洲精品人成综合网| 免费亚洲一区二区| 一区精品久久| 操人视频免费看| 国产精品美日韩| 91porny九色| 亚洲精品乱码久久久久久按摩观| av在线网址观看| 91精品国产综合久久香蕉| 国产麻豆一区二区三区精品视频| 国产色一区二区三区| 国产精品中文字幕一区二区三区| 免费一级suv好看的国产网站| 91成人免费在线| 欧美91精品久久久久国产性生爱| 国产综合在线视频| 亚洲精选av| 国产a级黄色大片| 国产一区二区福利视频| 久久99久久99精品免费看小说| 欧美中文字幕一区| 成人免费在线观看| 国产成人高清激情视频在线观看| 网曝91综合精品门事件在线| 青青青国产在线观看| www.日韩在线| 日韩精品一区二区三| 亚洲第五色综合网| 国产直播在线| 欧美精品尤物在线| 日韩精品色哟哟| 超薄肉色丝袜一二三| 欧美日韩一级黄| 黄色网址在线免费播放| 91网站免费观看| 欧美日本一区二区高清播放视频| 国产探花一区二区三区| 亚洲自拍偷拍av| 人妻无码中文字幕| 45www国产精品网站| 一区三区在线欧| 少妇人妻互换不带套| 国产精品区一区二区三| 国产免费高清av| 久久久免费观看视频| 乱亲女h秽乱长久久久| 丁香啪啪综合成人亚洲| 国产精品私人影院| 国产又大又长又粗| 欧美国产亚洲视频| 欧美绝顶高潮抽搐喷水合集| 精品久久久久av| 中文字幕一区二区三区色视频| 国产99999| 91精品国产沙发| 国产九一精品| 国产免费中文字幕| 亚洲超碰97人人做人人爱| 欧美日本网站| 91久久中文字幕| 亚洲精品国产日韩| 国产sm调教视频| 91精品国产乱| 天堂网在线最新版www中文网| 无码免费一区二区三区免费播放 | 美女视频黄 久久| 欧美性猛交xxxxx少妇| 亚洲精品电影久久久| 粉嫩91精品久久久久久久99蜜桃| 国产高潮呻吟久久久| 91小视频免费看| 97在线公开视频| 欧美一级淫片丝袜脚交| 97偷自拍亚洲综合二区| 日批在线观看视频| 欧美精品一卡二卡| 阿v视频在线| 影音欧美亚洲| 2023国产精品视频| www.国产精品视频| 国产精品久久久91| 雨宫琴音一区二区在线| 亚洲色图第四色| 日韩国产一区三区| 精品视频在线播放一区二区三区| www国产黄色| 一区二区三区四区不卡在线 | 国产精品日韩在线播放| 亚洲激情在线| 黑鬼狂亚洲人videos|