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;
+ }
+
+}