当前位置:首页 > 科技  > 软件

如何通过 REST API 和 Spring MVC 提取电视节目详细信息?

来源: 责编: 时间:2023-10-18 17:58:44 231观看
导读表述性状态传输 (REST)是一种架构风格,它定义了一组用于创建 Web 服务的约束。REST API 是一种无需任何处理即可简单灵活地访问 Web 服务的方式。Spring MVC是一个用于构建 Web 应用程序的 Web MVC 框架。它是一个与 s

nBB28资讯网——每日最新资讯28at.com

表述性状态传输 (REST)是一种架构风格,它定义了一组用于创建 Web 服务的约束。REST API 是一种无需任何处理即可简单灵活地访问 Web 服务的方式。nBB28资讯网——每日最新资讯28at.com

Spring MVC是一个用于构建 Web 应用程序的 Web MVC 框架。它是一个与 spring boot、spring-security 等相同的 spring 模块。术语 MVC 代表模型-视图-控制器架构。REST API 调用如今被广泛用于获取各种信息,例如天气、邮政编码、secret、大学详细信息等.nBB28资讯网——每日最新资讯28at.com

在本文中,让我们尝试通过以下方式获取电视连续剧详细信息nBB28资讯网——每日最新资讯28at.com

http://api.tvmaze.com/search/shows?q=<任何电视连续剧名称>

例子:

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


nBB28资讯网——每日最新资讯28at.com

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"                }            }        }    }]


nBB28资讯网——每日最新资讯28at.com

使用Spring框架,让我们尝试提取REST API并将其呈现在页面上。nBB28资讯网——每日最新资讯28at.com

项目结构:

nBB28资讯网——每日最新资讯28at.com

pom.xml%20编写:


nBB28资讯网——每日最新资讯28at.com

<project%20xmlns="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%20 http://maven.apache.org/maven-v4_0_0.xsd">%20 <modelVersion>4.0.0</modelVersion>%20 <groupId>com.TVShow.TVShow_Rest_API</groupId>%20 <artifactId>TVShow_Rest_API</artifactId>%20 <packaging>war</packaging>%20 <version>0.0.1-SNAPSHOT</version>%20 <name>TVShow</name>%20 <url>http://maven.apache.org</url>%20 <properties>%20 <failOnMissingWebXml>false</failOnMissingWebXml>%20 <spring-version>5.1.0.RELEASE</spring-version>%20 </properties>%20 <dependencies>%20 <!--%20https://mvnrepository.com/artifact/org.springframework/spring-webmvc%20--> <dependency>%20 <groupId>org.springframework</groupId>%20 <artifactId>spring-webmvc</artifactId>%20 <version>${spring-version}</version>%20 </dependency>%20 <!--%20Required%20for%20spring-test%20--> <dependency>%20 <groupId>org.springframework</groupId>%20 <artifactId>spring-test</artifactId>%20 <version>${spring-version}</version>%20 </dependency>%20 <!--%20JSTL%20Dependency%20--> <dependency>%20 <groupId>javax.servlet.jsp.jstl</groupId>%20 <artifactId>javax.servlet.jsp.jstl-api</artifactId>%20 <version>1.2.1</version>%20 </dependency>%20 <dependency>%20 <groupId>taglibs</groupId>%20 <artifactId>standard</artifactId>%20 <version>1.1.2</version>%20 </dependency>%20 <!--%20Servlet%20Dependency%20--> <dependency>%20 <groupId>javax.servlet</groupId>%20 <artifactId>javax.servlet-api</artifactId>%20 <version>3.1.0</version>%20 <scope>provided</scope>%20 </dependency>%20 <!--%20JSP%20Dependency%20--> <dependency>%20 <groupId>javax.servlet.jsp</groupId>%20 <artifactId>javax.servlet.jsp-api</artifactId>%20 <version>2.3.1</version>%20 <scope>provided</scope>%20 </dependency>%20 <!--%20As%20REST%20API%20is%20extracted,%20this%20is%20required%20--> <dependency>%20 <groupId>com.google.code.gson</groupId>%20 <artifactId>gson</artifactId>%20 <version>2.8.6</version>%20 </dependency>%20 <dependency>%20 <groupId>commons-io</groupId>%20 <artifactId>commons-io</artifactId>%20 <version>2.5</version>%20 </dependency>%20 <dependency>%20 <groupId>junit</groupId>%20 <artifactId>junit</artifactId>%20 <version>4.12</version>%20 <scope>test</scope>%20 </dependency>%20 </dependencies>%20 <build>%20 <finalName>TVShow</finalName>%20 <sourceDirectory>src/main/java</sourceDirectory>%20 <plugins>%20 <plugin>%20 <artifactId>maven-compiler-plugin</artifactId>%20 <version>3.5.1</version>%20 <configuration>%20 <source>1.8</source>%20 <target>1.8</target>%20 </configuration>%20 </plugin>%20 <plugin>%20<groupId>org.apache.maven.plugins</groupId>%20<artifactId>maven-war-plugin</artifactId>%20<version>3.3.2</version>%20</plugin>%20 <plugin>%20 <groupId>org.codehaus.mojo</groupId>%20 <artifactId>tomcat-maven-plugin</artifactId>%20 <version>1.0-beta-1</version>%20 </plugin>%20 </plugins>%20 </build>%20</project>

 index.jsp%20编写:

