找回密码
 注册帐号

扫一扫,访问微社区

蛮牛干货备选 unity制作一个手机小说阅读器-5

12
回复
1099
查看
[ 复制链接 ]
排名
189
昨日变化

40

主题

916

帖子

4874

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
6108
好友
21
蛮牛币
6083
威望
0
注册时间
2013-10-22
在线时间
1605 小时
最后登录
2019-4-25

七夕浪漫情人

QQ
2018-10-24 09:50:01 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 子非夏虫,焉知 于 2018-10-24 10:28 编辑

目录:
1.ugui设置:http://www.manew.com/thread-108184-1-1.html
2.txt拆分:http://www.manew.com/thread-108187-1-1.html
3.翻页效果:http://www.manew.com/thread-108188-1-1.html
4.章节跳转及最终工程文件:http://www.manew.com/thread-108190-1-1.html
5.爬取网络小说:http://www.manew.com/thread-141503-1-1.html
6.移动端文字转语音:http://www.manew.com/thread-141505-1-1.html


好了 作者又来了,因为作者的斗破又看完了。。。。
好久没看小说了,因为现在的阅读app一个个都要钱,买不起买不起。
然后突然想起来一本小时候在书店读过的书,讲的是一个小孩,一条瘸腿的狼,一个鹰的偏科幻一点的故事,记得的就这么多。
然后一搜,居然找到了,是雨魔的《兽王》。然后一看,哇,小时候看的进度还不到整本书的1/10。
那就翻出来再看看,嗯?还不错哦,现在还能有兴趣继续看,ojbk。
再一搜,居然怎么都找不到完本的txt下载。。。简直low。
手机上下几个阅读器搜搜,百度(某猫看书)的先跳出来,让我免费读了7天。然后,对不起,拜拜,整本书需要100多元才能买完。
再下个排名靠前的免费阅读器,网上搜到的源整本书断断续续的,一会就少一章,五分钟一个广告,关闭网络了还不行,不让你读,并且还没有作者最想要的,开车的时候可以直接听小说的功能,对不起,打扰了。
继续找?估计也不会有比这个免费阅读器更好的了,那不如。。。。自己动手丰衣足食。
废话说了这么多,下面开始正式心路历程吧。
------------------------------------废话分割线-------------------------------------------------
本次教程主要解决两个点:1.解决网上搜不到完本txt的问题
2.解决移动端语音读书的功能

本篇讲第一点:网上搜不到完本资源怎么办。
因为之前的篇幅讲过了网上直接能找到完本资源的书,可以直接拿过来拆分,现在网上找不到完本的资源,但是,可以找到一章一章读的网页:比如说三五阅读:https://www.555zw.com/book/10/10968/,再比如说思路客:http://www.siluwu.com/0/31/31969/
本文就以思路客为例(为什么用思路客?因为任性)
到这里大家不难想到一个词:爬虫。
没错,我们要做的就是把这个网页的文字爬取下来。
这不过是一个最简单不过的爬虫程序了!
好,说干就干,怎么爬?很简单啊:找到第一章的链接,丢进去
        WWW url = new WWW "http://www.siluwu.com/0/31/31969/6343925.html");


        yield return url;

        Debug.Log(url.text);

简单吧。然后跑一下,结果出来了:
1540343837683.jpg

不错哦,网页的东西都爬下来了,唯一的缺陷是,貌似他是gbk编码的,中文全乱码了。
在转编码的过程中,作者跌跌撞撞的爬了很多坑,首先是尝试了百度搜到的直接string转码gbk转utf8。
很不幸,无论怎么转,出来的要么是空,要么是????????。
没关系,继续动动奶子想想。
然后突然发现,好多地方都是用byte转,我也尝试过string转byte再转gbk,但是。。。。www下来了自己不就有byte吗????我为啥不直接用?
柳暗花明,直接取byte[] byt = url.bytes;再调用网上搜到的gbk转utf8,这些破string就全出来了!!!!
1540344438173.jpg

哈哈哈哈哈。后面就容易了,从这些破字符串中,取到你想要的东西,比如说章节头尾,比如说正文。这些就不用我教了吧,相信我聪明的小读者们都能搞定!
PS,此处好像Unity还有点bug,就是有些debug,选中了无法看到详细信息,所以作者就做了个简单的场景放个UGUI的Text,显示文字。
惯例源码:using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
using UnityEngine.UI;

public class NewBehaviourScript : MonoBehaviour {

