OSDN Git Service

feat: added Album type fetch class
[delesterandomselector/DelesteRandomSelector.git] / src / com / ranfa / lib / AlbumTypeEstimate.java
1 package com.ranfa.lib;
2
3 import java.io.IOException;
4 import java.util.ArrayList;
5 import java.util.concurrent.CompletableFuture;
6 import java.util.concurrent.ExecutionException;
7
8 import org.jsoup.Jsoup;
9 import org.jsoup.nodes.Document;
10 import org.jsoup.select.Elements;
11
12 public class AlbumTypeEstimate {
13
14         public final static String ALBUM_DATA_URI = "https://imascg-slstage-wiki.gamerch.com/%E6%A5%BD%E6%9B%B2%E8%A9%B3%E7%B4%B0%E4%B8%80%E8%A6%A7%EF%BC%88%E9%9B%A3%E6%98%93%E5%BA%A6%E5%88%A5%EF%BC%89";
15
16         //アルバム種類の定義
17         public enum ALBUM_TYPE {
18                 // 全体曲+キュート
19                 ALBUM_A,
20                 //全体曲+クール
21                 ALBUM_B,
22                 //全体曲+パッション
23                 ALBUM_C
24         };
25
26         public enum MASTERPLUS_TYPE {
27                 //新MASTER+
28                 NEWMASTERPLUS,
29                 //旧MASTER+
30                 LEGACYMASTERPLUS
31         }
32
33         public static ArrayList<ArrayList<Album>> getAlbumType() {
34                 long time = System.currentTimeMillis();
35                 ArrayList<ArrayList<Album>> res = new ArrayList<ArrayList<Album>>();
36                 try {
37                         Document document = Jsoup.connect(ALBUM_DATA_URI)
38                                         .userAgent("Java/DelesteRandomSelector  More Information is available at https://github.com/hizumiaoba/DeresteRandomSelector/")
39                                         .maxBodySize(0)
40                                         .timeout(0)
41                                         .get();
42                         Elements elements = document.getElementsByTag("tbody");
43                         Elements newMasterPlus = elements.get(4).select("tr");
44                         Elements legacyMasterPlus = elements.get(5).select("tr");
45                         CompletableFuture<ArrayList<Album>> fetchNew = CompletableFuture.supplyAsync(() -> fetch(newMasterPlus));
46                         CompletableFuture<ArrayList<Album>> fetchLegacy = CompletableFuture.supplyAsync(() -> fetch(legacyMasterPlus));
47                         res.add(fetchNew.get());
48                         res.add(fetchLegacy.get());
49                 } catch (IOException | InterruptedException | ExecutionException e) {
50                         e.printStackTrace();
51                 }
52                 LimitedLog.println(AlbumTypeEstimate.class + ":[INFO]: " + "Album type fetched in " + (System.currentTimeMillis() - time) + "ms");
53                 return res;
54         }
55
56         private static ArrayList<Album> fetch(Elements elements) {
57                 ArrayList<Album> res = new ArrayList<>();
58                 elements.stream()
59                         .forEach(element -> {
60                                 String type = element.select("td").get(0).text().isEmpty() ? "Not-implemented" : element.select("td").get(0).text();
61                                 String songName = element.select("td").get(2).text();
62                                 Album tmp = new Album();
63                                 tmp.setSongName(songName);
64                                 tmp.setAlbumType(type);
65                                 res.add(tmp);
66                         });
67                 return res;
68         }
69 }