wordpress做api接口

我在想在wordpress中如何写一个api接口,请求这个网址,可以获取最新文章列表,一般通常的做法是新建一个php文件,接收几个参数,查询数据库,用json格式返回数据就行了,当然wordpress也可以这样弄,wordpress插件很强大,有没有这样的插件呢,上网找了一下,果然有。 一款叫JSON API的wordpress插件正是我要的功能,并且更全面,它可以返回最新文章,类别,作者,文章详情,就是在wordpress中几乎所有的内容都可以通过它来获取json格式的数据,它甚至可以通过传递json数据实现文章评论、用户注册。 有了这样一款插件,关键是有了这样一个api接口,可以不用费劲自己写api了,但是可以用来做什么呢? 比如我想做个微信公共帐号,用户输入1,返回最新文章列表,根据用户输入返回不同的内容,这就要请求api地址返回json格式的数据。 插件安装地址:http://wordpress.org/plugins/json-api/ 安装好后,使用方法如下(本文只介绍几个常见的,其他的请参加文档): 隐式调用: http://www.example.org/?json=1(返回该站全部json格式数据) http://www.example.org/?p=47&json=1(返回文章id为47的json数据) http://www.example.org/tag/banana/?json=1(返回标签是banana的json数据) 显示调用: http://www.example.org/?json=get_recent_posts(返回最新文章json数据,默认返回很多字段,可以指定) http://www.example.org/?json=get_post&post_id=47(返回id为47的文章json数据) http://www.example.org/?json=get_tag_posts&tag_slug=banana(返回tag标签是banana的json数据) 链接友好型调用: http://www.example.org/api/get_recent_posts/ http://www.example.org/api/get_post/?post_id=47 http://www.example.org/api/get_tag_posts/?tag_slug=banana API返回的json数据如下: 可以看到,返回的内容太多了,也许我们只要最新列表中的标题和链接就够了。 http://www.example.org/api/get_recent_posts/?callback=show_posts_widget&read_more=More&count=3 有很多参数可以选,比如count为返回的文章数目,参考官方文档吧。 (本文为小谈博客原创,转载请注明出处!) 本文链接:http://www.tantengvip.com/2013/12/wordpress-api/

2014年5月23日 · 1 分钟 · 天边的星星

Using Custom Compound Views in Android

