import java.io.File;
import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* ニコニコ動画のクッキーを扱うための基本クラスです.
*/
public abstract class Cookie {
+ private static final Logger logger = LoggerFactory.getLogger(Cookie.class);
private static final Pattern USER_SESSION_PATTERN = Pattern.compile("user_session_[\\d_]+");
public enum BrowserType {
}
/**
+ * cookieをmapで返します.
+ * @return cookie.
+ */
+ public Map<String, String> get() {
+ final Map<String, String> map = new HashMap<>();
+ try {
+ final String userSessionStr = getNicoUserSession();
+ if (StringUtils.isNotEmpty(userSessionStr)) {
+ map.put("user_session", userSessionStr);
+ }
+ } catch (IOException ex) {
+ logger.warn("cookieファイル読み込み失敗", ex);
+ }
+ return map;
+ }
+
+ /**
* ニコニコ動画ユーザセッション文字列を取得します.
* @return ユーザセッション文字列. 無ければ空文字列.
* @throws IOException cookie読み込み中のエラー.
*/
- public abstract String getNicoUserSession() throws IOException;
+ protected abstract String getNicoUserSession() throws IOException;
/**
* クッキーファイルを見つけて user_session を返す.
* 指定されたディレクトリのcookieを扱います.
* @author yuki
*/
-public class CookieDefault extends Cookie {
+class CookieDefault extends Cookie {
private final File fileOrDir;
- public CookieDefault(File fileOrDir) {
+ CookieDefault(File fileOrDir) {
this.fileOrDir = fileOrDir;
}
@Override
- public String getNicoUserSession() throws IOException {
+ protected String getNicoUserSession() throws IOException {
return getUserSession("UTF-8", fileOrDir);
}
}
* @author orz (saccubus)
* @author yuki
*/
-public class CookieWinChromium extends Cookie {
+class CookieWinChromium extends Cookie {
private static final String CHROMIUM_PATH = "/Chromium/User Data/Default/Cookies";
@Override
- public String getNicoUserSession() throws IOException {
+ protected String getNicoUserSession() throws IOException {
final String localAppData = System.getenv("LOCALAPPDATA");
if (StringUtils.isNotEmpty(localAppData)) {
// Win7 32bit
* @author orz (saccubus)
* @author yuki
*/
-public class CookieWinCrome extends Cookie {
+class CookieWinCrome extends Cookie {
private static final Logger logger = LoggerFactory.getLogger(CookieWinCrome.class);
private static final String COOKIE_PATH = "/Google/Chrome/User Data/Default/Cookies";
* @return user_session
*/
@Override
- public String getNicoUserSession() throws IOException {
+ protected String getNicoUserSession() throws IOException {
final List<File> alters = new ArrayList<>();
// Win7
* @deprecated ユーザプロファイルを切り替える設定を行っている場合にはおそらくうまく動きません.
*/
@Deprecated
-public class CookieWinFirefox3 extends Cookie {
+class CookieWinFirefox3 extends Cookie {
/**
* Firefox3 から user_session を取得。
* @throws IOException 取得失敗.
*/
@Override
- public String getNicoUserSession() throws IOException {
+ protected String getNicoUserSession() throws IOException {
final String appData = System.getenv("APPDATA");
if (StringUtils.isNotEmpty(appData)) {
File sqlist_filename = new File(appData + "/Mozilla/Firefox/Profiles/cookies.sqlite");
* @author orz (saccubus)
* @author yuki
*/
-public class CookieWinMsIe extends Cookie {
+class CookieWinMsIe extends Cookie {
/** <p>
* IE7/IE8/IE9 から user_session を取得。<br/>
* @return user_session
*/
@Override
- public String getNicoUserSession() throws IOException {
+ protected String getNicoUserSession() throws IOException {
final String userProfile = System.getenv("USERPROFILE");
* @author orz (saccubus)
* @author yuki
*/
-public class CookieWinOpera extends Cookie {
+class CookieWinOpera extends Cookie {
/**
* Opera から user_session を取得。
* @throws IOException 取得失敗.
*/
@Override
- public String getNicoUserSession() throws IOException {
+ protected String getNicoUserSession() throws IOException {
final String appData = System.getenv("APPDATA");
if (StringUtils.isNotEmpty(appData)) {