主要觉得往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, , , , );
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, );
iTextSharp.text.Font font2 = new iTextSharp.text.Font(baseFont, ); Chapter chapter1 = new Chapter(title, );
chapter1.Add(new Paragraph(title, font2));
chapter1.Add(new Paragraph(auther, font1));
chapter1.Add(new Paragraph(introduction, font1));
for (int i = ; 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 == )
SaveTxt(filename);
else if (type == )
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

最新文章

  1. MongoDB分组汇总操作,及Spring data mongo的实现
  2. C#将科大讯飞语音合成文件转换为MULAW音频格式
  3. System.Data.SqlClient.SqlError: FILESTREAM 功能被禁用&rdquo;的错误
  4. hdu----(2222)Keywords Search(ac自动机)
  5. 《Secrets of the JavaScript Ninja》:JavaScript 之运行时代码
  6. PACPerformance
  7. 朗科U903 低级格式化后,量产错误:read onlypage (控制器芯片群联2251-03)的解决方案
  8. TFS线上生成环境发布历程
  9. GeoServer中sld文件的获取来源
  10. Flask 蓝图,数据库链接
  11. 抛开visual studio,纯手工创建asp.net mvc遇到的问题
  12. 面试简单整理之zookeeper
  13. 第26月第25天 ubuntu openjdk-8-jdk jretty
  14. python中的replace
  15. 网络压缩论文整理(network compression)
  16. 使用OPRT库来实现局域网视频实时传输
  17. rsync同步公网yum源搭建本地yum仓库
  18. 2018.09.15模拟总结(T1,T3)
  19. 关于mysql开元数据库的几个随想
  20. HDU - 3605 Escape (缩点+最大流/二分图多重匹配)

热门文章

  1. Could not load file or assembly &#39;System.Data.SQLite&#39; or one of its dependencies. 试图加载格式不正确的程序。
  2. [jQuery学习系列五 ]5-Jquery学习五-表单验证
  3. paip.http 404错误 的解决
  4. HTML5游戏开发进阶指南(亚马逊5星畅销书,教你用HTML5和JavaScript构建游戏!)
  5. PHP基础(一)
  6. Reorder List
  7. WPF面板布局介绍Grid、StackPanel、DockPanel、WrapPanel
  8. NPOI 添加行
  9. TCP_NODELAY 和 TCP_CORK主要区别
  10. 【C++沉思录】句柄1