On a recent client app, I ran into a situation where I needed an arbitrary number of EditText fields based on a selected value, where the user could enter people’s information. My initial thought was to put this logic in my Fragment, just adding EditTexts to a LinearLayout container as the selected value changes, but that bloated my Fragment, and didn’t allow for much reuse. ![](http://ryanharter.com/images/posts/compound_views/compound_friend_view.png) This was a perfect opportunity to encapsulate this interaction functionality in a custom view, which would be reusable throughout the app (required in two places so far), and would allow me to easily test the encapsulated functionality. # What Are Custom Compound Views The Android framework provides many Views and Layouts, but sometimes developers need to create their own. Sometimes these are extensions of the built in class to add functionality, like supporting custom fonts and letter spacing in TextViews. Other times these are simply because a built in view doesn’t exist for the desired functionality, like radial dials. What I’m talking about are custom compound views, views that are made up of multiple other views, whether those are builtin or custom, to encapsulate complex interaction and functionality. I use compound views in cases where a full fledged Fragment is more than I need, but I want reusable, testable components. The example I explained above is a great example of that. Since the code for that was for a client project, I’ve created a simple project to demonstrate creating and using custom compound views available [here](https://github.com/rharter/CompoundViews). # The Custom View In this example, we want a custom view that adds EditTexts so that the user can enter data for an arbitrary number of items. In a custom view, this can easily be done with a simple container view (LinearLayout) that sets the appropriate number of EditTexts, and allows you to easily fetch a list of names. Here’s the code: <div class="highlight" style="font-weight: inherit; font-style: inherit;"> <table style="font-weight: inherit; font-style: inherit;"> <tr style="font-weight: inherit; font-style: inherit;"> <td class="gutter" style="font-style: inherit;"> ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 ...

2014年5月20日 · 14 分钟 · 天边的星星

websocket开发第一篇

客户端与服务端基于HTTP和WebSocket网络协议来通讯,其中HTTP用于从客户端向服务端的请求,WebSocket用于从服务端向客户端的推送,因此服务器端需要支持HTTP和WebSocket两种协议。HTTP好说,所有Web服务器都支持,而支持WebSocket的倒不多。 Java阵营:Tomcat 7和Netty .Net阵营:System.Net.WebSockets Nodejs阵营:Socket.io WebSocket百度百科 1)Web通信的演进 2)WebSocket 3)WebSocket在Apache Tomcat 7(7.0.27 )的实现 4)怎样用Jaggery开发WebSocket特性 Tomcat 7中引入了WebSocket实现。下面我们先了解WebSocket的优缺点,其次简要介绍Apache Tomcat 7的WebSocket实现。 WebSocket的演进过程如图所示: 要知道在Tomcat 6中要实现双向HTTP通信,需要使用Tomcat的Comet处理模块。Comet有以下局限: 1)HTTP协议本身是请求/响应协议,而不是双向协议 2)代理和其它中间媒介不会工作的很好 3)在任何给定的时间只有某个方向的数据包传输 4)Servlet开发者要使用多线程很难 Servlet 3.0版引入了一个新特征:异步Servlet。我们把它与客户端的Ajax调用进行比较。异步Servlet会把请求悬挂起,直到响应准备好交付,无需在容器中使用worker线程。WebSockets是另一个尝试标准化的技术,它支持HTTP之上的异步、事件驱动和全双工通信。 WebSocket给我们带来了如下特性: 1)通过升级/交换HTTP协议,在HTTP之上提供全双工通信 2)基于消息/帧的通信 3)可以与代理和中间媒介一起工作 4)还可以不与代理和中间媒介一起工作 WebSocket的优点: 1)WebSocket是理想的,客户端和服务器之间不再需要长期运行的会话 2)WebSocket是HTTP协议之上的全双工通信 3)由于WebSocket是HTTP握手初始化之后的TCP之上的协议,所以你只需做两件事: 发送消息 接收消息

2014年5月20日 · 1 分钟 · 天边的星星

android的PreferenceActivity