    // Use this for initialization
    void Start () {
        StartCoroutine(GetHttpInfo());
    }
   
    // Update is called once per frame
    void Update () {
        
    }
    public Text text;

    int Zhangjie_num = 0;//实际跟Index相加的章节数
    int Index_num=12533506;//第一章的index
    int ShowZhangjie_num = 0;//用来查询和命名txt的章节数
    IEnumerator GetHttpInfo () {

        //www获取资源,要求网页的index必须是按整数+1,大多数网站都是这样的,别担心
        WWW url = new WWW ("http://www.siluke.com/0/11/11477/"+(Index_num+Zhangjie_num)+".html");

        yield return url;

        byte[] byt = url.bytes;
        //过小的为空章节(思路客大章节之间用空章节隔开,此处用两个变量自加区分开,)
        if (byt.Length < 200)
        {
            Zhangjie_num++;

            if (Zhangjie_num < 582)
            {
                StartCoroutine(GetHttpInfo());
            }
        }
        else
        {
            //将byte转为utf8格式
            byt = Encoding.Convert(Encoding.GetEncoding("GBK"), Encoding.UTF8, byt);
            string str = Encoding.UTF8.GetString(byt);
            Debug.Log(str);

            //下面的操作是针对实际文本中筛选获取需要的文本
            //仔细阅读上面debug出来的string,找到想要的规则,尽量找网页之间共性的,单个网页内重复性低的关键字符串
            //思路客的规则大概是正文"    "开头,"<script>read_link_up()"结尾
            string str_start = "    ";
            string str_end = "<script>read_link_up()";
            int IndexofA = str.IndexOf(str_start);
            int IndexofB = str.LastIndexOf(str_end);
            //从str_start开始取,要把自己的字符长度算进去,到str_end的头减去前面的部分,再往前推,所以每本书这里的数值要自己改,如果此处有更好更通用的算法欢迎评论
            string finalstr = str.Substring(IndexofA + str_start.Length, IndexofB - IndexofA - 32);
            //下面就是把正文中一些垃圾字符拿移除,设置好文本间的换行
            finalstr = finalstr.Replace("    ", "\n");
            finalstr = finalstr.Replace(" ", "");
            finalstr = finalstr.Replace("<br /><br />", "");

            //Debug.Log((str.Substring(400)));
            //Debug.Log(finalstr);


            //这里作者获取了一下文章的标题,放入整个string的最前面,原理参照如上
            string str_start_title = "title";
            string str_end_title = "/title";
            int IndexofA_title = str.IndexOf(str_start_title);
            int IndexofB_title = str.IndexOf(str_end_title);
            string finalstr_title = str.Substring(IndexofA_title + str_start_title.Length + 1, IndexofB_title - IndexofA_title - 14);
            //Debug.Log(finalstr_title);
            finalstr = finalstr_title + "\n" + finalstr;

            //此处用来显示string拿来debug看看
            text.text = finalstr;

            //接下来就跟之前一样了,写入文件,新建个文件夹分章存,参考斗破,此处没写文件夹新建逻辑,自己去弄文件夹吧,或者你自己写判断创建文件夹
            string BookName = "sw";
            string BookUrl = Application.streamingAssetsPath + "/" + BookName; ;//弄一个文件夹,用来存放一千多个章节的txt
            string ZhangJieUrl = BookUrl + "/第" + (ShowZhangjie_num + 1) + "章.txt";//给每一章一个名字吧,方便加载
            if (!File.Exists(ZhangJieUrl))
            {//把分别把每一章写进去创建成txt
                FileStream fs1 = new FileStream(ZhangJieUrl, FileMode.Create, FileAccess.Write);//创建写入文件
                StreamWriter sw = new StreamWriter(fs1);
                sw.WriteLine(finalstr);//开始写入值
                sw.Close();
                sw.Dispose();
                fs1.Close();
                fs1.Dispose();
                //注意close和dispose,不释放unity会卡死
            }

            Zhangjie_num++;
            ShowZhangjie_num++;
            yield return 1;
            //写完一章debug一下,让你不至于那么焦躁,最终写完了告诉你allend,此处的582,是拿最后一章的index减去第一章的index算出来的,应该还要+1,不然会缺失最后一章
            Debug.Log("Write_end" + Zhangjie_num);
            if (Zhangjie_num < 582)
            {
                StartCoroutine(GetHttpInfo());
            }
            else
            {
                Debug.Log("Allend!!!!!!!!!");
            }
        }
    }



}

