From 5925cba33866d496ea1efa9f9c4727a382a2b576 Mon Sep 17 00:00:00 2001 From: LamGC Date: Mon, 27 Jul 2020 23:00:49 +0800 Subject: [PATCH] =?UTF-8?q?[Add]=20=E5=A2=9E=E5=8A=A0PixivSearchLinkBuilde?= =?UTF-8?q?r=E4=B8=AD=E5=86=85=E9=83=A8=E5=B1=9E=E6=80=A7=E7=9A=84getter,?= =?UTF-8?q?=20=E5=A2=9E=E5=8A=A0Pixiv=E5=B7=A5=E5=85=B7=E7=B1=BB;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [Update] PixivSearchAttribute 补充Javadoc; [Add] PixivSearchLinkBuilder 增加大部分属性的getter方法; [Add] PixivUtils 增加Pixiv工具类, 并添加通过字符串参数构造PixivSearchLinkBuilder的方法; --- .../lamgc/cgj/pixiv/PixivSearchAttribute.java | 4 + .../cgj/pixiv/PixivSearchLinkBuilder.java | 54 +++++++++++- .../java/net/lamgc/cgj/util/PixivUtils.java | 84 +++++++++++++++++++ 3 files changed, 139 insertions(+), 3 deletions(-) create mode 100644 src/main/java/net/lamgc/cgj/util/PixivUtils.java diff --git a/src/main/java/net/lamgc/cgj/pixiv/PixivSearchAttribute.java b/src/main/java/net/lamgc/cgj/pixiv/PixivSearchAttribute.java index 85aba20..029e2ea 100644 --- a/src/main/java/net/lamgc/cgj/pixiv/PixivSearchAttribute.java +++ b/src/main/java/net/lamgc/cgj/pixiv/PixivSearchAttribute.java @@ -1,5 +1,9 @@ package net.lamgc.cgj.pixiv; +/** + * 搜索结果的属性枚举类. + *

按照请求的{@link PixivSearchLinkBuilder.SearchArea}获取所支持的属性数组

+ */ public enum PixivSearchAttribute { ARTWORKS("illustManga"), diff --git a/src/main/java/net/lamgc/cgj/pixiv/PixivSearchLinkBuilder.java b/src/main/java/net/lamgc/cgj/pixiv/PixivSearchLinkBuilder.java index 1a37852..cb330d8 100644 --- a/src/main/java/net/lamgc/cgj/pixiv/PixivSearchLinkBuilder.java +++ b/src/main/java/net/lamgc/cgj/pixiv/PixivSearchLinkBuilder.java @@ -8,6 +8,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashSet; import java.util.Objects; +import java.util.Set; /** * Pixiv搜索URL构造器 @@ -26,8 +27,8 @@ public class PixivSearchLinkBuilder { private SearchOrder searchOrder = SearchOrder.DATE_D; private SearchContentOption searchContentOption = SearchContentOption.ALL; - private final HashSet includeKeywords = new HashSet<>(0); - private final HashSet excludeKeywords = new HashSet<>(0); + private final Set includeKeywords = new HashSet<>(0); + private final Set excludeKeywords = new HashSet<>(0); private int page = 1; @@ -161,11 +162,19 @@ public class PixivSearchLinkBuilder { '}'; } + public String getContent() { + return content; + } + public PixivSearchLinkBuilder setSearchArea(SearchArea searchArea) { this.searchArea = Objects.requireNonNull(searchArea); return this; } + public SearchArea getSearchArea() { + return searchArea; + } + /** * 获取搜索条件. * @return 搜索条件内容 @@ -199,32 +208,60 @@ public class PixivSearchLinkBuilder { return this; } + public SearchMode getSearchMode() { + return searchMode; + } + public PixivSearchLinkBuilder setSearchType(SearchType searchType) { this.searchType = Objects.requireNonNull(searchType); return this; } + public SearchType getSearchType() { + return searchType; + } + public PixivSearchLinkBuilder setSearchOrder(SearchOrder searchOrder) { this.searchOrder = Objects.requireNonNull(searchOrder); return this; } + public SearchOrder getSearchOrder() { + return searchOrder; + } + public PixivSearchLinkBuilder setSearchContentOption(SearchContentOption searchContentOption) { this.searchContentOption = Objects.requireNonNull(searchContentOption); return this; } + public SearchContentOption getSearchContentOption() { + return searchContentOption; + } + public PixivSearchLinkBuilder setRatioOption(RatioOption ratioOption) { this.ratioOption = Objects.requireNonNull(ratioOption); return this; } + public RatioOption getRatioOption() { + return ratioOption; + } + public PixivSearchLinkBuilder setDateRange(Date startDate, Date endDate) { this.startDate = startDate; this.endDate = endDate; return this; } + public Date getStartDate() { + return startDate; + } + + public Date getEndDate() { + return endDate; + } + public PixivSearchLinkBuilder setMaxSize(int width, int height) { this.wgt = width; this.hgt = height; @@ -245,6 +282,10 @@ public class PixivSearchLinkBuilder { return this; } + public int getPage() { + return page; + } + public PixivSearchLinkBuilder addExcludeKeyword(String keyword) { excludeKeywords.add(keyword); return this; @@ -265,6 +306,14 @@ public class PixivSearchLinkBuilder { return this; } + public Set getIncludeKeywords() { + return new HashSet<>(includeKeywords); + } + + public Set getExcludeKeywords() { + return new HashSet<>(excludeKeywords); + } + /** * 搜索区域 */ @@ -406,5 +455,4 @@ public class PixivSearchLinkBuilder { } - } diff --git a/src/main/java/net/lamgc/cgj/util/PixivUtils.java b/src/main/java/net/lamgc/cgj/util/PixivUtils.java new file mode 100644 index 0000000..e4d0498 --- /dev/null +++ b/src/main/java/net/lamgc/cgj/util/PixivUtils.java @@ -0,0 +1,84 @@ +package net.lamgc.cgj.util; + +import com.google.common.base.Strings; +import net.lamgc.cgj.pixiv.PixivSearchLinkBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Pixiv工具类 + */ +public final class PixivUtils { + + private final static Logger log = LoggerFactory.getLogger(PixivUtils.class); + + private PixivUtils() {} + + /** + * 快速构造一个PixivSearchLinkBuilder + * @param content 搜索内容 + * @param type 搜索类型 + * @param area 搜索范围 + * @param includeKeywords 包含关键词 + * @param excludeKeywords 排除关键词 + * @param contentOption 内容级别选项 + * @param pageIndex 搜索页数 + * @return 返回PixivSearchLinkBuilder对象 + * @see PixivSearchLinkBuilder + */ + public static PixivSearchLinkBuilder buildSearchLinkBuilderFromString( + String content, + String type, + String area, + String includeKeywords, + String excludeKeywords, + String contentOption, + int pageIndex + ) { + PixivSearchLinkBuilder searchBuilder = new PixivSearchLinkBuilder(Strings.isNullOrEmpty(content) ? "" : content); + if (type != null) { + try { + searchBuilder.setSearchType(PixivSearchLinkBuilder.SearchType.valueOf(type.toUpperCase())); + } catch (IllegalArgumentException e) { + log.warn("不支持的SearchType: {}", type); + } + } + if (area != null) { + try { + searchBuilder.setSearchArea(PixivSearchLinkBuilder.SearchArea.valueOf(area)); + } catch (IllegalArgumentException e) { + log.warn("不支持的SearchArea: {}", area); + } + } + if (contentOption != null) { + try { + searchBuilder.setSearchContentOption( + PixivSearchLinkBuilder.SearchContentOption.valueOf(contentOption.trim().toUpperCase())); + } catch (IllegalArgumentException e) { + log.warn("不支持的SearchContentOption: {}", contentOption); + } + } + + if (!Strings.isNullOrEmpty(includeKeywords)) { + for (String keyword : includeKeywords.split(";")) { + searchBuilder.removeExcludeKeyword(keyword.trim()); + searchBuilder.addIncludeKeyword(keyword.trim()); + log.trace("已添加关键字: {}", keyword); + } + } + if (!Strings.isNullOrEmpty(excludeKeywords)) { + for (String keyword : excludeKeywords.split(";")) { + searchBuilder.removeIncludeKeyword(keyword.trim()); + searchBuilder.addExcludeKeyword(keyword.trim()); + log.trace("已添加排除关键字: {}", keyword); + } + } + + if(pageIndex > 0) { + searchBuilder.setPage(pageIndex); + } + + return searchBuilder; + } + +}