Browse Source

1,完善网页解析操作

YIN-PC\yin 7 năm trước cách đây
mục cha
commit
1bc7b094b2

+ 2 - 2
app/build.gradle

@@ -56,8 +56,8 @@ dependencies {
     implementation 'com.android.support:appcompat-v7:27.1.1'
     implementation 'com.android.support.constraint:constraint-layout:1.1.0'
     testImplementation 'junit:junit:4.12'
-    androidTestImplementation 'com.android.support.test:runner:1.0.1'
-    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
+    androidTestImplementation 'com.android.support.test:runner:1.0.2'
+    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
     implementation 'org.jsoup:jsoup:1.11.2'
     implementation 'com.google.code.gson:gson:2.8.2'
     implementation 'com.google.guava:guava:23.5-android'

+ 22 - 0
app/src/main/java/top/yinxueqin/readbook/bean/SearchResult.java

@@ -13,6 +13,10 @@ public class SearchResult {
 
     private SparseArray<String> bookLink;
     private SparseArray<String> bookNewestChapter;
+    //错误代码
+    private int errorCode = 1000;
+    //错误原因
+    private String errorMessage = "正常";
 
     public SparseArray<String> getBookLink() {
         return bookLink;
@@ -30,11 +34,29 @@ public class SearchResult {
         this.bookNewestChapter = bookNewestChapter;
     }
 
+    public int getErrorCode() {
+        return errorCode;
+    }
+
+    public void setErrorCode(int errorCode) {
+        this.errorCode = errorCode;
+    }
+
+    public String getErrorMessage() {
+        return errorMessage;
+    }
+
+    public void setErrorMessage(String errorMessage) {
+        this.errorMessage = errorMessage;
+    }
+
     @Override
     public String toString() {
         return "SearchResult{" +
                 "bookLink=" + bookLink +
                 ", bookNewestChapter=" + bookNewestChapter +
+                ", errorCode=" + errorCode +
+                ", errorMessage='" + errorMessage + '\'' +
                 '}';
     }
 }

+ 20 - 30
app/src/main/java/top/yinxueqin/readbook/data/remote/GetBookInfo.java

@@ -18,19 +18,17 @@ import top.yinxueqin.readbook.utils.ErrorCodeConstants;
  * Effect: 获取书籍信息
  */
 
-public class GetBookInfo implements BookWeb{
+public class GetBookInfo{
 
-
-
-    @Override
-    public BookInfo getBookInfo(@NonNull String url) throws IOException {
+    @NonNull
+    protected BookInfo getBookInfo(@NonNull String url) throws IOException {
         BookInfo bookInfo = new BookInfo();
         if (url != null && url.length() > 0) {
             if ( url.contains("m.qu.la") ) {
-                Biquge biquge = Biquge.getInstance();
+                BookWeb biquge = Biquge.getInstance();
                 return biquge.getBookInfo(url);
             } else if ( url.contains("m.book9.net") ) {
-                BookNext9 bookNext9 = BookNext9.getInstance();
+                BookWeb bookNext9 = BookNext9.getInstance();
                 return bookNext9.getBookInfo(url);
             } else {
                 bookInfo.setErrorCode(ErrorCodeConstants.THIS_SITE_IS_NOT_SUPPORTED);
@@ -43,14 +41,15 @@ public class GetBookInfo implements BookWeb{
         return bookInfo;
     }
 
-    @Override
-    public BookInfo getBookUpdateTimeAndNewestChapter(@NonNull BookInfo bookInfo, @NonNull String url) throws IOException {
+
+    @NonNull
+    protected BookInfo getBookUpdateTimeAndNewestChapter(@NonNull BookInfo bookInfo, @NonNull String url) throws IOException {
         if (url != null && url.length() > 0) {
             if ( url.contains("m.qu.la") ) {
-                Biquge biquge = Biquge.getInstance();
+                BookWeb biquge = Biquge.getInstance();
                 return biquge.getBookUpdateTimeAndNewestChapter(bookInfo, url);
             } else if ( url.contains("m.book9.net") ) {
-                BookNext9 bookNext9 = BookNext9.getInstance();
+                BookWeb bookNext9 = BookNext9.getInstance();
                 return bookNext9.getBookUpdateTimeAndNewestChapter(bookInfo, url);
             } else {
                 bookInfo.setErrorCode(ErrorCodeConstants.THIS_SITE_IS_NOT_SUPPORTED);
@@ -63,14 +62,15 @@ public class GetBookInfo implements BookWeb{
         return bookInfo;
     }
 
-    @Override
-    public BookInfo getBookChapterList(@NonNull BookInfo bookInfo, @NonNull String url) throws IOException {
+
+    @NonNull
+    protected BookInfo getBookChapterList(@NonNull BookInfo bookInfo, @NonNull String url) throws IOException {
         if (url != null && url.length() > 0) {
             if ( url.contains("m.qu.la") ) {
-                Biquge biquge = Biquge.getInstance();
+                BookWeb biquge = Biquge.getInstance();
                 return biquge.getBookChapterList(bookInfo, url);
             } else if ( url.contains("m.book9.net") ) {
-                BookNext9 bookNext9 = BookNext9.getInstance();
+                BookWeb bookNext9 = BookNext9.getInstance();
                 return bookNext9.getBookChapterList(bookInfo, url);
             } else {
                 bookInfo.setErrorCode(ErrorCodeConstants.THIS_SITE_IS_NOT_SUPPORTED);
@@ -83,15 +83,16 @@ public class GetBookInfo implements BookWeb{
         return bookInfo;
     }
 
-    @Override
-    public ChapterInfo getChapterContent(@NonNull String url) throws IOException {
+
+    @NonNull
+    protected ChapterInfo getChapterContent(@NonNull String url) throws IOException {
         ChapterInfo chapterInfo = new ChapterInfo();
         if (url != null && url.length() > 0) {
             if ( url.contains("m.qu.la") ) {
-                Biquge biquge = Biquge.getInstance();
+                BookWeb biquge = Biquge.getInstance();
                 return biquge.getChapterContent(url);
             } else if ( url.contains("m.book9.net") ) {
-                BookNext9 bookNext9 = BookNext9.getInstance();
+                BookWeb bookNext9 = BookNext9.getInstance();
                 return bookNext9.getChapterContent(url);
             } else {
                 chapterInfo.setErrorCode(ErrorCodeConstants.THIS_SITE_IS_NOT_SUPPORTED);
@@ -103,15 +104,4 @@ public class GetBookInfo implements BookWeb{
         }
         return chapterInfo;
     }
-
-    /**
-     * 检测书架的书是否更新章节
-     * @param bookInfo
-     * @param url
-     * @return
-     * @throws IOException
-     */
-    public BookInfo checkUpdate(@NonNull BookInfo bookInfo, @NonNull String url) throws IOException {
-        return null;
-    }
 }

+ 41 - 1
app/src/main/java/top/yinxueqin/readbook/data/remote/GetSearchInfo.java

@@ -1,5 +1,17 @@
 package top.yinxueqin.readbook.data.remote;
 
+import android.support.annotation.NonNull;
+
+import java.io.IOException;
+
+import top.yinxueqin.readbook.bean.SearchResult;
+import top.yinxueqin.readbook.data.remote.search.Baidu;
+import top.yinxueqin.readbook.data.remote.search.Google;
+import top.yinxueqin.readbook.data.remote.search.SearchWeb;
+import top.yinxueqin.readbook.data.remote.search.Shenma;
+import top.yinxueqin.readbook.utils.Constants;
+import top.yinxueqin.readbook.utils.ErrorCodeConstants;
+
 /**
  * Author: yin
  * Time: 2017/11/29.
@@ -7,6 +19,34 @@ package top.yinxueqin.readbook.data.remote;
  * Effect: 获取搜索结果
  */
 
-public class GetSearchInfo {
+public class GetSearchInfo{
+
+    /**
+     *
+     * @param key 搜索关键字
+     * @param searchType 搜索引擎的类型 1:百度,2:谷歌,3:神马
+     * @return 搜索结果
+     * @throws IOException 网页解析异常
+     */
+    @NonNull
+    protected SearchResult searchResult(@NonNull String key, int searchType) throws IOException {
+        switch (searchType) {
+            case Constants.M_BAIDU_COM:
+                SearchWeb baidu = new Baidu();
+                return baidu.searchResult(key);
+            case Constants.WWW_GOOGLE_COM_HK:
+                SearchWeb google = new Google();
+                return google.searchResult(key);
+            case Constants.YZ_M_SM_CN:
+                SearchWeb shenma = new Shenma();
+                return shenma.searchResult(key);
+            default:
+                SearchResult searchResult = new SearchResult();
+                searchResult.setErrorCode(ErrorCodeConstants.THIS_SOS_IS_NOT_SUPPORTED);
+                searchResult.setErrorMessage(ErrorCodeConstants.getErrorMessage(searchResult.getErrorCode()));
+                return searchResult;
+        }
+    }
+
 
 }

+ 76 - 0
app/src/main/java/top/yinxueqin/readbook/data/remote/GetUiBookSearchResult.java

@@ -1,5 +1,13 @@
 package top.yinxueqin.readbook.data.remote;
 
+import android.support.annotation.NonNull;
+
+import java.io.IOException;
+
+import top.yinxueqin.readbook.bean.BookInfo;
+import top.yinxueqin.readbook.bean.ChapterInfo;
+import top.yinxueqin.readbook.bean.SearchResult;
+
 /**
  * Author: yin
  * Time: 2017/11/29.
@@ -9,4 +17,72 @@ package top.yinxueqin.readbook.data.remote;
 
 public class GetUiBookSearchResult {
 
+    private GetBookInfo getBookInfo;
+    private GetSearchInfo getSearchInfo;
+
+    private static class GetUiBookSearchResultHolder {
+        private static final GetUiBookSearchResult INSTANCE = new GetUiBookSearchResult();
+    }
+
+    private GetUiBookSearchResult (){
+        getBookInfo = new GetBookInfo();
+        getSearchInfo = new GetSearchInfo();
+    }
+
+    public static final GetUiBookSearchResult getInstance() {
+        return GetUiBookSearchResult.GetUiBookSearchResultHolder.INSTANCE;
+    }
+
+    /**
+     * 获取书的基本信息(书名,作者,封面地址,最新章节名,最新章节更新时间)
+     * @param url 书的网址
+     * @return 书的信息
+     * @throws IOException 网页解析异常
+     */
+    public BookInfo getBookInfo(@NonNull String url) throws IOException {
+        return getBookInfo.getBookInfo(url);
+    }
+
+    /**
+     * 获取书的最新章节更新时间和章节名
+     * @param url 地址
+     * @param bookInfo 书的信息
+     * @return 书的信息
+     * @throws IOException 网页解析异常
+     */
+    public BookInfo getBookUpdateTimeAndNewestChapter(@NonNull BookInfo bookInfo, @NonNull String url) throws IOException {
+        return getBookInfo.getBookUpdateTimeAndNewestChapter(bookInfo, url);
+    }
+
+    /**
+     * 获取书的目录
+     * @param bookInfo 书的信息
+     * @param url 书的地址
+     * @return 书的信息
+     * @throws IOException 网页解析异常
+     */
+    public BookInfo getBookChapterList(@NonNull BookInfo bookInfo, @NonNull String url) throws IOException {
+        return getBookInfo.getBookChapterList(bookInfo, url);
+    }
+
+    /**
+     * 获取章节内容
+     * @param url 章节地址
+     * @return 章节信息
+     * @throws IOException 网页解析异常
+     */
+    public ChapterInfo getChapterContent(@NonNull String url) throws IOException {
+        return getBookInfo.getChapterContent(url);
+    }
+
+    /**
+     *
+     * @param key 搜索关键字
+     * @param searchType 搜索引擎的类型 1:百度,2:谷歌,3:神马
+     * @return 搜索结果
+     * @throws IOException 网页解析异常
+     */
+    public SearchResult searchResult(@NonNull String key, int searchType) throws IOException {
+        return getSearchInfo.searchResult(key, searchType);
+    }
 }

+ 4 - 4
app/src/main/java/top/yinxueqin/readbook/data/remote/book/Biquge.java

@@ -40,7 +40,7 @@ public class Biquge implements BookWeb {
      * 获取书的基本信息(书名,作者,封面地址,最新章节名,最新章节更新时间)
      * @param url 书的网址
      * @return 书的信息
-     * @throws IOException IO异常
+     * @throws IOException 网页解析异常
      */
     @Override
     @NonNull
@@ -80,7 +80,7 @@ public class Biquge implements BookWeb {
      * @param url 地址
      * @param bookInfo 书的信息
      * @return 书的信息
-     * @throws IOException IO异常
+     * @throws IOException 网页解析异常
      */
     @Override
     @NonNull
@@ -111,7 +111,7 @@ public class Biquge implements BookWeb {
      * @param bookInfo 书的信息
      * @param url 书的地址
      * @return 书的信息
-     * @throws IOException IO异常
+     * @throws IOException 网页解析异常
      */
     @Override
     @NonNull
@@ -159,7 +159,7 @@ public class Biquge implements BookWeb {
      * 获取章节内容
      * @param url 章节地址
      * @return 章节信息
-     * @throws IOException IO异常
+     * @throws IOException 网页解析异常
      */
     @Override
     @NonNull

+ 4 - 4
app/src/main/java/top/yinxueqin/readbook/data/remote/book/BookWeb.java

@@ -20,7 +20,7 @@ public interface BookWeb {
      * 获取书的基本信息(书名,封面地址,最新章节名,最新章节更新时间)
      * @param url 书的网址
      * @return 书的信息
-     * @throws IOException IO异常
+     * @throws IOException 网页解析异常
      */
     BookInfo getBookInfo(@NonNull String url) throws IOException;
 
@@ -29,7 +29,7 @@ public interface BookWeb {
      * @param url 地址
      * @param bookInfo 书的信息
      * @return 书的信息
-     * @throws IOException IO异常
+     * @throws IOException 网页解析异常
      */
     BookInfo getBookUpdateTimeAndNewestChapter(@NonNull BookInfo bookInfo, @NonNull String url) throws IOException;
 
@@ -38,7 +38,7 @@ public interface BookWeb {
      * @param bookInfo 书的信息
      * @param url 书的地址
      * @return 书的信息
-     * @throws IOException IO异常
+     * @throws IOException 网页解析异常
      */
     BookInfo getBookChapterList(@NonNull BookInfo bookInfo, @NonNull String url) throws IOException;
 
@@ -46,7 +46,7 @@ public interface BookWeb {
      * 获取章节内容
      * @param url 章节地址
      * @return 章节信息
-     * @throws IOException IO异常
+     * @throws IOException 网页解析异常
      */
     ChapterInfo getChapterContent(@NonNull String url) throws IOException;
 }

+ 10 - 1
app/src/main/java/top/yinxueqin/readbook/data/remote/search/Baidu.java

@@ -1,5 +1,9 @@
 package top.yinxueqin.readbook.data.remote.search;
 
+import java.io.IOException;
+
+import top.yinxueqin.readbook.bean.SearchResult;
+
 /**
  * Author: yin
  * Time: 2017/11/20.
@@ -7,5 +11,10 @@ package top.yinxueqin.readbook.data.remote.search;
  * Effect: TODO
  */
 
-public class Baidu {
+public class Baidu implements SearchWeb{
+
+    @Override
+    public SearchResult searchResult(String key) throws IOException {
+        return null;
+    }
 }

+ 9 - 1
app/src/main/java/top/yinxueqin/readbook/data/remote/search/Google.java

@@ -1,5 +1,9 @@
 package top.yinxueqin.readbook.data.remote.search;
 
+import java.io.IOException;
+
+import top.yinxueqin.readbook.bean.SearchResult;
+
 /**
  * Author: yin
  * Time: 2017/11/20.
@@ -7,6 +11,10 @@ package top.yinxueqin.readbook.data.remote.search;
  * Effect: TODO
  */
 
-public class Google {
+public class Google implements SearchWeb{
 
+    @Override
+    public SearchResult searchResult(String key) throws IOException {
+        return null;
+    }
 }

+ 1 - 1
app/src/main/java/top/yinxueqin/readbook/data/remote/search/SearchWeb.java

@@ -16,7 +16,7 @@ public interface SearchWeb {
     /**
      * 搜索结果
      * @param key 搜索关键字
-     * @throws IOException IO异常
+     * @throws IOException 网页解析异常
      */
     SearchResult searchResult(String key) throws IOException;
 }

+ 7 - 7
app/src/main/java/top/yinxueqin/readbook/data/remote/search/Shenma.java

@@ -31,11 +31,11 @@ public class Shenma implements SearchWeb{
     /**
      * 搜索结果
      * @param key 搜索关键字
-     * @throws IOException IO异常
+     * @throws IOException 网页解析异常
      */
     @Override
     @NonNull
-    public SearchResult searchResult(String key) throws IOException {
+    public SearchResult searchResult(@NonNull String key) throws IOException {
         searchFirstPageResult(key);
         for (int i = 2; i <= 4; i++) {
             searchNextPageResult(key, i);
@@ -52,9 +52,9 @@ public class Shenma implements SearchWeb{
     /**
      * 首页搜索结果
      * @param key 搜索关键字
-     * @throws IOException IO异常
+     * @throws IOException 网页解析异常
      */
-    private void searchFirstPageResult(String key) throws IOException {
+    private void searchFirstPageResult(@NonNull String key) throws IOException {
 
         bookLinks.clear();
         bookNewestChapter.clear();
@@ -118,9 +118,9 @@ public class Shenma implements SearchWeb{
      * 翻页
      * @param key 搜索关键字
      * @param page 页码
-     * @throws IOException IO异常
+     * @throws IOException 网页解析异常
      */
-    private void searchNextPageResult(String key, int page) throws IOException {
+    private void searchNextPageResult(@NonNull String key, int page) throws IOException {
         Document doc = Jsoup.connect("https://yz.m.sm.cn/s?q=" + key + "&by=next&layout=html&page=" + page)
                 .header("User-Agent", Constants.USER_AGENT)
                 .header("Referer", "https://yz.m.sm.cn/s?q=" + key)
@@ -157,7 +157,7 @@ public class Shenma implements SearchWeb{
      * 后3页结果
      * @param key 搜索关键字
      * @param page 页码
-     * @throws IOException IO异常
+     * @throws IOException 网页解析异常
      */
     private void searchlastThreePageResult(String key, int page) throws IOException {
         Document doc = Jsoup.connect("https://yz.m.sm.cn/s?q=" + key + "&by=next&layout=html&page=" + page)

+ 3 - 0
app/src/main/java/top/yinxueqin/readbook/utils/ErrorCodeConstants.java

@@ -19,6 +19,8 @@ public class ErrorCodeConstants {
     public static final int URL_ADDRESS_IS_NULL = 1001;
     //不支持当前网站解析
     public static final int THIS_SITE_IS_NOT_SUPPORTED = 1002;
+    //不支持当前搜索引擎
+    public static final int THIS_SOS_IS_NOT_SUPPORTED = 1003;
 
 
     //没有预定义此错误
@@ -38,5 +40,6 @@ public class ErrorCodeConstants {
         errorMap.put(URL_ADDRESS_IS_NULL, "URL地址为空");
         errorMap.put(THIS_SITE_IS_NOT_SUPPORTED, "不支持当前网站解析");
         errorMap.put(UNDEFINED_ERROR, "未定义错误");
+        errorMap.put(THIS_SOS_IS_NOT_SUPPORTED, "不支持当前搜索引擎");
     }
 }