懒人专供: pachong.unitypackage.zip (6.52 KB, 下载次数: 24, 售价: 4 蛮牛币)
回复

使用道具 举报

7日久生情
2247/5000
排名
1829
昨日变化

14

主题

371

帖子

2247

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
217870
好友
1
蛮牛币
2852
威望
0
注册时间
2017-4-15
在线时间
1132 小时
最后登录
2019-4-25
2018-10-24 10:43:51 显示全部楼层
很强势
回复

使用道具 举报

5熟悉之中
564/1000
排名
4882
昨日变化

0

主题

119

帖子

564

积分

Rank: 5Rank: 5

UID
171160
好友
0
蛮牛币
1493
威望
0
注册时间
2016-9-22
在线时间
147 小时
最后登录
2018-11-23
2018-10-24 10:59:34 显示全部楼层
回复

使用道具 举报

5熟悉之中
746/1000
排名
4111
昨日变化

1

主题

235

帖子

746

积分

Rank: 5Rank: 5

UID
245227
好友
0
蛮牛币
961
威望
0
注册时间
2017-9-21
在线时间
150 小时
最后登录
2019-4-25
2018-10-25 09:12:53 显示全部楼层
66666666666666666666666666 自己动手丰衣足食啊
回复 支持 反对

使用道具 举报

7日久生情
2006/5000
排名
1897
昨日变化

41

主题

737

帖子

2006

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
214924
好友
4
蛮牛币
17463
威望
0
注册时间
2017-3-28
在线时间
512 小时
最后登录
2019-4-25
2018-10-25 09:13:22 显示全部楼层
简直不要太强
回复

使用道具 举报

7日久生情
1527/5000
排名
3444
昨日变化

0

主题

888

帖子

1527

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
210390
好友
0
蛮牛币
1846
威望
0
注册时间
2017-3-7
在线时间
205 小时
最后登录
2019-4-16
2018-10-25 09:30:01 显示全部楼层
回复

使用道具 举报

排名
14228
昨日变化

0

主题

26

帖子

90

积分

Rank: 2Rank: 2

UID
297843
好友
0
蛮牛币
399
威望
0
注册时间
2018-9-21
在线时间
8 小时
最后登录
2019-2-15
2018-10-25 10:01:36 显示全部楼层
膜拜大神
回复

使用道具 举报

7日久生情
1648/5000
排名
4093
昨日变化

0

主题

997

帖子

1648

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
254705
好友
1
蛮牛币
1555
威望
0
注册时间
2017-11-16
在线时间
289 小时
最后登录
2019-4-26
2018-10-26 08:20:46 显示全部楼层
66666666666666666666666666666666666
回复 支持 反对

使用道具 举报

5熟悉之中
805/1000
排名
2868
昨日变化

0

主题

102

帖子

805

积分

Rank: 5Rank: 5

UID
275506
好友
0
蛮牛币
3424
威望
0
注册时间
2018-4-3
在线时间
191 小时
最后登录
2019-2-27
2018-10-26 10:28:54 显示全部楼层
楼主很6 谢谢楼主
回复 支持 反对

使用道具 举报

7日久生情
2373/5000
排名
1551
昨日变化

53

主题

824

帖子

2373

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
219600
好友
7
蛮牛币
3271
威望
0
注册时间
2017-4-27
在线时间
674 小时
最后登录
2019-4-12
2018-10-27 18:29:05 显示全部楼层
你这真的是六啊
回复

使用道具 举报

3偶尔光临
235/300
排名
8485
昨日变化

2

主题

31

帖子

235

积分

Rank: 3Rank: 3Rank: 3

UID
301048
好友
0
蛮牛币
9895
威望
0
注册时间
2018-10-23
在线时间
60 小时
最后登录
2019-2-28
2018-10-30 16:11:39 显示全部楼层
赞,很强势
回复

使用道具 举报

4四处流浪
461/500
排名
8329
昨日变化

3

主题

182

帖子

461

积分

Rank: 4

UID
252298
好友
1
蛮牛币
433
威望
0
注册时间
2017-11-3
在线时间
130 小时
最后登录
2019-4-25
2019-1-5 09:01:10 显示全部楼层
优秀
回复

使用道具 举报

7日久生情
2151/5000
排名
2613
昨日变化

2

主题

1090

帖子

2151

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
209046
好友
0
蛮牛币
2951
威望
0
注册时间
2017-3-30
在线时间
505 小时
最后登录
2019-4-26
2019-2-15 09:43:48 显示全部楼层
...........
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则