这是项目部署到tomcat时渲染的页面nBB28资讯网——每日最新资讯28at.com

<!DOCTYPE%20html>%20<html%20lang="en">%20<head>%20 <meta%20charset="utf-8">%20 <meta%20http-equiv="X-UA-Compatible"%20content="IE=edge">%20 <meta%20name="viewport"%20content="width=device-width,%20initial-scale=1">%20 <title>TVShow</title>%20 <link%20rel="stylesheet"%20href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">%20 <script%20src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>%20 <script%20src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>%20 //%20for%20making%20the%20page%20styles%20are%20applied%20 <style%20type="text/css">%20 .main-form,%20.profile-area%20{%20 width:%20500px;%20 }%20 .main-form%20{%20 margin:%2050px%20auto%200px;%20 }%20 .profile-area%20{%20 margin:%2010px%20auto;%20 }%20 .main-form%20section,%20.profile-area%20section%20{%20 margin-bottom:%2015px;%20 background:%20#097969;%20 box-shadow:%200px%202px%202px%20rgba(0,%200,%200,%200.3);%20 color:%20white;%20 }%20 .main-form%20section%20{%20 padding:%2030px;%20 }%20 .profile-area%20section%20{%20 padding:%2030px%2030px%2030px;%20 }%20 .profile-area%20section%20>%20div%20{%20 text-align:%20center;%20 }%20 .main-form%20h3%20{%20 margin:%200%200%2015px;%20 }%20 .form-control,%20.btn%20{%20 min-height:%2038px;%20 border-radius:%202px;%20 }%20 .btn%20{%20 font-size:%2015px;%20 font-weight:%20bold;%20 }%20 .hideElement%20{%20 display:%20none;%20 }%20 </style>%20</head>%20<body>%20<div%20class="main-form"%20id="main-form">%20 <section>%20 <div%20class="form-group">%20 //%20We%20need%20to%20input%20the%20search%20string%20in%20this%20box%20 <input%20id="searchStr"%20type="text"%20class="form-control"%20placeholder="Enter%20TVShow%20name%20here..."%20required="required">%20 </div>%20 <div%20class="form-group">%20 <button%20onclick="loadData()"%20class="btn%20btn-primary%20btn-block">Find%20TVShow%20Details</button>%20 </div>%20 </section>%20</div>%20<div%20class="profile-area%20hideElement"%20id="profile-area">%20 <section>%20 <div%20id="loader"%20class="hideElement">%20 <div%20class="spinner-border"%20role="status">%20 <span%20class="sr-only">Loading...</span>%20 </div>%20 </div>%20 <div%20id="profile"%20class="hideElement">%20 <br><br>%20 //%20parsed%20json%20object%20details%20are%20displayed%20here%20 <p><strong>TVShowScore%20:%20</strong><span%20id="scores"></span></p>%20 <p><strong>TVShow%20URL%20:%20</strong><span%20id="url"></span></p>%20 <p><strong>IMDB%20:%20</strong><span%20id="imdb"></span></p>%20 </div>%20 </section>%20</div>%20</body>%20<script>%20 function%20loadData()%20{%20 document.getElementById("profile-area").classList.remove("hideElement");%20 document.getElementById("loader").classList.remove("hideElement");%20 document.getElementById("profile").classList.add("hideElement");%20 var%20searchStr%20=%20document.getElementById("searchStr").value;%20 if(searchStr%20!=%20""%20&&%20searchStr%20!=%20null%20)%20{%20 var%20xhttp%20=%20new%20XMLHttpRequest();%20 xhttp.onreadystatechange%20=%20function()%20{%20 if%20(this.readyState%20==%204%20&&%20this.status%20==%20200)%20{%20 var%20jsonResponse%20=%20JSON.parse(this.responseText);%20 document.getElementById("scores").innerHTML%20=%20jsonResponse.scores;%20 document.getElementById("url").innerHTML%20=%20jsonResponse.url;%20 document.getElementById("imdb").innerHTML%20=%20jsonResponse.imdb;%20 document.getElementById("loader").classList.add("hideElement");%20 document.getElementById("profile").classList.remove("hideElement");%20 }%20 };%20 //%20GET%20method%20which%20redirects%20the%20jsp%20to%20connect%20to%20 //%20the%20servlet%20with%20the%20search%20string%20 xhttp.open("GET",%20"getTVShowDetailsBySearchString?searchStr="+%20searchStr,%20true);%20 xhttp.send();%20 console.log("done");%20 }%20else%20{%20 console.log("Enter%20search%20string%20to%20check...")%20 }%20 }%20</script>%20</html>-----------------------------------©著作权归作者所有:来自51CTO博客作者demo007x的原创作品,请联系作者获取转载授权,否则将追究法律责任如何通过%20REST%20API%20和%20Spring%20MVC%20提取电视节目详细信息?https://blog.51cto.com/demo007x/7917153

