昨天个自己的棒球聚合http://baseball.sinaapp.com 又多加了一个网站的MLB和CPBL的新闻和专栏 -> Sportsv的内容……
我也是挺拼的,网站里有些图片是引自墙外的图片,我还得想办法通过国外的服务器下载图片再保存下来……如果连那个服务器都下载不下来,就只能原地址奉送了,随缘了……另外,gif和视频嵌入没有做处理,如果你们能翻墙就能看了……
昨天个自己的棒球聚合http://baseball.sinaapp.com 又多加了一个网站的MLB和CPBL的新闻和专栏 -> Sportsv的内容……
我也是挺拼的,网站里有些图片是引自墙外的图片,我还得想办法通过国外的服务器下载图片再保存下来……如果连那个服务器都下载不下来,就只能原地址奉送了,随缘了……另外,gif和视频嵌入没有做处理,如果你们能翻墙就能看了……
肉壳已经懒到家了,居然整整一年没有发布任何新文章,最后一篇文章居然是13年12月,而如今,已经是15年1月了……时间过得好快啊……
最近,肉壳放假回家,利用业余时间,做了一个有关棒球资讯的聚合。目的就是只要访问自己的这个网站,或者订阅Rss就可以直接阅读台湾几个新闻站点的有关棒球的新闻。有兴趣的话,大家戳这里->http://baseball.sinaapp.com
目前,这个网站只有4个板块,分别是MLB和中华职棒的新闻和专栏。当然,新闻几乎天天都会有很多更新。专栏的话,就慢一点了,这要看作者心情了……
这个站点的原理很简单,通过爬虫,从各个网站上爬来数据,保存在数据库。然后再通过页面展示出来就好了。爬虫框架使用的是吹水的Phpfether,感谢吹水编写的如此好用的爬虫框架。rss方面,我是自己根据rss语法规则自己编写的一个页面,其实我后来在网上找到过一个生成rss feed的类,不过懒得套用了。网页,数据库,存储是放在Sinaapp上的。具体的技术不做深究,有兴趣的朋友可以留言交流……
大概就是这样……
肉壳有一部安德猴手机,因为喜新厌旧,去年换成了iPhone……虽然换了新手机,觉得很厉害,但是,旧手机既然还能用,就要让他继续发挥余热。于是肉壳把自己不常用的天津手机卡放在了这个手机里……因为这个号码是肉壳第一个手机号,所以,很多验证码都是绑定在这个手机的,所以,有些时候,需要验证码的时候,这个手机又没有带在身上,是一件非常令人苦恼的事情。所以本着自己动手丰衣足食的原则,自己写了个小android程序,帮助自己把接收到的新短信,自动用Gmail发送给一个预设邮箱……
在完成这件任务之前,你需要做一件事,就是安装一个修改过权限的Gmail客户端,因为原版Gmail有个Auto Send权限,但是,类型是signature。也就是说,这个权限只能由系统或者应用本身调用,也就是说,作为第三方的我们是无法调用的,所以大家可以看看这个帖子,学习一下,如何将signature权限修改为normal权限,这里就不再赘述了,因为肉壳也是直接从论坛里下载下来的。
然后,如果你用的是MIUI,你还需要做一件事,跟我一起做,设置->小米云服务->免费网络短信->高级设置->系统短信优先,把这个系统短信优先关掉,因为这个设置会拦截所有android系统内部的SMS Receiver,导致我们的程序不能实时检测到新短信。
接下来,我们就可以开始了……
首先,AndroidManifest.xml, 我们要添加收取短信的权限和Gmail的Auto Send权限……
// 添加收取短信的权限和Gmail的Auto Send权限
之后,我们一步一步来,先做拦截新短信的功能。
所以继续编辑AndroidManifest.xml,我们要写一个Receiver。
// 在AndroidManifest.xml中声明一个Receiver
然后,我们就可以新建一个类,比如“SMSBroadcastReceiver“,内容大概是
// SMSBroadcastReceiver 继承了BroadcastReceiver,所以这不是一个Activity public class SMSBroadcastReceiver extends BroadcastReceiver { public static final String ACTION = "android.provider.Telephony.SMS_RECEIVED"; @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ACTION)) { StringBuffer SMSAddress = new StringBuffer(); StringBuffer SMSContent = new StringBuffer(); Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdusObjects = (Object[]) bundle.get("pdus"); SmsMessage[] messages = new SmsMessage[pdusObjects.length]; for (int i = 0; i < pdusObjects.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) pdusObjects[i]); } for (SmsMessage message : messages) { SMSAddress.append(message.getDisplayOriginatingAddress()); SMSContent.append(message.getDisplayMessageBody()); } } System.out.println(SMSAddress.toString()+" said:\""+SMSContent+"\""); } } }
这样子,我们就可以在收到新短信的时候,获取到短信内容了,大家可以试试给虚拟机塞一条信息,或者给真机发条短信试试……
搞定短信接收问题之后,下一步就是用Gmail来发送邮件,其实,可以用系统自带的Mail来发邮件,但是需要手动按发送才可以将内容发送出去。虽说可以通过一些包或者一些复杂的手段实现自动发送,可是还是觉得略麻烦……所以我们用修改过的Gmail附带的AUTO SEND权限就好了……用法也非常简单……直接看代码……
// 调用Gmail的AUTO SEND Activity Intent intentSend = new Intent("com.google.android.gm.action.AUTO_SEND"); intentSend.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 由于Receiver不是Activity,所以在后面开始一个Activity前,要给intent设置FLAG_ACTIVITY_NEW_TASK这个FLAG intentSend.setType("plain/text"); String[] reciver = new String[] { "xx@xxxxxx.com" }; // 收件人邮箱,应该可以是多人,我没有尝试 intentSend.putExtra(android.content.Intent.EXTRA_EMAIL, reciver); intentSend.putExtra(android.content.Intent.EXTRA_SUBJECT, SMSAddress.toString()); intentSend.putExtra(android.content.Intent.EXTRA_TEXT, SMSContent.toString()); context.startActivity(intentSend);
至此,这个应用就完成了,测试了一下,一切OK,以后再需要收验证码,只要上我的邮箱就好咯……以后有时间还可以做一个回复邮件自动发短信的功能,而且,最好能脱离Gmail的限制。其实也不难的,有时间再说吧,这个应急就行……
代码我放在Github(https://github.com/Rokeer/MailMySMS)上了,大家可以自己去看看……写的很水,连界面都没有做……
大概就是这样……
最近在给学生们做Demo的时候,遇到了一个端口占用的问题……既然知道问题的所在,就要开始尝试解决问题,检查出到底是哪个程序在使用这个端口,然后干掉它……
再Windows下,加入我的端口 3318被占用了,那么在cmd里执行
netstat -aon|findstr “3318”
得到结果如下
TCP 127.0.0.1:3318 127.0.0.1:3319 ESTABLISHED 2116
TCP 127.0.0.1:3319 127.0.0.1:3318 ESTABLISHED 2116
我们可以看到3318这个端口正在被pid为2116的程序占用,于是继续执行
tasklist|findstr “2116”
得到结果
firefox.exe 2116 Console 0 65,956 K
这样,我们就知道是firefox在占用这个端口了……但是奇怪的是,当我关掉firefox再重启,它也不会再继续占用我原来的端口了……可能是因为firefox会随机占用一下,所以导致我原来想使用的端口被占用吧……这不巧了么这不是啊?
然后,因为菜狗肉壳最近买了一台mac,所以考虑到mac也会出现这种情况,该怎么办呢?
mac下相对比较简单,只需要一条命令
lsof -i -n | grep 3318
这样就可以看到哪个程序占用了这些端口,就是这样……
之前刚开始玩的时候,因为手头只有少量邀请码,所以只能发放一个……
经过不到两个月的努力,本人手里已经聚集了10余个Civitas邀请码,希望有志向相投的朋友一起努力,在Civitas的世界里打出一番天下。
再简单介绍一下什么是Civitas吧,Civitas(http://civitas.soobb.com)是一款模拟古代社会的网页游戏,游戏里没有任何NPC,所有事件都是由游戏里面的玩家所决定的。换句话说,这游戏就是一个真的社会,如果玩家数组够多的话,用来做社会研究也不为过。是不是觉得高端洋气上档次?
这是一个没有结局的游戏,也是一个有多样结局的游戏,结局如何,完全取决于你自己。跟我们踏浪寻星社一起踏足这片土地吧!
只要留下你的邮箱,我会尽快回复你一个邀请码!