1+ package com .phantoms .phantomsbackend .common .utils ;
2+
3+ import okhttp3 .*;
4+ import com .alibaba .fastjson .JSONArray ;
5+ import com .alibaba .fastjson .JSONObject ;
6+ import org .springframework .stereotype .Component ;
7+
8+ import java .io .IOException ;
9+ import java .util .Collections ;
10+ import java .util .List ;
11+ import java .util .concurrent .TimeUnit ;
12+ import java .util .logging .Level ;
13+ import java .util .logging .Logger ;
14+
15+ @ Component
16+ public class SumemoUtils {
17+
18+ private static final Logger logger = Logger .getLogger (SumemoUtils .class .getName ());
19+ private static final String BASE_URL = "https://api.sumemo.dev/" ;
20+ private static final String USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" ;
21+
22+ private static final OkHttpClient client ;
23+
24+ static {
25+ client = new OkHttpClient .Builder ()
26+ .connectTimeout (10 , TimeUnit .SECONDS )
27+ .writeTimeout (10 , TimeUnit .SECONDS )
28+ .readTimeout (30 , TimeUnit .SECONDS )
29+ .build ();
30+ }
31+
32+ /**
33+ * 获取玩家特定副本的最佳攻略信息
34+ * @param playerName 玩家名称
35+ * @param serverName 服务器名称
36+ * @param zoneId 副本ID
37+ * @return 最佳攻略信息
38+ */
39+ public static JSONObject getPlayerBestDuty (String playerName , String serverName , int zoneId ) throws IOException {
40+ String formattedName = String .format ("%s@%s" , playerName , serverName );
41+ HttpUrl url = HttpUrl .parse (BASE_URL + "member/" + formattedName + "/" + zoneId + "/best" ).newBuilder ()
42+ .build ();
43+
44+ Request request = new Request .Builder ()
45+ .url (url )
46+ .header ("User-Agent" , USER_AGENT )
47+ .build ();
48+
49+ try (Response response = client .newCall (request ).execute ()) {
50+ if (!response .isSuccessful ()) {
51+ logger .log (Level .SEVERE , "Unexpected code {0} for getting player best duty" , response .code ());
52+ throw new IOException ("Unexpected code " + response .code ());
53+ }
54+ String responseBody = response .body ().string ();
55+ logger .log (Level .FINE , "Player best duty response: {0}" , responseBody );
56+ return JSONObject .parseObject (responseBody );
57+ }
58+ }
59+
60+ /**
61+ * 获取玩家特定副本的最新攻略信息列表
62+ * @param playerName 玩家名称
63+ * @param serverName 服务器名称
64+ * @param zoneId 副本ID
65+ * @param limit 返回数量限制
66+ * @return 最新攻略信息列表
67+ */
68+ public static JSONArray getPlayerLatestDuty (String playerName , String serverName , int zoneId , int limit ) throws IOException {
69+ String formattedName = String .format ("%s@%s" , playerName , serverName );
70+ HttpUrl url = HttpUrl .parse (BASE_URL + "member/" + formattedName + "/" + zoneId + "/latest" ).newBuilder ()
71+ .addQueryParameter ("limit" , String .valueOf (limit ))
72+ .build ();
73+
74+ Request request = new Request .Builder ()
75+ .url (url )
76+ .header ("User-Agent" , USER_AGENT )
77+ .build ();
78+
79+ try (Response response = client .newCall (request ).execute ()) {
80+ if (!response .isSuccessful ()) {
81+ logger .log (Level .SEVERE , "Unexpected code {0} for getting player latest duty" , response .code ());
82+ throw new IOException ("Unexpected code " + response .code ());
83+ }
84+ String responseBody = response .body ().string ();
85+ logger .log (Level .FINE , "Player latest duty response: {0}" , responseBody );
86+ return JSONArray .parseArray (responseBody );
87+ }
88+ }
89+
90+ /**
91+ * 获取副本信息
92+ * @param zoneId 副本ID
93+ * @return 副本信息
94+ */
95+ public static JSONObject getDutyInfo (int zoneId ) throws IOException {
96+ HttpUrl url = HttpUrl .parse (BASE_URL + "duty/" + zoneId ).newBuilder ()
97+ .build ();
98+
99+ Request request = new Request .Builder ()
100+ .url (url )
101+ .header ("User-Agent" , USER_AGENT )
102+ .build ();
103+
104+ try (Response response = client .newCall (request ).execute ()) {
105+ if (!response .isSuccessful ()) {
106+ logger .log (Level .SEVERE , "Unexpected code {0} for getting duty info" , response .code ());
107+ throw new IOException ("Unexpected code " + response .code ());
108+ }
109+ String responseBody = response .body ().string ();
110+ logger .log (Level .FINE , "Duty info response: {0}" , responseBody );
111+ return JSONObject .parseObject (responseBody );
112+ }
113+ }
114+
115+ /**
116+ * 获取副本名称
117+ * @param zoneId 副本ID
118+ * @return 副本名称
119+ */
120+ public static String getDutyName (int zoneId ) throws IOException {
121+ HttpUrl url = HttpUrl .parse (BASE_URL + "duty/" + zoneId + "/name" ).newBuilder ()
122+ .build ();
123+
124+ Request request = new Request .Builder ()
125+ .url (url )
126+ .header ("User-Agent" , USER_AGENT )
127+ .build ();
128+
129+ try (Response response = client .newCall (request ).execute ()) {
130+ if (!response .isSuccessful ()) {
131+ logger .log (Level .SEVERE , "Unexpected code {0} for getting duty name" , response .code ());
132+ throw new IOException ("Unexpected code " + response .code ());
133+ }
134+ String responseBody = response .body ().string ();
135+ JSONObject result = JSONObject .parseObject (responseBody );
136+ return result .getString ("name" );
137+ }
138+ }
139+ }
0 commit comments