zoukankan      html  css  js  c++  java
  • 最近买了个kindle,为了方便阅读,写了个程序抓取网页内容发送到Kindle

          主要觉得往kindle里加书籍太麻烦了,要下载下来,还要通过邮件发送,特别一些网页文字版的书籍没办法放到kindle里,所以想着还不如自己动手丰衣足食,写一个程序直接抓取网页内容,制作成书籍,然后自动发送到kindle里。

    程序首先操作简单“一键推送”,还有就是书籍要带目录。

    先做了个winform版的,有时间再编写个Web版的。

    程序相关的技术:

    1.使用NSoup分析网页

    2.爬虫规则设计

    3.多线程爬网页

    4.生成txt文本和pdf文件

    5.使用邮件推送到自己的kindle设备

     

    程序界面效果:

     

    生成的TXT文件

     

    生成的pdf文件

     

     

    BookRule.xml配置文件

    <BookSite Name="纵横小说网" Url="http://book.zongheng.com" charset="utf-8">
        <title>.read_con h1</title>
        <auther>.read_con a.fb</auther>
        <cover></cover>
        <introduction></introduction>
        <catalog>.read_con .chapterBean a</catalog>
        <content>#chapterContent</content>
      </BookSite>
    
    <SearchSite Name="纵横网搜索" SearchUrl="http://search.zongheng.com/search/bookName/{0}/1.html" charset="utf-8" list=".search_text">
        <title>h2</title>
        <auther>.rela a</auther>
        <cover></cover>
        <introduction>.j_info</introduction>
        <bookurl eq="1">.search_oprate p span a</bookurl>
      </SearchSite>

    多线程爬网页参考:http://www.cnblogs.com/kakake/p/4151691.html 

     

    生成pdf文件使用了itextsharp.dll组件

    public void SavePdf(string filename)
            {
                FileInfo fileinfo = new FileInfo(filename);
                if (fileinfo.Directory.Exists == false)
                    Directory.CreateDirectory(fileinfo.DirectoryName);
    
                Document doc = new Document(PageSize.A5, 10, 10, 10, 10);
                PdfWriter.GetInstance(doc, new FileStream(filename, FileMode.Create));
                doc.Open();
    
                //指定字体库,并创建字体
                BaseFont baseFont = BaseFont.CreateFont(
                    "C:\WINDOWS\FONTS\SIMYOU.TTF",
                    BaseFont.IDENTITY_H,
                    BaseFont.NOT_EMBEDDED);
                iTextSharp.text.Font font1 = new iTextSharp.text.Font(baseFont, 18);
                iTextSharp.text.Font font2 = new iTextSharp.text.Font(baseFont, 20);
    
                Chapter chapter1 = new Chapter(title, 1);
                chapter1.Add(new Paragraph(title, font2));
                chapter1.Add(new Paragraph(auther, font1));
                chapter1.Add(new Paragraph(introduction, font1));
                for (int i = 0; i < catalogs.Count; i++)
                {
                    Section section1 = chapter1.AddSection(catalogs[i].text);
                    section1.Add(new Paragraph(catalogs[i].page.text, font1));
                    section1.TriggerNewPage = true;
                    section1.BookmarkOpen = false;
                }
    
                chapter1.BookmarkOpen = false;
                doc.Add(chapter1);
                doc.Close();
            }

    发送邮件使用的System.Net.Mail中微软封装好的MailMessage类,由于没有自己的邮件服务器,使用QQ邮箱推送到kindle非常不稳定,有时候可以有时候又发送失败。

     /// <summary>
            /// 发送kindle的EMail
            /// </summary>
            /// <param name="toEmail">kindle的EMail地址</param>
            /// <param name="type">发送的文件 0:pdf;1:txt</param>
            /// <param name="filename">文件名</param>
            public void SendMail(string toEmail, int type, string filename)
            {
                //确定smtp服务器地址。实例化一个Smtp客户端
                System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("smtp.qq.com");
                //生成一个发送地址
                string strFrom = "****@qq.com";
    
                //构造一个发件人地址对象
                MailAddress from = new MailAddress(strFrom, "kakake", Encoding.UTF8);
                //构造一个收件人地址对象
                MailAddress to = new MailAddress(toEmail, "kindle", Encoding.UTF8);
    
                //构造一个Email的Message对象
                MailMessage message = new MailMessage(from, to);
    
                if (type == 0)
                    SaveTxt(filename);
                else if (type == 1)
                    SavePdf(filename);
    
                //得到文件名
                string fileName = filename;
                //判断文件是否存在
                if (File.Exists(fileName))
                {
                    //构造一个附件对象
                    Attachment attach = new Attachment(fileName);
                    //得到文件的信息
                    ContentDisposition disposition = attach.ContentDisposition;
                    disposition.CreationDate = System.IO.File.GetCreationTime(fileName);
                    disposition.ModificationDate = System.IO.File.GetLastWriteTime(fileName);
                    disposition.ReadDate = System.IO.File.GetLastAccessTime(fileName);
                    //向邮件添加附件
                    message.Attachments.Add(attach);
                }
                else
                {
                    throw new Exception("[" + fileName + "]文件没找到!");
                }
    
                //添加邮件主题和内容
                message.Subject = "书籍发送到kindle";
                message.SubjectEncoding = Encoding.UTF8;
                message.Body = "";
                message.BodyEncoding = Encoding.UTF8;
    
                //设置邮件的信息
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                message.BodyEncoding = System.Text.Encoding.UTF8;
                message.IsBodyHtml = false;
    
                //如果服务器支持安全连接,则将安全连接设为true。
                //gmail支持,163不支持,如果是gmail则一定要将其设为true
                client.EnableSsl = true;
    
                //设置用户名和密码。
                //string userState = message.Subject;
                client.UseDefaultCredentials = false;
                string username = "user";
                string passwd = "****";
                //用户登陆信息
                NetworkCredential myCredentials = new NetworkCredential(username, passwd);
                client.Credentials = myCredentials;
                //发送邮件
                client.Send(message);
            }
        }

    程序下载地址:http://pan.baidu.com/s/1dDndERB

  • 相关阅读:
    indexDB数据库
    使用数据库实现web留言板
    简易存储读取
    随手记
    小程序三:app对象的使用
    小程序二:配置
    文件上传新方式 files 对象创建
    AJAX 上传多文件
    Uncaught TypeError: Illegal invocation问题解决方法
    nodeJs 复制文件夹及文件
  • 原文地址:https://www.cnblogs.com/kakake/p/4151923.html
Copyright © 2011-2022 走看看