final File file = new File(profile.getCommentProfile().getDir(), name);
final EnumSet<DownloadCommentType> commentSet = EnumSet.of(DownloadCommentType.OWNER);
- if(profile.getCommentProfile().isDisablePerMinComment()) {
+ if (profile.getCommentProfile().isDisablePerMinComment()) {
commentSet.add(DownloadCommentType.COMMENT_OLD);
} else {
commentSet.add(DownloadCommentType.COMMENT);
*/
private NicoHttpClient createClientAndLogin() throws IOException, InterruptedException {
final NicoHttpClient client = createClient(profile.getProxyProfile());
+ if (profile.getLoginProfile().needsLogin()) {
- final boolean hasLogin = client.login(profile.getLoginProfile().getMail(), profile.getLoginProfile().getPassword());
- if (!hasLogin) {
- throw new IOException("login fail");
+ final boolean hasLogin = client.login(profile.getLoginProfile().getMail(), profile.getLoginProfile().
+ getPassword());
+ if (!hasLogin) {
+ throw new IOException("login fail");
+ }
+ } else {
+ client.addCookie(profile.getLoginProfile().getCookies());
}
return client;
package saccubus.worker.profile;
+import java.util.Map;
+
/**
* ニコニコ動画サービスへのログイン情報を保持するためのプロファイルです.
* @author yuki
*/
public interface LoginProfile {
+ /** @return ログイン情報を使用してログインする場合はtrue, cookieを使用する場合はfalse. */
+ boolean needsLogin();
+
/** @return ログインID(メールアドレス). */
- public String getMail();
+ String getMail();
/** @return ログインパスワード. */
- public String getPassword();
+ String getPassword();
+
+ /**
+ * @return 追加のCookie.
+ * {@link #needsLogin()} がfalseの場合, ここにユーザセッション情報を含める必要があります.
+ */
+ Map<String, String> getCookies();
}
import java.util.List;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;
+import saccubus.net.Cookie.BrowserType;
public enum Config {
INSTANCE;
+
+ public enum CookieBrowser {
+
+ MSIE {
+
+ @Override
+ public BrowserType toBrowserType() {
+ return BrowserType.MSIE;
+ }
+ }, FIREFOX {
+
+ @Override
+ public BrowserType toBrowserType() {
+ return BrowserType.FIREFOX;
+ }
+ }, CHROME {
+
+ @Override
+ public BrowserType toBrowserType() {
+ return BrowserType.CHROME;
+ }
+ }, CHROMIUM {
+
+ @Override
+ public BrowserType toBrowserType() {
+ return BrowserType.CHROMIUM;
+ }
+ }, OPERA {
+
+ @Override
+ public BrowserType toBrowserType() {
+ return BrowserType.OPERA;
+ }
+ }, OTHER {
+
+ @Override
+ public BrowserType toBrowserType() {
+ return BrowserType.OTHER;
+ }
+ };
+
+ public abstract BrowserType toBrowserType();
+ }
private final XMLConfiguration config = new XMLConfiguration();
void clear() {
/*
* ネットワーク - アカウント
*/
+ private static final String LOGIN_NEED = "network.login";
+
+ public boolean getNeedsLogin() {
+ return config.getBoolean(LOGIN_NEED, true);
+ }
+
+ public void setNeedsLogin(boolean s) {
+ config.setProperty(LOGIN_NEED, s);
+ }
private static final String ACCOUNT_ID = "network.account.id";
public String getId() {
public void setPassword(String s) {
config.setProperty(ACCOUNT_PASSWORD, s);
}
+ private static final String COOKIE_BROWSER = "network.cookie.browser";
+
+ public CookieBrowser getCookieBrowser() {
+ final String str = config.getString(COOKIE_BROWSER, CookieBrowser.MSIE.name());
+ return CookieBrowser.valueOf(str);
+ }
+ public void setCookieBrowser(CookieBrowser s) {
+ config.setProperty(COOKIE_BROWSER, s.name());
+ }
+ private static final String COOKIE_DIR = "network.cookie.dir";
+
+ public String getCookieDir() {
+ return config.getString(COOKIE_DIR, "");
+ }
+
+ public void setCookieDir(String s) {
+ config.setProperty(COOKIE_DIR, s);
+ }
/*
* ネットワーク - プロキシ
*/
package yukihane.inqubus.config;
+import java.util.HashMap;
+import java.util.Map;
import org.apache.commons.lang.builder.ToStringBuilder;
+import saccubus.net.Cookie;
import saccubus.worker.profile.LoginProfile;
+import yukihane.inqubus.config.Config.CookieBrowser;
/**
* コンフィグに設定された値を基にしたLoginProfile実装.
*/
public class ConfigLoginProfile implements LoginProfile {
+ private final boolean login;
private final String mail;
private final String password;
+ private final Map<String, String> cookies;
public ConfigLoginProfile() {
final Config p = Config.INSTANCE;
+ this.login = p.getNeedsLogin();
this.mail = p.getId();
this.password = p.getPassword();
+
+ final CookieBrowser cookieBrowser = p.getCookieBrowser();
+ final String cookieDir = p.getCookieDir();
+ final Cookie cookie = Cookie.create(cookieBrowser.toBrowserType(), cookieDir);
+ this.cookies = new HashMap<>(cookie.get());
+ }
+
+ @Override
+ public boolean needsLogin() {
+ return this.login;
}
@Override
}
@Override
+ public Map<String, String> getCookies() {
+ return new HashMap<>(this.cookies);
+ }
+
+ @Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
import saccubus.worker.profile.LoginProfile;
import yukihane.inqubus.config.ConfigCommentProfile;
import yukihane.inqubus.config.ConfigDownloadProfile;
+import yukihane.inqubus.config.ConfigLoginProfile;
/**
* さきゅばすのコマンドプロンプト仕様にあわせるためのDownloadProfile実装
private final CommentProfile commentProfile;
DownloadProfileImpl(final String mail, final String pass, final long time) {
- this.loginProfile = new LoginProfile() {
+ this.loginProfile = new ConfigLoginProfile() {
@Override
public String getMail() {