OSDN Git Service

コメント手動取得数を内部ではintで扱うよう変更
[coroid/inqubus.git] / frontend / src / yukihane / inqubus / saccubus_adapter / NicoBrowserAdapter.java
1 package yukihane.inqubus.saccubus_adapter;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.util.logging.Level;
6 import java.util.logging.Logger;
7 import nicobrowser.GetFlvResult;
8 import nicobrowser.NicoHttpClient;
9 import nicobrowser.ProgressListener;
10 import nicobrowser.WayBackInfo;
11 import saccubus.ConvertStopFlag;
12 import saccubus.net.CommentInfo;
13 import saccubus.net.NicoClient;
14 import saccubus.net.TextProgressListener;
15 import saccubus.net.VideoInfo;
16 import saccubus.util.FileUtil;
17
18 /**
19  * NicoBrowserのニコニコ動画サービスアクセス機能をいんきゅばすから使用するためのアダプタ.
20  * @author yuki
21  */
22 public class NicoBrowserAdapter implements NicoClient {
23
24     private static final Logger logger = Logger.getLogger(NicoBrowserAdapter.class.getName());
25     private final NicoHttpClient client;
26     private final boolean hasLogin;
27     private final ConvertStopFlag stopFlag;
28     private nicobrowser.VideoInfo nicoBrowserVi;
29
30     public NicoBrowserAdapter(final String mail, final String pass,
31             final ConvertStopFlag flag, final String proxyHost, final int proxyPort) {
32
33         if (proxyHost != null && proxyHost.length() > 0 && proxyPort >= 0 && proxyPort <= 65535) {
34             this.client = new NicoHttpClient(proxyHost, proxyPort);
35         } else {
36             this.client = new NicoHttpClient();
37         }
38
39         // ログイン
40         boolean loginned = false;
41         try {
42             loginned = client.login(mail, pass);
43         } catch (Exception ex) {
44             logger.log(Level.SEVERE, "ログイン処理時に例外発生", ex);
45         }
46         this.hasLogin = loginned;
47
48         this.stopFlag = flag;
49
50     }
51
52     @Override
53     public VideoInfo getVideoInfo(String videoId) throws IOException {
54         nicoBrowserVi = client.getVideoInfo(videoId);
55         final nicobrowser.VideoInfo vi = nicoBrowserVi;
56
57         final VideoInfo.OfficialOption oo =
58                 new VideoInfo.OfficialOption(vi.getKeyMap().get("threadkey"), vi.getKeyMap().get("force_184"));
59
60         return new VideoInfo(FileUtil.safeFileName(vi.getTitleInWatchPage()), vi.getThreadId(), vi.getVideoUrl().
61                 toString(), vi.getMessageUrl().toString(), vi.getUserId(), vi.getVideoLength(), oo);
62     }
63
64     @Override
65     public String getWayBackKey(VideoInfo vi) throws IOException {
66         return client.getWayBackKey(nicoBrowserVi);
67     }
68
69     @Override
70     public File getComment(VideoInfo videoInfo, CommentInfo commentInfo, File file, TextProgressListener listener,
71             int com) {
72         try {
73             WayBackInfo wbi = new WayBackInfo(commentInfo.getWayBackKey(), commentInfo.getWayBackTime());
74             return client.getCommentFile(nicoBrowserVi, file.getPath(), wbi);
75         } catch (Exception ex) {
76             logger.log(Level.SEVERE, "コメント取得失敗", ex);
77         }
78         return null;
79     }
80
81     @Override
82     public File getTcomment(VideoInfo videoInfo, File file, TextProgressListener listener) {
83         try {
84             return client.getTCommentFile(nicoBrowserVi, file.getParent());
85         } catch (Exception ex) {
86             logger.log(Level.SEVERE, "投稿者コメント取得失敗", ex);
87         }
88         return null;
89     }
90
91     @Override
92     public File getVideo(final VideoInfo videoInfo, File file, final TextProgressListener listener) {
93         try {
94             final String fileName = FileUtil.removeExtension(file.getPath());
95             GetFlvResult res = client.getFlvFile(nicoBrowserVi, fileName, new ProgressListener() {
96
97                 @Override
98                 public void progress(long fileSize, long downloadSize) {
99                     final double p = ((double) downloadSize / fileSize) * 100.0;
100                     final String msg = String.format("動画ダウンロード:%.2fパーセント完了", p);
101                     listener.setText(msg);
102                 }
103
104                 @Override
105                 public boolean getCancel() {
106                     return stopFlag.needStop();
107                 }
108             });
109
110             return res.getFile();
111         } catch (Exception ex) {
112             logger.log(Level.SEVERE, null, ex);
113         }
114         return null;
115     }
116
117     @Override
118     public boolean isLoggedIn() {
119         return hasLogin;
120     }
121 }