@@ -54,62 +54,94 @@ public List<NewsItem> fetchNewsList() {
5454 List <NewsItem > newsList = new ArrayList <>();
5555
5656 try {
57- HttpUrl url = HttpUrl .parse (NEWS_API_URL ).newBuilder ()
58- .addQueryParameter ("gameCode" , "ff" )
59- .addQueryParameter ("CategoryCode" , "8324,8325,8326,8327,5309,5310,5311,5312,5313" )
60- .addQueryParameter ("pageIndex" , "0" )
61- .addQueryParameter ("pageSize" , "5" )
62- .build ();
63-
64- Request request = new Request .Builder ()
65- .url (url )
66- .header ("User-Agent" , USER_AGENT )
67- .header ("Referer" , "https://ff.web.sdo.com/" )
68- .get ()
69- .build ();
70-
71- try (Response response = client .newCall (request ).execute ()) {
72- if (!response .isSuccessful ()) {
73- logger .error ("Failed to fetch FF14 news: code={}, url={}" , response .code (), url );
74- return newsList ;
75- }
57+ // 首先获取第一页数据,了解总页数
58+ JSONObject firstPageResponse = fetchPage (0 , 100 );
59+ if (firstPageResponse == null ) {
60+ return newsList ;
61+ }
62+
63+ // 解析第一页数据
64+ parseNewsData (firstPageResponse , newsList );
7665
77- String responseBody = response .body ().string ();
78- logger .debug ("FF14 news response: {}" , responseBody );
79-
80- JSONObject jsonResponse = JSONObject .parseObject (responseBody );
81- JSONArray dataList = jsonResponse .getJSONArray ("Data" );
82-
83- if (dataList != null ) {
84- for (int i = 0 ; i < dataList .size (); i ++) {
85- JSONObject item = dataList .getJSONObject (i );
86-
87- String id = item .getString ("Id" ) != null ? item .getString ("Id" ) : "" ;
88- String title = item .getString ("Title" ) != null ? item .getString ("Title" ) : "" ;
89- String description = item .getString ("Summary" ) != null ? item .getString ("Summary" ) : "" ;
90- String date = item .getString ("PublishDate" ) != null ? item .getString ("PublishDate" ) : "" ;
91- String imageUrl = item .getString ("HomeImagePath" ) != null ? item .getString ("HomeImagePath" ).trim () : "" ;
92- String outLink = item .getString ("OutLink" ) != null ? item .getString ("OutLink" ) : "" ;
93-
94- String linkUrl ;
95- if (!outLink .isEmpty ()) {
96- linkUrl = outLink ;
97- } else {
98- linkUrl = "https://ff.web.sdo.com/web8/index.html#/newstab/newscont/" + id ;
99- }
100-
101- if (date .length () >= 10 ) {
102- date = date .substring (0 , 10 );
103- }
104-
105- newsList .add (new NewsItem (title , description , date , imageUrl , linkUrl , id ));
106- }
66+ // 获取总页数
67+ int pageCount = firstPageResponse .getIntValue ("PageCount" );
68+ logger .info ("Total pages: {}" , pageCount );
69+
70+ // 循环获取剩余页面的数据
71+ for (int pageIndex = 1 ; pageIndex < pageCount ; pageIndex ++) {
72+ logger .info ("Fetching page: {}/{}" , pageIndex + 1 , pageCount );
73+ JSONObject pageResponse = fetchPage (pageIndex , 100 );
74+ if (pageResponse != null ) {
75+ parseNewsData (pageResponse , newsList );
10776 }
77+ // 避免请求过快,添加短暂延迟
78+ Thread .sleep (100 );
10879 }
80+
81+ logger .info ("Total news items fetched: {}" , newsList .size ());
82+
10983 } catch (Exception e ) {
11084 logger .error ("Error fetching FF14 news" , e );
11185 }
11286
11387 return newsList ;
11488 }
89+
90+ private JSONObject fetchPage (int pageIndex , int pageSize ) throws IOException {
91+ HttpUrl url = HttpUrl .parse (NEWS_API_URL ).newBuilder ()
92+ .addQueryParameter ("gameCode" , "ff" )
93+ .addQueryParameter ("CategoryCode" , "8324,8325,8326,8327,5309,5310,5311,5312,5313" )
94+ .addQueryParameter ("pageIndex" , String .valueOf (pageIndex ))
95+ .addQueryParameter ("pageSize" , String .valueOf (pageSize ))
96+ .build ();
97+
98+ Request request = new Request .Builder ()
99+ .url (url )
100+ .header ("User-Agent" , USER_AGENT )
101+ .header ("Referer" , "https://ff.web.sdo.com/" )
102+ .get ()
103+ .build ();
104+
105+ try (Response response = client .newCall (request ).execute ()) {
106+ if (!response .isSuccessful ()) {
107+ logger .error ("Failed to fetch FF14 news page {}: code={}, url={}" , pageIndex , response .code (), url );
108+ return null ;
109+ }
110+
111+ String responseBody = response .body ().string ();
112+ logger .debug ("FF14 news page {} response: {}" , pageIndex , responseBody );
113+
114+ return JSONObject .parseObject (responseBody );
115+ }
116+ }
117+
118+ private void parseNewsData (JSONObject jsonResponse , List <NewsItem > newsList ) {
119+ JSONArray dataList = jsonResponse .getJSONArray ("Data" );
120+
121+ if (dataList != null ) {
122+ for (int i = 0 ; i < dataList .size (); i ++) {
123+ JSONObject item = dataList .getJSONObject (i );
124+
125+ String id = item .getString ("Id" ) != null ? item .getString ("Id" ) : "" ;
126+ String title = item .getString ("Title" ) != null ? item .getString ("Title" ) : "" ;
127+ String description = item .getString ("Summary" ) != null ? item .getString ("Summary" ) : "" ;
128+ String date = item .getString ("PublishDate" ) != null ? item .getString ("PublishDate" ) : "" ;
129+ String imageUrl = item .getString ("HomeImagePath" ) != null ? item .getString ("HomeImagePath" ).trim () : "" ;
130+ String outLink = item .getString ("OutLink" ) != null ? item .getString ("OutLink" ) : "" ;
131+
132+ String linkUrl ;
133+ if (!outLink .isEmpty ()) {
134+ linkUrl = outLink ;
135+ } else {
136+ linkUrl = "https://ff.web.sdo.com/web8/index.html#/newstab/newscont/" + id ;
137+ }
138+
139+ if (date .length () >= 10 ) {
140+ date = date .substring (0 , 10 );
141+ }
142+
143+ newsList .add (new NewsItem (title , description , date , imageUrl , linkUrl , id ));
144+ }
145+ }
146+ }
115147}
0 commit comments