更新书源

pull/5/head v1.8.1
fengyuecanzhu 4 years ago
parent b0e5d75e9d
commit 9b6334bab6
  1. 9
      README.md
  2. 11
      app/src/main/assets/updatelog.fy
  3. 8
      app/src/main/java/xyz/fycz/myreader/application/MyApplication.java
  4. 1
      app/src/main/java/xyz/fycz/myreader/application/SysManager.java
  5. 3
      app/src/main/java/xyz/fycz/myreader/enums/BookSource.java
  6. 1
      app/src/main/java/xyz/fycz/myreader/ui/activity/BookDetailedActivity.java
  7. 4
      app/src/main/java/xyz/fycz/myreader/ui/fragment/FindFragment.java
  8. 132
      app/src/main/java/xyz/fycz/myreader/webapi/crawler/read/BiJianReadCrawler.java
  9. 2
      app/src/main/java/xyz/fycz/myreader/webapi/crawler/read/MiQuReadCrawler.java
  10. 135
      app/src/main/java/xyz/fycz/myreader/webapi/crawler/read/WoLongReadCrawler.java
  11. 165
      app/src/main/java/xyz/fycz/myreader/webapi/crawler/read/YanQingLouReadCrawler.java
  12. 8
      app/src/main/res/layout/fragment_find.xml
  13. 3
      app/src/main/res/values/strings.xml
  14. 3
      app/src/main/resources/crawler.properties
  15. 4
      app/version_code.properties

