如何免费推送读者kindle推送读

您正在使用IE低版浏览器,为了您的雷锋网账号安全和更好的产品体验,强烈建议使用更快更安全的浏览器
发私信给杨仁杰
导语:在网络阅读越发的流行今天,Kindle 已经成为了网络阅读最佳承载体之一;因为 Kindle,我们可以静下心来享受沉浸于阅读;因为 Kindle,我们可以将阅读作为一种享受。但是,你真的会用Kindle 吗?
同步到新浪微博
本专题其他文章
发现和分享具有创意的科技产品,有好玩的硬件产品需要报道的请联系我,邮箱 或者扫描下面的微信二维码
当月热门文章
为了您的账户安全,请
您的邮箱还未验证,完成可获20积分哟!
您的账号已经绑定,现在您可以以方便用邮箱登录
请填写申请人资料如何将 Kindle 打造成一个 RSS 阅读器
如何将 Kindle 打造成一个 RSS 阅读器
是提取 Calibre 的 mobi 模块,根据需求抓取下载包含图片的 RSS 订阅或网页推送到你的 Kindle,杂志格式书籍排版精美,跳转方便,阅读体验更好。我们可以使用 KindleEar 开源的代码,在 GAE 上免费搭建推送服务器。为什么要自己搭建?不受限制,自定义 RSS 内容,可抓取任意地区 RSS 内容;支持图片,无限制订阅源数量和文件大小;多账户独立管理,可以分享给别人使用你搭建的系统;如果你需要,还可以自定义排版;使用自己的服务,不需要排队等待,推送速度更快。我需要准备什么?安装 Python 2.7 环境安装 GAE SDK 环境安装 GIT 环境对的,这些都不需要,你只需要能够正常的访问 Google 服务,进行操作即可。如果,你想先预览下推送的抓取效果,可以
我抓取的少数派 RSS 效果,包括图片抓举,文章布局,杂志格式等。创建 APP 引擎打开
,创建一个 APP 引擎。(如果你之前没有创建过 Project , 需要先创建一个项目。)点击 【Next】开始创建创建完成,根据教程,点击继续,打开控制台 shell,如果弹出教程,【退出教程】即可。激活远端 shell 之后,分别输入命令进行下载安装和部署wget
chmod +x kindleEar.sh ./kindleEar.sh执行阶段会提示输入你的 Gmail 邮箱和当前的 APP ID,键入回车键之后,就开始自动部署了。然后,就没有然后了,恭喜,你已经部署完成了。为什么其他的资料,甚至
KindleEar 官方安装步骤都如此复杂甚至还有错误呢?因为教程具有时效性,很多已经过时不能再使用。使用简介刷新
页面,就可以看到部署信息了。点击图示的链接,即可访问服务。打开链接,默认账号密码均为:admin登陆之后,点击 【我的订阅】进行设置,如果出现 【internal server error】,是因为系统没有完全部署完成,稍等五分钟左右就可以正常使用。注意:推送之前,你需要完成以下操作。设置 Gmail 邮箱到 Kindle 信任邮箱中,在
中【管理我的内容和设备】--【设置】在 【已认可的发件人电子邮箱列表】中添加。打开
,添加 【已获授权的发件人】设置投递选项,注意修改之后需要选择 【保存设置】【投递日志】可以查看投递的状态。由于 RSS 内容抓取需要一定的时间,所以日志可能会有延迟。【账户管理】可以当前账户密码,也可以添加新成员,这样你就可以把系统分享给你的好朋友是用了,相互之间互不影响。【高级设置】大家可以根据需要自行研究,比如批量导入订阅源,保存内容到 Pocket Instapaper。相关链接:如果遇到问题,请访问:相关推荐
?原网页已经由 ZAKER 转码以便在移动设备上查看
大家都在看&nbsp&#8250&nbsp&nbsp&#8250&nbsp
一键将网页内容推送到Kindle
最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会。工具名称:Simple Send to KindleGithub地址:功能:Windows下一个简单的将网页内容推送到Kindle的工具。写这个工具的是满足自己的需求。自从买了
Kindle paperwhite
2,它就成了我使用率最高的一个电子设备。相信很多Kindle拥有者和我一样都有这样一个需求:就是白天网上看到了一些好文章没时间看,就想把它推送到
Kindle上,晚上睡觉前躺在床上慢慢看。之前我一直用的是一个叫的工具,但是发现经常推送的内容图片丢失了,Chrome应用商店里有一个叫做Send to Kindle的工具但是装了之后不知道什么原因用不了,于是我就想不如自己动手写一个,名字就叫Simple Send to Kindle。原理原理很简单,就是通过Chrome扩展程序将网页链接发送给本地的一个Java写的程序,这个程序将网页内容下载下来并转换为Kindle的mobi格式,然后再通过kindle的邮箱发送给Kindle设备。工具的核心功能是利用Amazon提供的一个叫的程序生成mobi文件,大家也可以离线使用这个工具将网页内容生成各种Kindle支持的格式,另外一个核心是Chrome扩展和本地程序的Native Messaging,这个浪费了我挺长时间,后面会简单介绍下。&如何使用1、用mvn assembly打包,打包后目录如下:2、工具可以放到任何地方,然后执行setup.bat这个脚本。3、安装Chrome扩展。在Chrome里输入chrome://extension就可以进入扩展管理:点加载正在开发的扩展程序,选择ext下的Chrome目录就可以以开发者模式加载扩展程序了,可以看到每个扩展都有一个唯一标识ID,这个后面配置会用到。加载成功就可以在浏览器地址栏右边看到这个logo了:4、工具已经安装成功了下面进行一些简单配置就可以了:1)打开SimpleSendToKindle.json这个文件:将allowed_origins里面的内容修改为上面Chrome扩展的ID。2)sstk.properties里面是一些工具的通用配置:#整个服务的超时时间
sstk.service.timeout&=&120000
#网页内容或图片的下载超时时间
sstk.download.timeout&=&15000
#是否删除临时目录
sstk.download.deleteTmpDir&=&false
mail.smtp.starttls.enable=true
mail.smtp.socketFactory.port=25
mail.smtp.host=smtp.126.com
mail.host=smtp.126.com
mail.smtp.auth=true
mail.transport.protocol=smtp
mail.userName=XXX
mail.password=iflytek
mail.from=
sstk.debug.sendMail&=&false主要配置的就是邮箱这块,mail.to配置是你的Kindle邮箱,mail.from是用来发送的邮箱,我这里用的是126,其他邮箱也都支持smtp,有Kindle的同学都知道要想Kindle收到邮件发送的内容必须将发送油箱添加到Amazon认可的邮箱列表中。都配置好后看到你想要推送的页面,只要轻轻点击下就Ok了。稍等片刻,查看你的Kindle,效果如下:&&遇到的一些问题工具虽然简单,但是从思路到成型,过程也遇到了一些问题,这里跟大家分享下,有兴趣的同学可以接着往下看。实现思路有了想法后首先要想的就是实现思路,一开始想用
JavaScript写,最后只要安装一个Chrome扩展程序就可以了,这样肯定是Simple的,但是最后还是放弃这个想法,一来我对JS基本不会,
二来写这个工具的目的是为了满足自己的需求,怎么快怎么来,什么技术熟悉就用什么,所以最后还是决定用Chrome扩展和Java程序通信这种方式。但这
过程发现了一些很有用的工具,我在最后会推荐给大家。&Chrome扩展开发我一直用的都是chrome,所以想到了开发Chrome下的插件(Chrome下叫Extension扩展)。那首先要解决的就是如何开发Chrome插件?开发chrome扩展很简单,官方有一个入门例子非常简单,一看就懂。这里推荐园子里的一篇文章:。&Chrome扩展和本地程序通信官方术语叫做,具
体技术细节这里不铝耍行巳さ耐Э梢酝纤严拢饫镏讣虻ソ樯芟隆chrome扩展在Windows下是通过
HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\这个注册表下面的内容
和一个.json的清单文件来找到你的Native App的。上面的setup.bat就是用来写入注册表的,SimpleSendToKind.json就是清单文件:@echo&off
reg&add&HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\so.zjd.sstk&/ve&/t&REG_SZ&/d&%~dp0\SimpleSendToKindle.json&/fsetup.bat将so.zjd.sstk这个“程序”注册到chrome关心的注册表下,Chrome通过它找到标识应用程序信息的清单文件:{
&&&&&name&:&so.zjd.sstk&,
&&&&&description&:&Simple&Send&to&Kindle(by&zjd.so)&,
&&&&&path&:&startup.exe&,
&&&&&&&&&type&:&stdio&,
&&&&&allowed_origins&:[
&&&&&&&&&chrome-extension://jnihbngmnjbmchfhcdfabofamnfcljaf/&
}path是本地程序的路径,除了注意程序的权限问题外,还要注意这里path里面如果有路径分隔符必须是双斜杠“//”。Chrome是通过系统的标准输入输出和本地程序进行通信,具体协议如下:Chrome 浏览器在单独的进程中启动每一个原生消息通信宿主,并使用标准输入(stdin)与标准输出(stdout)与之通信。向两个方向发送消息时使用相同的格式:每一条消息使用 JSON 序列化,以 UTF-8 编码,并在前面附加 32 位的消息长度(使用本机字节顺序)。协议其实很简单,但是这块却浪费了我好长时间,我用Java死活无法读取Chrome写入标准输入的内容,总是报下面的错误:一开始怀疑自己的写的代码有问题,网上搜了半天有说是JDK的问题,我重装还是不行。后来我发现Chrome传给程序其实有两个参数,一个windwos的句柄,一个Chrome扩展的ID:arg&0:--parent-window=3349886
arg&1:chrome-extension://oojaanpmaapemaihjbebgojmblljbhhh/所以我就想Java能不能直接从Windows句柄读数据,因为Java确实提供了一个FileDescriptor类,但折腾了半天发现原生的Java并。最后没办法下,想出了非常丑陋的解决办法,利用C#来做下中转,所以才多了个startup.exe,C#代码写的很顺利,这也让我对Java是累感不爱啊。using&S
using&System.Collections.G
using&System.L
using&System.T
using&System.IO;
using&System.D
namespace&Startup
&&&&class&Program
&&&&&&&&static&void&Main(string[]&args)
&&&&&&&&&&&&try
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&if&(!Directory.Exists(System.AppDomain.CurrentDomain.BaseDirectory&+&&\\log&))
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&Directory.CreateDirectory(System.AppDomain.CurrentDomain.BaseDirectory&+&&\\log&);
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&if&(args.Length&==&0)
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&WriteStandardStreamOut(&Missing&parameter.&);
&&&&&&&&&&&&&&&&&&&&Log2File(&Missing&parameter.&);
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&string&url&=&ReadStandardStreamIn();
&&&&&&&&&&&&&&&&Log2File(&Running&SimpleSendToKindle.jar&with&url:&&+&url);
&&&&&&&&&&&&&&&&string&ret&=&RunJar(url);
&&&&&&&&&&&&&&&&Log2File(&Completed&with&return&msg:&&+&ret);
&&&&&&&&&&&&&&&&WriteStandardStreamOut(&{\&text\&:\&&&+&ret&+&&\&}&);
&&&&&&&&&&&&}
&&&&&&&&&&&&catch&(Exception&ex)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Log2File(&Error:&&+&ex.ToString());
&&&&&&&&&&&&&&&&WriteStandardStreamOut(&{\&text\&:\&&&+&&Error.&&+&ex.Message&+&&\&}&);
&&&&&&&&&&&&}
&&&&&&&&static&string&RunJar(string&arg)
&&&&&&&&&&&&ProcessStartInfo&startInfo&=&new&ProcessStartInfo()
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&WorkingDirectory&=&System.AppDomain.CurrentDomain.BaseDirectory,
&&&&&&&&&&&&&&&&UseShellExecute&=&false,//要重定向&IO&流,Process&对象必须将&UseShellExecute&属性设置为&False。
&&&&&&&&&&&&&&&&CreateNoWindow&=&true,
&&&&&&&&&&&&&&&&RedirectStandardOutput&=&true,
&&&&&&&&&&&&&&&&//RedirectStandardInput&=&false,
&&&&&&&&&&&&&&&&WindowStyle&=&ProcessWindowStyle.Normal,
&&&&&&&&&&&&&&&&FileName&=&&java.exe&,
&&&&&&&&&&&&&&&&Arguments&=&@&&-Dfile.encoding=utf-8&-jar&SimpleSendToKindle.jar&&&+&arg,
&&&&&&&&&&&&};
&&&&&&&&&&&&//启动进程
&&&&&&&&&&&&using&(Process&process&=&Process.Start(startInfo))
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&process.Start();
&&&&&&&&&&&&&&&&//process.WaitForExit();
&&&&&&&&&&&&&&&&using&(StreamReader&reader&=&process.StandardOutput)
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&return&reader.ReadToEnd();
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&static&void&Log2File(string&s)
&&&&&&&&&&&&FileStream&fs&=&new&FileStream(System.AppDomain.CurrentDomain.BaseDirectory&+&@&log/startup.log&,&FileMode.Append);
&&&&&&&&&&&&StreamWriter&sw&=&new&StreamWriter(fs,&Encoding.UTF8);
&&&&&&&&&&&&sw.WriteLine(s);
&&&&&&&&&&&&sw.Close();
&&&&&&&&&&&&fs.Close();
&&&&&&&&static&string&ReadStandardStreamIn()
&&&&&&&&&&&&using&(Stream&stdin&=&Console.OpenStandardInput())
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&int&length&=&0;
&&&&&&&&&&&&&&&&byte[]&bytes&=&new&byte[4];
&&&&&&&&&&&&&&&&stdin.Read(bytes,&0,&4);
&&&&&&&&&&&&&&&&length&=&System.BitConverter.ToInt32(bytes,&0);
&&&&&&&&&&&&&&&&byte[]&msgBytes&=&new&byte[length];
&&&&&&&&&&&&&&&&stdin.Read(msgBytes,&0,&length);
&&&&&&&&&&&&&&&&string&decodeMsg&=&Microsoft.JScript.GlobalObject.decodeURI(System.Text.Encoding.UTF8.GetString(msgBytes));
&&&&&&&&&&&&&&&&return&decodeM
&&&&&&&&&&&&}
&&&&&&&&static&void&WriteStandardStreamOut(string&msg)
&&&&&&&&&&&&int&length&=&msg.L
&&&&&&&&&&&&byte[]&lenBytes&=&System.BitConverter.GetBytes(length);
&&&&&&&&&&&&byte[]&msgBytes&=&System.Text.Encoding.UTF8.GetBytes(msg);
&&&&&&&&&&&&byte[]&wrapBytes&=&new&byte[4&+&length];
&&&&&&&&&&&&Array.Copy(lenBytes,&0,&wrapBytes,&0,&4);
&&&&&&&&&&&&Array.Copy(msgBytes,&0,&wrapBytes,&4,&length);
&&&&&&&&&&&&using&(Stream&stdout&=&Console.OpenStandardOutput())
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&stdout.Write(wrapBytes,&0,&wrapBytes.Length);
&&&&&&&&&&&&}
}Chrome扩展获取当前页面的url园子里那个例子里是在content_script.js里用document.URL,但是我发现这有个问题,每次必须重新加载页面,不然这个值好像全局就一个。发现用chrome.tabs.getSelected这个事件监听更好些:chrome.tabs.getSelected(null,function(tab)&{
&&&&var&port&=&
&&&&var&nativeHostName&=&&so.zjd.sstk&;
&&&&port&=&chrome.runtime.connectNative(nativeHostName);
&&&&port.onMessage.addListener(function(msg)&{&
&&&&&&&&//console.log(&Received&&&+&msg);&
&&&&&&&&$(&#message&).text(msg.text);
&&&&port.onDisconnect.addListener(function&onDisconnected(){
&&&&&&&&//console.log(&connetct&native&host&failure:&&+&chrome.runtime.lastError.message);
&&&&&&&&port&=&
&&&&&&&&//$(&#message&).text(&Finished!&);
&&&&port.postMessage(encodeURI(tab.url))&
popup.js图片解析其实右键将网页另存为为html后就能利用
kindlegen生成mobi文件了,或者利用Amazon的邮箱服务直接将html文件发送给Kindle,也能自动转换成mobi。但是之所以要写
这个工具的原因就是kindlegen也好,kindle邮箱服务也好都不会去主动下载页面里的图片,kindlegen需要你将页面里图片或其他资源的
地址转换成相对路径,然后将资源统一放在一个文件家里。所以处理也很简单解析页面img元素内容,自己将图片下载下来然后将src替换成相对路径就OK了,需要注意的就是网页图片引用的几种方式:http://www.test.com/dir1/dir2/test.html./images/mem/figure9.png&&→&&http://www.test.com/dir1/dir2/images/mem/figure9.png
images/mem/figure9.png&&&&→&&http://www.test.com/dir1/dir2/images/mem/figure9.png
/images/mem/figure9.png&&&→&&http://www.test.com/images/mem/figure9.png
../../images/mem/figure9.png&&→&&http://www.test.com/figure.png.表示当前目录..表示上级目录代码大致如下:private&String&processRelativeUrl(String&url)&{
&&&&&&&&if&(url.startsWith(&http://&))&{
&&&&&&&&&&&&return&
&&&&&&&&String&pageUrl&=&this.page.getUrl();
&&&&&&&&int&relative&=&0;
&&&&&&&&int&index&=&0;
&&&&&&&&if&(url.startsWith(&/&))&{
&&&&&&&&&&&&relative&=&-1;
&&&&&&&&}&else&{
&&&&&&&&&&&&while&(true)&{
&&&&&&&&&&&&&&&&index&=&0;
&&&&&&&&&&&&&&&&if&(url.startsWith(&./&))&{//&当前目录
&&&&&&&&&&&&&&&&&&&&index&=&url.indexOf(&./&);
&&&&&&&&&&&&&&&&&&&&url&=&url.substring(index&+&2);
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&}&else&if&(url.startsWith(&../&))&{//&上级目录
&&&&&&&&&&&&&&&&&&&&relative++;
&&&&&&&&&&&&&&&&&&&&index&=&url.indexOf(&../&);
&&&&&&&&&&&&&&&&&&&&url&=&url.substring(index&+&3);
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&}&else&{//&当前目录
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&if&(relative&==&-1)&{
&&&&&&&&&&&&index&=&pageUrl.indexOf('/',&7);
&&&&&&&&&&&&pageUrl&=&pageUrl.substring(0,&index);
&&&&&&&&&&&&url&=&url.substring(1);
&&&&&&&&}&else&{
&&&&&&&&&&&&for&(int&i&=&0;&i&&=&&i++)&{
&&&&&&&&&&&&&&&&index&=&pageUrl.lastIndexOf(&/&);
&&&&&&&&&&&&&&&&if&(index&==&-1)&{
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&pageUrl&=&pageUrl.substring(0,&index);
&&&&&&&&&&&&}
&&&&&&&&url&=&pageUrl&+&&/&&+&
&&&&&&&&return&
&&&&}本来是打算也处理CSS的,结果发现CSS反而会导致生成的mobi格式错乱就算了。页面乱码有的网页的meta元素并不规范会导致kindlegen生成的mobi文件乱码,比如:&meta&charset=&UTF-8&&需要处理下:&meta&http-equiv=&Content-Type&&content=&text/&charset=utf-8&/&一些网站防止恶意抓取的问题有些网站的页面为了防止网络爬虫恶意抓取内容会对
HTTP请求的User-Agent进行简单验证,这种情况简单模拟下浏览器的UA就可以绕过了,这也说明了恶意的抓取确实很难杜绝,前几天园子里好像还
有人提到这个。这里有个疑问:到底什么样的行为算恶意抓取,就我本人来说肯定不会有任何恶意。&存在的问题写的比较匆忙,还存在很多问题:1、Chrome插件没界面、没用户体验,只是为了实现功能;2、需要C#程序来做中转,这个太恶心了,结果工具一点也不simple;3、有的中文网页会导致生成的mobi文件乱码,肯定是网页编码方便的问题,有时间再看看;4、生成的mobi文件比较大,可以考虑对内容进行裁剪;5、不支持将页面选中的内容推送到Kindle;6、如果页面有代码或排版不好,显示比较乱,可读性比较差;7、未考虑Kindle不支持的图片格式,其实大部分情况就哪几种图片;8、Linux平台支持,其实kindlegen有linux下的版本,Chrome扩展本身在什么平台下都能用。另外才关注开源没多久,Github上提交的代码质量有待提高。&一些资源前面提到写这个工具的过程中其实发掘了一些很不错的工具和服务,这里推荐给大家::亚马逊提供的一个服务。:一个在线的将网页转换成mobi文件的服务,但是好像图片处理也有问题。:一个小工具可以用来编辑mobi的元数据。l:貌似是一个收费的工具。Calibre:一个非常强大的免费电子书管理和生成工具,推荐这篇文章。&Github上一个抓取RSS生成mobi文件发送到Kindle的工具,很不错的。&写在最后今天写完才发现,原来Amazon官方就有一个插件叫,而且支持各种浏览器,很好很强大,需要的同学直接用官方的吧,这么晚码字很辛苦,没有功劳也有苦劳,如果觉得不错给个推荐吧~写这个工具最大的收获就是:有想法就去做,just do it!&
上一篇: Java中的注解(Annotation)是一个很神奇的东西,特别现在有很多Android库都是使用注解的方式来实现的。一直想详细了解一下其中的原理。很有幸阅读到一篇详细解释编写注解处理器的文章。本文的原文是ANNOTATION PROCESSING 101,作者是Hannes Dorfmann。这是一
下一篇: 原文出处: cnblogs-zhanjindong 最近在读《深入理解Java虚拟机》,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好: http://yueyemaitian.iteye.com/}

我要回帖

更多关于 静读kindle电子书推送 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信