1 package yukihane.inqubus.saccubus_adapter;
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 import yukihane.saccubus.converter.profile.CommentProfile;
18 import yukihane.saccubus.converter.profile.LoinProfile;
19 import yukihane.saccubus.converter.profile.ProxyProfile;
22 * NicoBrowserのニコニコ動画サービスアクセス機能をいんきゅばすから使用するためのアダプタ.
25 public class NicoBrowserAdapter implements NicoClient {
27 private static final Logger logger = Logger.getLogger(NicoBrowserAdapter.class.getName());
28 private final NicoHttpClient client;
29 private final boolean hasLogin;
30 private final ConvertStopFlag stopFlag;
31 private nicobrowser.VideoInfo nicoBrowserVi;
33 public NicoBrowserAdapter(final String mail, final String pass,
34 final ConvertStopFlag flag, final String proxyHost, final int proxyPort) {
36 if (proxyHost != null && proxyHost.length() > 0 && proxyPort >= 0 && proxyPort <= 65535) {
37 this.client = new NicoHttpClient(proxyHost, proxyPort);
39 this.client = new NicoHttpClient();
43 boolean loginned = false;
45 loginned = client.login(mail, pass);
46 } catch (Exception ex) {
47 logger.log(Level.SEVERE, "ログイン処理時に例外発生", ex);
49 this.hasLogin = loginned;
55 public NicoBrowserAdapter(LoinProfile loginInfo, ProxyProfile proxy, ConvertStopFlag flag) {
57 this.client = new NicoHttpClient(proxy.getHost(), proxy.getPort());
59 this.client = new NicoHttpClient();
63 boolean loginned = false;
65 loginned = client.login(loginInfo.getMail(), loginInfo.getPass());
66 } catch (Exception ex) {
67 logger.log(Level.SEVERE, "ログイン処理時に例外発生", ex);
69 this.hasLogin = loginned;
75 public VideoInfo getVideoInfo(String videoId) throws IOException {
76 nicoBrowserVi = client.getVideoInfo(videoId);
77 final nicobrowser.VideoInfo vi = nicoBrowserVi;
79 final VideoInfo.OfficialOption oo =
80 new VideoInfo.OfficialOption(vi.getKeyMap().get("threadkey"), vi.getKeyMap().get("force_184"));
82 return new VideoInfo(FileUtil.safeFileName(vi.getTitleInWatchPage()), vi.getThreadId(), vi.getVideoUrl().
83 toString(), vi.getMessageUrl().toString(), vi.getUserId(), vi.getVideoLength(), oo);
87 public String getWayBackKey(VideoInfo vi) throws IOException {
88 return client.getWayBackKey(nicoBrowserVi);
92 public File getComment(VideoInfo videoInfo, CommentInfo commentInfo, File file, TextProgressListener listener,
93 int commentNum, boolean reduceComment) {
95 final WayBackInfo wbi = (commentInfo != null) ? new WayBackInfo(commentInfo.getWayBackKey(), commentInfo.
96 getWayBackTime()) : null;
97 return client.getCommentFile(nicoBrowserVi, file.getPath(), wbi, commentNum, reduceComment);
98 } catch (Exception ex) {
99 logger.log(Level.SEVERE, "コメント取得失敗", ex);
105 public File getTcomment(VideoInfo videoInfo, File file, TextProgressListener listener) {
107 return client.getTCommentFile(nicoBrowserVi, file.getPath());
108 } catch (Exception ex) {
109 logger.log(Level.SEVERE, "投稿者コメント取得失敗", ex);
115 public File getVideo(final VideoInfo videoInfo, File file, final TextProgressListener listener) {
117 final String fileName = FileUtil.removeExtension(file.getPath());
118 GetFlvResult res = client.getFlvFile(nicoBrowserVi, fileName, new ProgressListener() {
121 public void progress(long fileSize, long downloadSize) {
122 final double p = ((double) downloadSize / fileSize) * 100.0;
123 final String msg = String.format("動画ダウンロード:%.2fパーセント完了", p);
124 listener.setText(msg);
128 public boolean getCancel() {
129 return stopFlag.needStop();
133 return res.getFile();
134 } catch (Exception ex) {
135 logger.log(Level.SEVERE, null, ex);
141 public boolean isLoggedIn() {