输出:

nBB28资讯网——每日最新资讯28at.com

在输入框中输入任何电视节目名称后,我们将获得以下详细信息。nBB28资讯网——每日最新资讯28at.com

执行过程:

从 JSP 页面,使用搜索字符串调用“GET”方法,并将其重定向到 Spring Controller 类,其中 REST API URL http://api.tvmaze.com/search/shows?q= 被调用,它将创建上面给出的 JSON 数组,从中,我们使用下面的参数:nBB28资讯网——每日最新资讯28at.com


nBB28资讯网——每日最新资讯28at.com

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

实际上,在这个页面上,我们只检索了 TVShowScore、TVShow URL 和 IMDB。但我们可以获取 JSON 中提供的所有其他详细信息。检索数据和解析 JSON 输出所需的代码如下。实现流程的重要必要文件nBB28资讯网——每日最新资讯28at.com

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.HttpURLConnection; import java.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; @Controllerpublic 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; 	} }-----------------------------------©著作权归作者所有:来自51CTO博客作者demo007x的原创作品,请联系作者获取转载授权,否则将追究法律责任如何通过 REST API 和 Spring MVC 提取电视节目详细信息?https://blog.51cto.com/demo007x/7917153

结论

通过使用 Spring-webmvc,我们可以从 REST API 调用中获取详细信息。上面就是一个很好的例子。同样,有很多开源 REST API 调用可供使用。这意味着我们可以使用它们来检索数据。开源 REST API 调用的几个示例。nBB28资讯网——每日最新资讯28at.com

nBB28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-14017-0.html如何通过 REST API 和 Spring MVC 提取电视节目详细信息?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 如何在 TypeScript 中使用类和继承

下一篇: Python并发编程:多线程技术详解

标签:
  • 热门焦点
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • 一文看懂为苹果Vision Pro开发应用程序

    一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • Python异步IO编程的进程/线程通信实现

    Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • “又被陈思诚骗了”

    “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 微博大门常打开,迎接海外画师漂洋东渡

    微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事&ldquo;起猛了,我能看得懂日语了&rdquo;。&ldquo;为什么日本人说话我能听懂?&rdquo;&ldquo;中文不像中文,日语不像日语,但是我竟然看懂了&rdquo;&hellip;&hell
  • 机构称Q2国内智能手机销量同比下滑4% vivo份额重回第1

    机构称Q2国内智能手机销量同比下滑4% vivo份额重回第1

    7月29日消息,根据市场调查机构Counterpoint Research公布的最新报告,2023年第2季度中国智能手机销量同比下降4%,创新自2014年以来第2季度销量新低。报
  • iQOO Neo8 Pro真机谍照曝光:天玑9200+和V1+旗舰双芯加持

    iQOO Neo8 Pro真机谍照曝光:天玑9200+和V1+旗舰双芯加持

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
  • 2022爆款:ROG魔霸6 冰川散热系统持续护航

    2022爆款:ROG魔霸6 冰川散热系统持续护航

    喜逢开学季,各大商家开始推出自己的新产品,进行打折促销活动。对于忠实的端游爱好者来说,能够拥有一款梦寐以求的笔记本电脑是一件十分开心的事。但是现在的
  • Meta盲目扩张致超万人被裁,重金押注元宇宙而前景未明

    Meta盲目扩张致超万人被裁,重金押注元宇宙而前景未明

    图片来源:图虫创意日前,Meta创始人兼CEO 马克&middot;扎克伯发布公开信,宣布Meta计划裁员超11000人,占其员工总数13%。他公开承认了自己的预判失误:&ldquo;不仅
Top
Baidu
map