Java|クローラーかどうか判別する
なにがしたい
サイトへアクセスしたユーザーエージェントがクローラーのものか判断する。
実装
/** * 例外対応するクローラーUAリスト */ public static final ArrayList<String> CRAWLER_UA = ImmutableList.of("Googlebot", "Yahoo!", "bingbot", "Yeti", "Baidu", "YandexBot"); // クローラUAの判定 if (isNotCrawlerUa(userAgent, crawlerUas)) { // アフィリエイトリダイレクト StringBuilder redirectUrl = new StringBuilder(AFFILIATE_SERVER_URL); redirectUrl.append(URLEncoder.encode(Base64Util.encode(requestUrl.toString().getBytes()), ENCODE_UTF8)); ((HttpServletResponse) response).setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); ((HttpServletResponse) response).setHeader("Location", redirectUrl.toString()); } else { ((HttpServletResponse) response).setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); String redirectUrl = requestUrl.toString().replaceAll("([^=/]+)-(\\d{3})[/]*$", ""); ((HttpServletResponse) response).setHeader("Location", redirectUrl); } /** * クローラーUA判定メソッド * クローラーでなければTrueを返却 */ public boolean isNotCrawlerUa(String userAgent, List<String> crawlerUas) { for (String crawlerUa : crawlerUas) if (userAgent.toLowerCase().contains(crawlerUa.toLowerCase())) { return false; } return true; }