4 import java.io.IOException;
5 import java.util.regex.Matcher;
6 import java.util.regex.Pattern;
7 import org.apache.commons.io.FileUtils;
8 import org.apache.commons.lang.StringUtils;
14 public abstract class Cookie {
16 private static final Pattern USER_SESSION_PATTERN = Pattern.compile("user_session_[\\d_]+");
18 public enum BrowserType {
20 MSIE, FIREFOX, CHROME, CHROMIUM, OPERA, OTHER
23 public static Cookie create(BrowserType type, String dir) {
26 return new CookieWinMsIe();
28 return new CookieWinFirefox4();
30 return new CookieWinCrome();
32 return new CookieWinChromium();
34 return new CookieWinOpera();
36 final File f = new File(dir);
37 return new CookieDefault(f);
41 public abstract String getUserSessionString() throws IOException;
44 * クッキーファイルを見つけて user_session を返す.
45 * @param cookieFileOrDirs cookieが保存されたディレクトリの候補, あるいはcookieファイルの候補.
46 * @return ユーザセッション文字列. 無ければnull.
48 protected final String getUserSession(String charsetName, File... cookieFileOrDirs) throws IOException {
49 for (File file : cookieFileOrDirs) {
50 if (file.isDirectory()) {
51 File[] files = file.listFiles();
52 for (File cookieFile : files) {
53 if (cookieFile.isFile()) {
54 final String userSession = cutUserSession(cookieFile, charsetName);
55 if (StringUtils.isNotEmpty(userSession)) {
60 } else if (file.isFile()) {
61 final String userSession = cutUserSession(file, charsetName);
62 if (StringUtils.isNotEmpty(userSession)) {
72 * 文字列から user_session_ で始まる文字列を切り出して返す。数字とアンダーバー以外の文字で切れる。
73 * @param cookieStr 切り出す対象文字列
74 * @return user_session 文字列。見つからなければnull。
76 protected final String getUserSession(final String cookieStr) {
77 final Matcher mather = USER_SESSION_PATTERN.matcher(cookieStr);
78 if (mather.lookingAt()) {
79 return mather.group(1);
84 private String cutUserSession(File cookieFile, String charsetName) throws IOException {
85 final String str = FileUtils.readFileToString(cookieFile, charsetName);
86 return getUserSession(str);