前言 这段时间在研究android平台上的开源项目——StandupTimer,这是由jwood所设计的一个较为简单android应用,用于控制会议时间,类似秒表倒计时。 PreferenceActivity PreferenceActivity是android提供的对系统信息和配置进行自动保存的Activity,它通过[SharedPreference](http://developer.android.com/reference/android/content/SharedPreferences.html)方式将信息保存在XML 文件当中。使用PreferenceActivity不需要我们对SharedPreference进行操作,系统会自动对Activity 的各种View上的改变进行保存(这个真是太赞了!)。 在android项目中添加一个 android xml 文件需要注意的是这次选择的是 Preference。而不是以往的Layout ![](http://pic002.cnblogs.com/img/xinsuhui/201009/2010090109571786.gif) 这个文件是保存在 res /xml 路径下的。 PreferenceScreen xml preference下的View是有限的,只有下面几个: - CheckBoxPreference:CheckBox选择项,对应的值的ture或flase - EditTextPreference:输入编辑框,值为String类型,会弹出对话框供输入。 - ListPreference: 列表选择,弹出对话框供选择。 - Preference:只进行文本显示,需要与其他进行组合使用。 - PreferenceCategory:用于分组。 - RingtonePreference:系统玲声选择 更多关于 PreferenceScreen的介绍可以查看博客园上的一篇文章:[Android之PreferenceActivity](http://www.cnblogs.com/wservices/archive/2010/07/08/1773449.html) ![复制代码](http://common.cnblogs.com/images/copycode.gif) <div> <span style="color: #0000ff;"><?</span><span style="color: #ff00ff;">xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;</span><span style="color: #0000ff;">?></span> «/span>PreferenceScreen xmlns:android=”http://schemas.android.com/apk/res/android”> «/span>CheckBoxPreference android:key=”sounds” android:title=”@string/play_sounds” android:summary=”@string/play_sounds_summary” android:defaultValue=”true”></CheckBoxPreference> «/span>EditTextPreference android:key=”warning_time” android:title=”@string/warning_time” android:summary=”@string/warning_time_summary” android:defaultValue=”15″ android:inputType=”phone” android:digits=”0123456789″></EditTextPreference> «/span>CheckBoxPreference android:key=”unlimited_participants” android:title=”@string/unlimited_participants” android:summary=”@string/unlimited_participants_summary” android:defaultValue=”false”></CheckBoxPreference> «/span>CheckBoxPreference android:key=”variable_meeting_length” android:title=”@string/variable_meeting_length” android:summary=”@string/variable_meeting_length_summary” android:defaultValue=”false”></CheckBoxPreference> </PreferenceScreen> ...

2014年5月16日 · 2 分钟 · 天边的星星

开源2D HTML5渲染引擎CutJS

CutJS是一款专门用于跨平台游戏开发的开源2D HTML5渲染引擎,轻量级、快速、可交互,CutJS的优势可谓颇多。CutJS基于MIT许可协议发布,由Piqnt软件工作室推出,支持现代浏览器和移动设备,可用于Web、iOS、Android、Win8、Facebook、Chrome Web Store等平台游戏应用开发。 作为HTML5中新晋的标签元素,Canvas提供了基于JavaScript的2D和Bitmap图形API,但却没有像DOM之类的数据模型来帮助开发者编写应用,开发者必须手动绘制应用并对渲染循环进行管理以实现播放Canvas图形。此外,鼠标事件也只适用于整个Canvas层,并且还需手动处理。 而CutJS可以非常良好地解决这些问题。CutJS为开发者提供了一个类似于DOM树的数据模型来编写应用程序,并在内部管理渲染周期和应用绘制,还能处理并向目标树节点分发鼠标事件。 (文/唐小引 责编/刘璐璐) 传送门:CutJS官网、GitHub托管地址、mobilehub主页

2014年5月15日 · 1 分钟 · 天边的星星

开发者必备的十二大Android开发资源

无论你是经验丰富的专业Android开发者,还是初出茅庐的新人,开发应用最忌讳的就是闭门造车。不能把自己圈在自己的思维里,要学会借助外在现有的资源去协助开发,这样既不会让自己固步自封,还能够大大提高工作效率。在这里,本文介绍的这些资源包括工具、库和网站等,学会利用它们,将会对你的工作有着非常大的帮助。 1. OkHttp OkHttp是Square的一款产品,是一个Java的开源HTTP和SPDY客户端开发包,支持Android。Android自带的两个HTTP框架(HttpURLConnection和HttpClient),在各种Android OS版本一直充斥着错误,可以使任何理智的开发者走向崩溃。不过幸运地是,OkHttp解决了这些问题。OkHttp是建立在HttpUrlConnection上,从Android代码库保持最新的修复,这意味着再也没有与旧操作系统版本出现兼容性问题的噩梦。 相关链接:OkHttp的mobilehub主页 2. Retrofit Retrofit同样是Square的一款开源产品,用于Android平台的一个类型安全的REST客户端。就API而言,Android平台并不适合过多简单的客户端服务器交互,而Retrofit旨在提高对REST请求。Retrofit支持相当多的自定义,使用GSON为JSON解析,并且通过简化这一切成为简单的接口来为为构建形式和多部分请求节省大量的时间。 相关链接:Retrofit的mobilehub主页 3. Picasso 这个仍然是Square的开源项目,Picasso是一个用于Android平台上的下载和缓存图片的项目。它有许多定制选项,如何处理下载图片(包括调整和裁剪,以及提供一个接口让你随自己心意将图片转换成圆角等)。Picasso将要下载的图片(如果没有缓存)并将它负载到指定的目标,转换图片以适合所显示的ImageView,来减少内存消耗。 相关链接:Picasso的mobilehub主页 4. AndroidViews AndroidViews.net是一个网站,汇集了众多不同类型的工具、库和可浏览索引的资源。你不用重新开发已有的东西,可以节省很多时间。不过它还存在一个缺点就是,网站还不全面。 相关链接:AndroidViews的mobilehub主页 5. Android Weekly Android Weekly相当于是Android开发社区的实时通讯录,每周报导Android最新讯息,包括新的库、工具和博客等,只要你有Email,就可以对其进行订阅,了解更多关于安卓的消息。 相关链接:Android Weekly的mobilehub主页 6. Android Niceties Android Niceties集合了Android生态系统中一些精心设计、优雅精美的Android程序,是启发灵感的好资源。Android Niceties覆盖面极好,来自主要的平台应用比如Duolingo、Expedia、Etsy和之前依序还不为人知的Muzei、Timely和Pocket。 相关链接:Android Niceties的mobilehub主页 7. Android Lifecycle 展现了完整的Android片段和Activity的生命周期,Activity从新建到销毁,构成了一个生命周期,但要知道生命周期并不仅仅只包括这两个。而Android Lifecycle打印出的表图概述了Activity与Fragment在应用内部与外部和用户交互的流。 相关链接:Android Lifecycle的mobilehub主页 8. Android Asset Studio 这个网站已提供了大量的工具来简化创建各种Android相关的资源,包括启动栏图标、通知图标和导航抽屉图标等,让你不再为设计应用图标而发愁。 相关链接:Android Asset Studio的mobilehub主页 9. Android Holo Colors Generator 制作更加精美的图标,可以前往Android Asset Studio进行设计。该网站提供应用所需要的所有图标的生成工具,包括菜单图标、动作栏图标、标签栏图标、通知图标等,而且操作简单易行。 相关链接:Android Holo Colors Generator的mobilehub主页 10. DPI Calculator for Android 就像它的名字一样,这是一款专门用于Android平台的分辨率计算器,使用很简单,用户通过输入长、宽、对角线等,就可以计算出屏幕的实际分辨率来。 11. Android Developers YouTube Channel ...

2014年5月15日 · 1 分钟 · 天边的星星

安卓图片OCR识别技术 tesseract研究文档

针对安卓APP的 OCR图片识别技术研究与 DEMO: 鉴于大家都给我发私信要源码:现在更新源码 在下载(由于最近CSDN下载分不够了。。所以要了10分 还希望大家理解哦) http://download.csdn.net/detail/wei2253498/7146411 通过近端时间的在网络上的学习,了解了俩个OCR的技术,包括tesseract 和 openCv这俩个技术 主要研究了tesseract的OCR技术,并通过模拟器做了个demo app下面与大家分享过程,希望共同进步。 Tesseract OCR引擎是1995年UNLVAccuracy大赛中的排名前三的引擎。1995年到2006年间,它没有大的改进;之后,它被谷歌大幅改进,很可能是识别率最高的可用开源OCR引擎之一了。结合Leptonica图像处理库,它能读取各种各样格式的图像文件,识别出超过40多种语言的文本。 Tesseract的下载地址为: http://code.google.com/p/tesseract-ocr/downloads/list Tesseract for android 的 tess-two下载地址为: https://github.com/rmtheis/tess-two/archive/master.zip 接下来需要对下载下来的tess-two进行编译 如何用android ndk进行so的编译我放在了另外的一个文档中,大家请参考 也可以直接下载编译好的tess-two so文件 http://download.csdn.net/detail/uniquerhythm/5166651 编译好后,将src下的两个包以及libs导入到自己的项目就可以用啦 接下来我们还需要 tessract的android jar包 Android官方地址:tesseract-android-tools http://code.google.com/p/tesseract-android-tools/downloads/list?can=1&q= 但它必须要一个匹配库,即tessdata,我们可以从官方拷贝,在前面git的项目里面tesseract源码目录有现成的tessdata可以用,对于中文,googlecode上也有下载,当然也可以自己训练不同语言的tessdata。 包leptonica的类我们不必使用,只要使用tess包的类就行了 下面是 tessBaseAPI的主要用法 TessBaseAPI **[java]** [view plain](http://blog.csdn.net/wei2253498/article/details/8748741#)[copy](http://blog.csdn.net/wei2253498/article/details/8748741#)[print](http://blog.csdn.net/wei2253498/article/details/8748741#)[?](http://blog.csdn.net/wei2253498/article/details/8748741#)[![在CODE上查看代码片](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/274921)[![派生到我的代码片](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/274921/fork) <div> </div> </div> - <span style="color: black;"><span class="comment" style="color: #008200;">//////////////////////华丽的分割线//////////////////////////////////////////////////////</span> </span> - <span style="color: black;"> </span> - <span style="color: black;">TessBaseAPI baseApi=<span class="keyword" style="font-weight: bold; color: #006699;">new</span> TessBaseAPI(); </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//初始化tess</span> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//android下面,tessdata肯定得放到sd卡里了</span> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//如果tessdata这个目录放在sd卡的根目录</span> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//那么path直接传入sd卡的目录</span> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//eng就是英文,关于语言,按ISO 639-3标准的代码就行,具体请移步wiki</span> </span> - <span style="color: black;">baseApi.init(<span class="string" style="color: blue;">&#8220;tessdata文件夹的父级目录&#8221;</span>,<span class="string" style="color: blue;">&#8220;eng&#8221;</span>); </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//options是为了缩放图片,这个酌情缩放,图片小的话可以不缩放</span> </span> - <span style="color: black;">BitmapFactory.Options options=newBitmapFactory.Options(); </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//缩小为原来的1/2</span> </span> - <span style="color: black;">options.inSampleSize=<span class="number" style="color: #c00000;">2</span>; </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//bitmap,我这里是以流的形式,只要能形成Bitmap就行</span> </span> - <span style="color: black;">Bitmap bitmap = BitmapFactory.decodeStream(instream,<span class="keyword" style="font-weight: bold; color: #006699;">null</span>,options); </span> - <span style="color: black;"> instream.close(); </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//设置要ocr的图片bitmap</span> </span> - <span style="color: black;">baseApi.setImage(bitmap); </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//根据Init的语言,获得ocr后的字符串</span> </span> - <span style="color: black;">String text= baseApi.getUTF8Text(); </span> ...

2014年5月9日 · 2 分钟 · 天边的星星

实现android图像识别的几种方法

点击这里下载第一种代码 最近完成了毕业设计,论文名为基于图像识别的移动人口管理系统。编写过程中学到了几种图像识别的技术,先写下来与大家分享。 第一种,直接使用免费得图像识别web服务器 地址为http://maggie.ocrgrid.org/ 实现代码:1.为了提高图像的识别率,首先要灰度化 **[java]** [view plain](http://blog.csdn.net/dannor2010/article/details/7073528#)[copy](http://blog.csdn.net/dannor2010/article/details/7073528#) <div> </div> <div> </div> </div> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">private</span> Bitmap convertToGrayscale(Bitmap bitmap) { </span> - <span style="color: black;"> ColorMatrix colorMatrix = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> ColorMatrix(); </span> - <span style="color: black;"> colorMatrix.setSaturation(<span class="number" style="color: #c00000;"></span>); </span> - <span style="color: black;"> Paint paint = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> Paint(); </span> - <span style="color: black;"> ColorMatrixColorFilter cmcf = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> ColorMatrixColorFilter(colorMatrix); </span> - <span style="color: black;"> paint.setColorFilter(cmcf); </span> - <span style="color: black;"> </span> - <span style="color: black;"> Bitmap result = Bitmap.createBitmap(bitmap.getWidth(), bitmap </span> - <span style="color: black;"> .getHeight(), Bitmap.Config.RGB_565); </span> - <span style="color: black;"> </span> - <span style="color: black;"> Canvas drawingCanvas = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> Canvas(result); </span> - <span style="color: black;"> Rect src = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> Rect(<span class="number" style="color: #c00000;"></span>, <span class="number" style="color: #c00000;"></span>, bitmap.getWidth(), bitmap.getHeight()); </span> - <span style="color: black;"> Rect dst = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> Rect(src); </span> - <span style="color: black;"> drawingCanvas.drawBitmap(bitmap, src, dst, paint); </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> result; </span> - <span style="color: black;"> } </span> 2.将灰度化的图像上传到http://maggie.ocrgrid.org/ 方法和类就不说了,有需要的话可以发我邮箱 ...

2014年5月9日 · 1 分钟 · 天边的星星

直接拿来用!Facebook移动开源项目大合集

随着iOS依赖管理工具CocoaPods和大量第三方开源库成熟起来,业界积累了大量的优秀开源项目。不久之前,Facebook推出了旗下移动新闻阅读应用Paper,便动用了将近100个第三方开源库,极大地简化了自己的应用开发任务。 移动开发生态圈日益完善,基础的开源组件也越来越丰富,而Facebook不仅取之开源,更不断地开源其内部项目,将成果反馈给开源社区,与开发者共享。接下来,就让我们一起来看看那些年Facebook在移动开发方面所推出的众多开源项目。 1. KVOController KVOController是Facebook开源的一款简单安全的KVO(Key-Value Observing,键值观察,Objective-C中定义的一个通知机制)工具,用于iOS和Mac OS X应用开发中。KVOController基于Cocoa经过时间考验的KVO实现开发而成,它提供了一个简洁方便、线程安全的API。 主要特性: 使用Blocks、自定义Actions或NSKeyValueObserving回调进行通知; 观测者移除时无异常; 控制器dealloc时移除隐式观测者; 提升使用NSKeyValueObservingInitial的性能; 为恢复观测者提供特殊防护的线程安全。 相关链接:KVOController的GitHub托管地址、mobilehub主页 2. Shimmer Shimmer是一款开源的加载效果工具,能够非常简单地向应用中的任何视图添加闪闪发光的字体效果,并且不会显得突兀。Shimmer最初是Facebook于今年1月所推出的Paper的开发过程中所使用到的工具,后被Facebook基于BSD许可协议开源,支持iOS 6及其以上系统。 相关链接:Shimmer的GitHub托管地址、mobilehub主页 3. Rebound Rebound是Facebook推出的一款Android的物理和动画库,于2013年10月在Mobile@Scale大会上正式发布,旨在解决笨重、缓慢的传统移动网络界面。Rebound基于BSD许可协议,兼容HTML5和Node.js。 Rebound不是一款通用物理库,但其弹簧模型在应用程序中引入了现实世界的物理,易于集成,创建的动画能够让人感觉到非常自然,可用于滚动条、切换开关、呼叫等场景下。 相关链接:Rebound官网、GitHub托管地址、mobilehub主页 4. Buck Buck是Facebook开发的一款开源Android Build工具,基于Apache License 2.0协议发布,可以通过独立构建并行来发挥多核的性能,加速开发者的Android应用构建流程。Buck基于单一的库构建,能够以最小的资源集重建,非常适用于Android项目组织与管理。 主要特性: 加速Android构建。充分发挥多核处理器的优势,并行构建独立模块。通过追踪没有变化的源文件,减少增量构建实践,最少化需要重建的资源。 对于不支持开箱即用的Android Ant编译脚本,引进ad-doc构建系统。 在构建系统里保持生成构建的逻辑,无需另外的系统生成构建文件。 基于构建规则生成一个Intellij项目,能同时匹配本地IDE以及无头文件编译开发。 支持单元测试,选用最均衡的方式获得代码覆盖率。 相关链接:Buck官网、Github托管地址、mobilehub主页 5. xctool xctool是Facebook推出的另一款开源的应用构建工具,基于Apache License 2.0协议发布,用于取代苹果的xcodebuild,来简化iOS和Mac项目的构建和测试。xctool对于持续集成可谓大有裨益,其最大的好处就是可以直接从命令行构建和运行单元测试。 xctool在xcodebuild的基础上还添加了一些额外的功能,比如支持将构建和测试结果结构化输出;界面友好,支持ANSI彩色输出;速度更快,支持进行并行测试,使得运行速度提升2~3倍等。xctool支持Xcode 5+,并且,在使用xctool时必须安装Xcode命令行工具。 主要特性: 作为Xcode.app运行相同的测试; 构建输出和测试结果均为JSON格式,无需解析输出; xctool只有在发现错误的时候才打印消息,而xcodebuild对每个源文件都会打印。 相关链接:xctool的GitHub托管地址、mobilehub主页**** 6. Conceal Conceal是一套用于Android平台上进行文件加密和鉴权的Java API,专为速度设计,小巧而高速。它使用了OpenSSL算法的子集和一些预先定义的选项,能够让库保持在较小的体积。通过它,开发者可以实现对手机、平板电脑SD卡中的数据以及大型文件进行加密和存储。 相关链接:Conceal官网、GitHub托管地址、mobilehub主页 7. Origami 在界面和交互设计上颇让人惊喜的Paper让Facebook的大量开源工具从幕后走向了台前,Origami即为其中之一。这个被盛赞为“交互神器”的设计师新宠,是Facebook设计团队花费了9个月时间开发的一款基于Quartz Composer的插件,能够让设计师无需编程,快速构建移动应用交互原型。 Origami为设计师提供了开关、滚动、弹性动画等一系列自定义控件,并对Quartz Composer进行了改善,比如支持Retina显示器、重新设计工具栏图标等,以帮助设计师更为轻便地实现应用原型交互。 相关链接:Origami官网、GitHub托管地址、mobilehub主页 8. Bolts(iOS / Android) Bolts是一个面向iOS和Android的底层库集合,分别为Bolts-iOS和Bolts-Android,由Facebook和Parse共同设计完成,于2014年1月基于BSD许可协议开源,其所有源码均托管到GitHub上。Bolts能够让移动应用开发变得更加简单,其组件与Parse及Facebook服务完全无关,因此,开发者无需拥有Parse或Facebook开发者账户即可直接使用。 相关链接:Bolts的Github托管地址、mobilehub主页 9. Facebook SDK(iOS / Android) ...

2014年4月29日 · 1 分钟 · 天边的星星

java 网页解析工具包 Jsoup

Jsoup是一个非常好的解析网页的包,用java开发的,提供了类似DOM,CSS选择器的方式来查找和提取文档中的内容。 相关资料如下: 下载地址:[http://jsoup.org/download](http://jsoup.org/download) 中文文档资料:[http://www.open-open.com/jsoup/](http://www.open-open.com/jsoup/) 比较好的文档:[http://www.ostools.net/apidocs/apidoc?api=jsoup-1.6.3](http://www.ostools.net/apidocs/apidoc?api=jsoup-1.6.3) &nbsp; 今天做了一个Jsoup解析网站的项目,使用Jsoup.connect(url).get()连接某网站时偶尔会出现 java.net.SocketTimeoutException:Read timed out异常。 原因是默认的Socket的延时比较短,而有些网站的响应速度比较慢, 所以会发生超时的情况。 解决方法: 链接的时候设定超时时间即可。 doc = Jsoup.connect(url).timeout(5000).get(); 5000表示延时时间设置为5s。 测试代码如下: 1,不设定timeout时: <div class="dp-highlighter bg_java" style="color: #362e2b;"> <div class="bar"> <div class="tools" style="color: silver;"> **[java]** [view plain](http://blog.csdn.net/huangxy10/article/details/8188067#)[copy](http://blog.csdn.net/huangxy10/article/details/8188067#)[print](http://blog.csdn.net/huangxy10/article/details/8188067#)[?](http://blog.csdn.net/huangxy10/article/details/8188067#) <div> </div> </div> </div> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">package</span> jsoupTest; </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> java.io.IOException; </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> org.jsoup.*; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> org.jsoup.helper.Validate; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> org.jsoup.nodes.Document; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> org.jsoup.nodes.Element; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> org.jsoup.select.Elements; </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">public</span> <span class="keyword" style="font-weight: bold; color: blue;">class</span> JsoupTest { </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">public</span> <span class="keyword" style="font-weight: bold; color: blue;">static</span> <span class="keyword" style="font-weight: bold; color: blue;">void</span> main(String[] args) <span class="keyword" style="font-weight: bold; color: blue;">throws</span> IOException{ </span> - <span style="color: black;"> String url = <span class="string" style="color: red;">&#8220;http://www.weather.com.cn/weather/101010400.shtml&#8221;</span>; </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">long</span> start = System.currentTimeMillis(); </span> - <span style="color: black;"> Document doc=<span class="keyword" style="font-weight: bold; color: blue;">null</span>; </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">try</span>{ </span> - <span style="color: black;"> doc = Jsoup.connect(url).get(); </span> - <span style="color: black;"> } </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">catch</span>(Exception e){ </span> - <span style="color: black;"> e.printStackTrace(); </span> - <span style="color: black;"> } </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">finally</span>{ </span> - <span style="color: black;"> System.out.println(<span class="string" style="color: red;">&#8220;Time is:&#8221;</span>+(System.currentTimeMillis()-start) + <span class="string" style="color: red;">&#8220;ms&#8221;</span>); </span> - <span style="color: black;"> } </span> - <span style="color: black;"> Elements elem = doc.getElementsByTag(<span class="string" style="color: red;">&#8220;Title&#8221;</span>); </span> - <span style="color: black;"> System.out.println(<span class="string" style="color: red;">&#8220;Title is:&#8221;</span> +elem.text()); </span> - <span style="color: black;"> } </span> - <span style="color: black;">} </span> </div> **<span style="color: #362e2b;">有时发生超时:</span> <span style="color: #ff0000;">java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at java.io.BufferedInputStream.fill(Unknown Source) at java.io.BufferedInputStream.read1(Unknown Source) at java.io.BufferedInputStream.read(Unknown Source) at sun.net.www.http.ChunkedInputStream.fastRead(Unknown Source) at sun.net.www.http.ChunkedInputStream.read(Unknown Source) at java.io.FilterInputStream.read(Unknown Source) at sun.net.www.protocol.http.HttpURLConnectionHttpInputStream.read(Unknown Source) at java.util.zip.InflaterInputStream.fill(Unknown Source) at java.util.zip.InflaterInputStream.read(Unknown Source) at java.util.zip.GZIPInputStream.read(Unknown Source) at java.io.BufferedInputStream.read1(Unknown Source) at java.io.BufferedInputStream.read(Unknown Source) at java.io.FilterInputStream.read(Unknown Source) at org.jsoup.helper.DataUtil.readToByteBuffer(DataUtil.java:113) at org.jsoup.helper.HttpConnectionResponse.execute(HttpConnection.java:447) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:393) at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:159) at org.jsoup.helper.HttpConnection.get(HttpConnection.java:148) at jsoupTest.JsoupTest.main(JsoupTest.java:17) Time is:3885ms Exception in thread “main” java.lang.NullPointerException at jsoupTest.JsoupTest.main(JsoupTest.java:25) ...

2014年4月29日 · 4 分钟 · 天边的星星