@ -2,20 +2,21 @@
风月读书,一款开源、无广告的小说阅读软件。
成品下载(v1.8.0):[https://fycz.lanzous.com/i4pMekkx9zc](https://fycz.lanzous.com/i4pMekkx9zc)
成品下载(v1.8.1):[https://fycz.lanzous.com/i5vu3l6pcuj](https://fycz.lanzous.com/i5vu3l6pcuj)
[更新日志](./app/src/main/assets/updatelog.fy)
#### 一、关于书源
* 软件内置了25个书源如下:
* 软件内置了~~28~~(25)个书源如下:
* 23个网络小说书源:天籁小说、笔趣阁44、~~品书网~~、笔趣阁、
* ~~26~~(23)个网络小说书源:天籁小说、笔趣阁44、~~品书网~~、笔趣阁、
全本小说、米趣小说、九桃小说、云中书库、
搜小说网、全小说网、~~奇奇小说~~、妙笔阁、
丹书铁券、小说旗、读一读网、飘天文学、
老幺小说、星星小说、时光小说、峡谷文学、
红尘小说、~~热血小说~~、传奇小说
红尘小说、~~热血小说~~、传奇小说、笔尖小说、
言情楼、卧龙小说
* 4个实体书书源:超星图书·实体、作品集·实体、99藏书·实体、100本·实体
* 如何自行制作并添加书源.

@ -1,8 +1,11 @@
2020.02.01
风月读书v1.8.1
1、内容替换规则支持备份与恢复
2、优化规则列表左滑菜单交互
3、修复书源搜小说网
4、删除失效书源:品书网、奇奇小说、热血小说
1、新增书源:笔尖小说、言情楼、卧龙小说
2、内容替换规则支持备份与恢复
3、优化规则列表左滑菜单交互
4、修复书源搜小说网
5、删除失效书源:品书网、奇奇小说、热血小说
6、删除失效发现:小说旗
2021.01.19
风月读书v1.8.0

@ -279,6 +279,7 @@ public class MyApplication extends Application {
String updateContent = "";
String downloadLink = null;
boolean isForceUpdate = false;
int forceUpdateVersion;
StringBuilder s = new StringBuilder();
newestVersion = Integer.parseInt(contents[0].substring(contents[0].indexOf(":") + 1));
isForceUpdate = Boolean.parseBoolean(contents[1].substring(contents[1].indexOf(":") + 1));
@ -294,6 +295,12 @@ public class MyApplication extends Application {
spu.putString("splashImageUrl", contents[6].substring(contents[6].indexOf(":") + 1));
spu.putString("splashImageMD5", contents[7].substring(contents[7].indexOf(":") + 1));
forceUpdateVersion = Integer.parseInt(contents[8].substring(contents[8].indexOf(":") + 1));
spu.putInt("forceUpdateVersion", forceUpdateVersion);
int versionCode = getVersionCode();
isForceUpdate = isForceUpdate && forceUpdateVersion > versionCode;
if (!StringHelper.isEmpty(downloadLink)) {
spu.putString(getmContext().getString(R.string.downloadLink), downloadLink);
} else {
@ -304,7 +311,6 @@ public class MyApplication extends Application {
s.append(string);
s.append("\n");
}
int versionCode = getVersionCode();
Log.i("检查更新,最新版本", newestVersion + "");
if (newestVersion > versionCode) {
MyApplication m = new MyApplication();

@ -124,6 +124,7 @@ public class SysManager {
Log.d("SourceVersion", "" + 3);
case 4:
ReadCrawlerUtil.removeReadCrawler("qiqi", "rexue", "pinshu");
ReadCrawlerUtil.addReadCrawler(BookSource.bijian, BookSource.yanqinglou, BookSource.wolong);
Log.d("SourceVersion", "" + 4);
}
setting.setSourceVersion(APPCONST.SOURCE_VERSION);

@ -34,6 +34,9 @@ public enum BookSource {
chuanqi(MyApplication.getApplication().getString(R.string.read_chuanqi)),
xiagu(MyApplication.getApplication().getString(R.string.read_xiagu)),
hongchen(MyApplication.getApplication().getString(R.string.read_hongchen)),
bijian(MyApplication.getApplication().getString(R.string.read_bijian)),
yanqinglou(MyApplication.getApplication().getString(R.string.read_yanqinglou)),
wolong(MyApplication.getApplication().getString(R.string.read_wolong)),
chaoxing(MyApplication.getApplication().getString(R.string.read_chaoxing)),
zuopin(MyApplication.getApplication().getString(R.string.read_zuopin)),
cangshu99(MyApplication.getApplication().getString(R.string.read_cangshu99)),

@ -458,6 +458,7 @@ public class BookDetailedActivity extends BaseActivity {
@Override
public void onError(Exception e) {
e.printStackTrace();
ToastUtils.showError("最新章节加载失败!");
}
});

@ -36,13 +36,13 @@ public class FindFragment extends BaseFragment {
super.initClick();
binding.findRlQidianTop.setOnClickListener(v -> comeToBookstore(new QiDianMobileRank(false)));
binding.findRlQidianNsTop.setOnClickListener(v -> comeToBookstore(new QiDianMobileRank(true)));
binding.findRlXs7Top.setOnClickListener(v -> comeToBookstore(new XS7Rank()));
//binding.findRlXs7Top.setOnClickListener(v -> comeToBookstore(new XS7Rank()));
binding.findRlQidianSort.setOnClickListener(v -> comeToBookstore(new QiDianMobileRank(false, true)));
binding.findRlQidianNsSort.setOnClickListener(v -> comeToBookstore(new QiDianMobileRank(true, true)));
binding.findRlQb5Store.setOnClickListener(v -> comeToBookstore(new QB5ReadCrawler()));
binding.findRlBen100Store.setOnClickListener(v -> comeToBookstore(new Ben100ReadCrawler()));
binding.findRlMiaoquStore.setOnClickListener(v -> comeToBookstore(new MiaoBiReadCrawler()));
binding.findRlXs7Store.setOnClickListener(v -> comeToBookstore(new XS7ReadCrawler()));
//binding.findRlXs7Store.setOnClickListener(v -> comeToBookstore(new XS7ReadCrawler()));
}

@ -0,0 +1,132 @@
package xyz.fycz.myreader.webapi.crawler.read;
import android.text.Html;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.ArrayList;
import xyz.fycz.myreader.entity.SearchBookBean;
import xyz.fycz.myreader.enums.BookSource;
import xyz.fycz.myreader.greendao.entity.Book;
import xyz.fycz.myreader.greendao.entity.Chapter;
import xyz.fycz.myreader.model.mulvalmap.ConcurrentMultiValueMap;
import xyz.fycz.myreader.webapi.crawler.base.BookInfoCrawler;
import xyz.fycz.myreader.webapi.crawler.base.ReadCrawler;
public class BiJianReadCrawler implements ReadCrawler {
public static final String NAME_SPACE = "http://www.bjcan.com";
public static final String NOVEL_SEARCH = "http://www.bjcan.com/home/search/index.html?keyword={key}";
public static final String CHARSET = "UTF-8";
public static final String SEARCH_CHARSET = "UTF-8";
@Override
public String getSearchLink() {
return NOVEL_SEARCH;
}
@Override
public String getCharset() {
return CHARSET;
}
@Override
public String getNameSpace() {
return NAME_SPACE;
}
@Override
public Boolean isPost() {
return false;
}
@Override
public String getSearchCharset() {
return SEARCH_CHARSET;
}
/**
* 从html中获取章节正文
*
* @param html
* @return
*/
public String getContentFormHtml(String html) {
Document doc = Jsoup.parse(html);
Element divContent = doc.getElementsByClass("read-content").first();
if (divContent != null) {
String content = Html.fromHtml(divContent.html()).toString();
char c = 160;
String spaec = "" + c;
content = content.replace(spaec, " ");
return content;
} else {
return "";
}
}
/**
* 从html中获取章节列表
*
* @param html
* @return
*/
public ArrayList<Chapter> getChaptersFromHtml(String html) {
ArrayList<Chapter> chapters = new ArrayList<>();
Document doc = Jsoup.parse(html);
Element divList = doc.getElementsByClass("attentions").get(1);
Elements elementsByTag = divList.getElementsByTag("a");
for (int i = 0; i < elementsByTag.size(); i++) {
Element a = elementsByTag.get(i);
String title = a.text();
String url = a.attr("href");
Chapter chapter = new Chapter();
chapter.setNumber(i);
chapter.setTitle(title);
chapter.setUrl(url);
chapters.add(chapter);
}
return chapters;
}
/**
* 从搜索html中得到书列表
*<li>
* <a class="pic" href="http://www.bjcan.com/book/74544.html" target="_blank"><img class="lazy" src="http://www.bjcan.com/uploads/novel/20200907/b38cea14e4a3de1e876395e378c1e544.jpeg" alt="大主宰:灵玖"></a>
* <h5 class="tit"><a href="http://www.bjcan.com/book/74544.html" target="_blank">大主宰灵玖</a></h5>
* <p class="info">作者<span>霞露</span><span>分类其他</span><i class="serial">连载中</i></p>
* <p class="intro">简介身负系统莫名来到了大主宰的时空成为了聚灵族的最后族人在她还对周围的情况一片模糊的时候她遇到了林静这个小恶魔拜林静所赐她还遇到了武祖成为了武柤的小徒弟参与了灵路遇到了牧尘和洛璃她默默的在心中问着自己那一直在划水的系统&ldquo;你的活来了说吧我该干什么&rdquo;</p>
* <a class="view" href="http://www.bjcan.com/book/74544.html" target="_blank">小说详情</a>
*</li>
*/
public ConcurrentMultiValueMap<SearchBookBean, Book> getBooksFromSearchHtml(String html) {
ConcurrentMultiValueMap<SearchBookBean, Book> books = new ConcurrentMultiValueMap<>();
Document doc = Jsoup.parse(html);
Elements divs = doc.getElementsByClass("book-list");
Element div = divs.get(0);
Elements elementsByTag = div.getElementsByTag("li");
for (int i = 0; i < elementsByTag.size(); i++) {
Element element = elementsByTag.get(i);
Elements as = element.getElementsByTag("a");
Elements ps = element.getElementsByTag("p");
Book book = new Book();
book.setImgUrl(element.getElementsByTag("img").attr("src"));
book.setName(as.get(1).text());
Elements spans = ps.get(0).getElementsByTag("span");
book.setAuthor(spans.get(0).text());
book.setType(spans.get(1).text().replace("分类:", ""));
book.setChapterUrl(as.get(2).attr("href"));
book.setDesc(ps.get(1).text());
book.setNewestChapterTitle("");
book.setSource(BookSource.bijian.toString());
SearchBookBean sbb = new SearchBookBean(book.getName(), book.getAuthor());
books.add(sbb, book);
}
return books;
}
}

@ -17,7 +17,7 @@ import java.util.ArrayList;
public class MiQuReadCrawler implements ReadCrawler, BookInfoCrawler {
public static final String NAME_SPACE = "https://www.meegoq.com/";
public static final String NAME_SPACE = "https://www.meegoq.com";
public static final String NOVEL_SEARCH = "https://www.meegoq.com/search.htm?keyword={key}";
public static final String CHARSET = "UTF-8";
public static final String SEARCH_CHARSET = "UTF-8";

@ -0,0 +1,135 @@
package xyz.fycz.myreader.webapi.crawler.read;
import android.text.Html;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.ArrayList;
import xyz.fycz.myreader.entity.SearchBookBean;
import xyz.fycz.myreader.enums.BookSource;
import xyz.fycz.myreader.greendao.entity.Book;
import xyz.fycz.myreader.greendao.entity.Chapter;
import xyz.fycz.myreader.model.mulvalmap.ConcurrentMultiValueMap;
import xyz.fycz.myreader.webapi.crawler.base.ReadCrawler;
public class WoLongReadCrawler implements ReadCrawler {
public static final String NAME_SPACE = "http://www.paper027.com";
public static final String NOVEL_SEARCH = "http://www.paper027.com/search.html?keyword={key}";
public static final String CHARSET = "UTF-8";
public static final String SEARCH_CHARSET = "UTF-8";
@Override
public String getSearchLink() {
return NOVEL_SEARCH;
}
@Override
public String getCharset() {
return CHARSET;
}
@Override
public String getNameSpace() {
return NAME_SPACE;
}
@Override
public Boolean isPost() {
return false;
}
@Override
public String getSearchCharset() {
return SEARCH_CHARSET;
}
/**
* 从html中获取章节正文
*
* @param html
* @return
*/
public String getContentFormHtml(String html) {
Document doc = Jsoup.parse(html);
Element divContent = doc.getElementById("contentsource");
if (divContent != null) {
String content = Html.fromHtml(divContent.html()).toString();
char c = 160;
String spaec = "" + c;
content = content.replace(spaec, " ");
return content;
} else {
return "";
}
}
/**
* 从html中获取章节列表
*
* @param html
* @return
*/
public ArrayList<Chapter> getChaptersFromHtml(String html) {
ArrayList<Chapter> chapters = new ArrayList<>();
Document doc = Jsoup.parse(html);
Element divList = doc.getElementsByClass("chapters").get(0);
Elements elementsByTag = divList.getElementsByTag("a");
int j = 0;
for (int i = elementsByTag.size() - 1; i >= 0; i--) {
Element a = elementsByTag.get(i);
String title = a.text();
String url = a.attr("href");
Chapter chapter = new Chapter();
chapter.setNumber(j++);
chapter.setTitle(title);
chapter.setUrl(url);
chapters.add(chapter);
}
return chapters;
}
/**
* 从搜索html中得到书列表
<div>
<a href="http://www.paper027.com/novel/75432.html" target="_blank"><img class="img-rounded" src="http://www.paper027.com/uploads/novel/20190802/9883298e2e72ecfa53fabf0ef2e03e21.jpg"/></a>
<h2><a href="http://www.paper027.com/novel/75432.html" target="_blank">大主宰之混子日常</a></h2>
<p class="text-muted"><span>錯過过错</span> <small>2019-08-06 19:14</small></p>
</div>
<div class="clearfix searchresult-info">
<p><a href="http://www.paper027.com/novel/75432.html" target="_blank">作者很懒什么也没有留下...</a></p>
<ul class="list-inline text-muted">
<li>11635人看过</li>
<li>标签</li>
<li><a class="text-warning">同人衍生</a></li>
</ul>
</div>
*/
public ConcurrentMultiValueMap<SearchBookBean, Book> getBooksFromSearchHtml(String html) {
ConcurrentMultiValueMap<SearchBookBean, Book> books = new ConcurrentMultiValueMap<>();
Document doc = Jsoup.parse(html);
Elements elementsByTag = doc.getElementsByClass("searchresult");
for (int i = 0; i < elementsByTag.size(); i++) {
Element element = elementsByTag.get(i);
Elements as = element.getElementsByTag("a");
Elements ps = element.getElementsByTag("p");
Book book = new Book();
book.setImgUrl(element.getElementsByTag("img").attr("src"));
book.setName(as.get(1).text());
book.setAuthor(ps.get(0).getElementsByTag("span").get(0).text());
book.setType(as.get(3).text());
book.setChapterUrl(as.get(1).attr("href").replace("novel", "home/chapter/lists/id"));
book.setDesc(as.get(2).text());
book.setNewestChapterTitle("");
book.setSource(BookSource.wolong.toString());
SearchBookBean sbb = new SearchBookBean(book.getName(), book.getAuthor());
books.add(sbb, book);
}
return books;
}
}

@ -0,0 +1,165 @@
package xyz.fycz.myreader.webapi.crawler.read;
import android.text.Html;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.ArrayList;
import xyz.fycz.myreader.entity.SearchBookBean;
import xyz.fycz.myreader.enums.BookSource;
import xyz.fycz.myreader.greendao.entity.Book;
import xyz.fycz.myreader.greendao.entity.Chapter;
import xyz.fycz.myreader.model.mulvalmap.ConcurrentMultiValueMap;
import xyz.fycz.myreader.webapi.crawler.base.ReadCrawler;
public class YanQingLouReadCrawler implements ReadCrawler {
public static final String NAME_SPACE = "http://www.yanqinglou.com";
public static final String NOVEL_SEARCH = "http://www.yanqinglou.com/Home/Search,action=search&q={key}";
public static final String CHARSET = "UTF-8";
public static final String SEARCH_CHARSET = "UTF-8";
@Override
public String getSearchLink() {
return NOVEL_SEARCH;
}
@Override
public String getCharset() {
return CHARSET;
}
@Override
public String getNameSpace() {
return NAME_SPACE;
}
@Override
public Boolean isPost() {
return true;
}
@Override
public String getSearchCharset() {
return SEARCH_CHARSET;
}
/**
* 从html中获取章节正文
*
* @param html
* @return
*/
public String getContentFormHtml(String html) {
Document doc = Jsoup.parse(html);
Element divContent = doc.getElementById("content");
if (divContent != null) {
String content = Html.fromHtml(divContent.html()).toString();
char c = 160;
String spaec = "" + c;
content = content.replace(spaec, " ");
return content;
} else {
return "";
}
}
/**
* 从html中获取章节列表
*
* @param html
* @return
*/
public ArrayList<Chapter> getChaptersFromHtml(String html) {
ArrayList<Chapter> chapters = new ArrayList<>();
Document doc = Jsoup.parse(html);
Element divList = doc.getElementsByClass("fulllistall").first();
Elements elementsByTag = divList.getElementsByTag("a");
for (int i = 0; i < elementsByTag.size(); i++) {
Element a = elementsByTag.get(i);
String title = a.text();
String url = a.attr("href");
Chapter chapter = new Chapter();
chapter.setNumber(i);
chapter.setTitle(title);
chapter.setUrl(NAME_SPACE + url);
chapters.add(chapter);
}
return chapters;
}
/**
* 从搜索html中得到书列表
<div class="bookbox">
<div class="p10"><span class="num"> <a title="斗罗之大主宰" href="/hunlian/459337/"><img layout="fixed" width="90" height="120" src="https://www.biquduo.com/files/article/image/64/64075/64075s.jpg" alt="斗罗之大主宰" /></a> </span>
<div class="bookinfo">
<h4 class="bookname"><a title="斗罗之大主宰" href="/hunlian/459337/">斗罗之大主宰</a></h4>
<div class="author">作者<a href="/writter/%E4%B8%8A%E5%BC%A6666.html" target="_blank" title="上弦666的作品大全">上弦666</a></div>
<div class="author">分类婚恋</div>
<div class="cat"><span>更新到</span><a href="/hunlian/459337/">最近更新>></a></div>
<div class="update"><span>简介</span>叶辰武魂昊天锤的变异大须弥锤昊天锤本就是大陆第一器武魂而武魂是大须弥锤的叶辰会有多强</div>
</div>
<div class="delbutton"> <a class="del_but" title="斗罗之大主宰" href="/hunlian/459337/">阅读</a></div>
</div>
</div>
*/
public ConcurrentMultiValueMap<SearchBookBean, Book> getBooksFromSearchHtml(String html) {
ConcurrentMultiValueMap<SearchBookBean, Book> books = new ConcurrentMultiValueMap<>();
Document doc = Jsoup.parse(html);
String bookName = doc.select("meta[property=og:novel:book_name]").attr("content");
if ("".equals(bookName)) {
Element div = doc.getElementsByClass("keywords").first();
Elements divs = div.getElementsByClass("bookbox");
for (Element divBook : divs) {
Elements as = divBook.getElementsByTag("a");
Book book = new Book();
book.setName(as.get(1).text());
book.setAuthor(as.get(2).text());
book.setType(divBook.getElementsByClass("author").get(1).text().replace("分类:", ""));
book.setNewestChapterTitle(as.get(3).text().replace("最近更新>>", ""));
book.setDesc(divBook.getElementsByClass("update").first().text().replace("简介:", ""));
book.setImgUrl(divBook.getElementsByTag("img").attr("src"));
book.setChapterUrl(NAME_SPACE + as.get(0).attr("href"));
book.setSource(BookSource.yanqinglou.toString());
SearchBookBean sbb = new SearchBookBean(book.getName(), book.getAuthor());
books.add(sbb, book);
}
}else {
Book book = new Book();
getBookInfo(doc, book);
SearchBookBean sbb = new SearchBookBean(book.getName(), book.getAuthor());
books.add(sbb, book);
}
return books;
}
private void getBookInfo(Document doc, Book book) {
String name = doc.select("meta[property=og:novel:book_name]").attr("content");
book.setName(name);
String author = doc.select("meta[property=og:novel:author]").attr("content");
book.setAuthor(author);
String type = doc.select("meta[property=og:novel:category]").attr("content");
book.setType(type);
String newestTitle = doc.select("meta[property=og:novel:latest_chapter_name]").attr("content");
book.setNewestChapterTitle(newestTitle);
String desc = doc.select("meta[property=og:description]").attr("content");
book.setDesc(desc);
String img = doc.select("meta[property=og:image]").attr("content");
book.setImgUrl(NAME_SPACE + img);
String url = doc.select("meta[property=og:novel:read_url]").attr("content");
book.setChapterUrl(url);
book.setSource(BookSource.yanqinglou.toString());
}
}

@ -74,7 +74,7 @@
</RelativeLayout>
<RelativeLayout
<!--<RelativeLayout
android:id="@+id/find_rl_xs7_top"
android:layout_width="match_parent"
android:layout_height="50dp"
@ -90,7 +90,7 @@
android:textSize="@dimen/text_normal_size"
android:text="@string/read_xs7"/>
</RelativeLayout>
</RelativeLayout>-->
<RelativeLayout
android:layout_width="match_parent"
@ -232,7 +232,7 @@
</RelativeLayout>
<RelativeLayout
<!--<RelativeLayout
android:id="@+id/find_rl_xs7_store"
android:layout_width="match_parent"
android:layout_height="50dp"
@ -248,6 +248,6 @@
android:textSize="@dimen/text_normal_size"
android:text="@string/read_xs7"/>
</RelativeLayout>
</RelativeLayout>-->
</LinearLayout>
</androidx.core.widget.NestedScrollView>

@ -209,6 +209,9 @@
<string name="read_chuanqi">传奇小说</string>
<string name="read_xiagu">峡谷文学</string>
<string name="read_hongchen">红尘小说</string>
<string name="read_bijian">笔尖小说</string>
<string name="read_yanqinglou">言情楼</string>
<string name="read_wolong">卧龙小说</string>
<string name="read_chaoxing">超星图书·实体</string>
<string name="read_zuopin">作品集·实体</string>
<string name="read_cangshu99">99藏书·实体</string>

@ -27,3 +27,6 @@ rexue=xyz.fycz.myreader.webapi.crawler.read.ReXueReadCrawler
chuanqi=xyz.fycz.myreader.webapi.crawler.read.ChuanQiReadCrawler
xiagu=xyz.fycz.myreader.webapi.crawler.read.XiaGuReadCrawler
hongchen=xyz.fycz.myreader.webapi.crawler.read.HongChenReadCrawler
bijian=xyz.fycz.myreader.webapi.crawler.read.BiJianReadCrawler
yanqinglou=xyz.fycz.myreader.webapi.crawler.read.YanQingLouReadCrawler
wolong=xyz.fycz.myreader.webapi.crawler.read.WoLongReadCrawler

@ -1,2 +1,2 @@
#Mon Jan 25 21:29:58 CST 2021
VERSION_CODE=180
#Mon Feb 01 19:33:27 CST 2021
VERSION_CODE=181

Loading…
Cancel
Save