老码农分享 http://blog.sciencenet.cn/u/seawan //敲键读书打酱油;

博文

一个简单的微应用例子:帮我译单词

已有 3503 次阅读 2011-8-13 10:05 |个人分类:教学|系统分类:教学心得| 微博, 微应用

任何新浪微博帐号,
只要发布一条包含有“@帮我译”的信息,
即可在评论中获得该信息中的单词的释义。
例如:

hello @帮我译
或者
@帮我译 hypotheses
或者
中文 @帮我译
或者
@帮我译 单词

上面四种格式都可以。

作为一个简单的应用,不需要授权,不需要专用服务器,只需要将该程序运行一下,然后所有新浪用户就都可以用了。
当然新浪限制普通用户:
发评论:单用户每应用 60次/小时
这样这个应用不可能应对大量的输入请求,只是作为一个例子。

其主函数很简单:
public BangWoYi() {
try {
/* 1.这是“帮我译”应用的App key信息 */
Weibo.CONSUMER_KEY = "164xxxxxxxx";
Weibo.CONSUMER_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxx";
System.setProperty("weibo4j.oauth.consumerKey", Weibo.CONSUMER_KEY);
System.setProperty("weibo4j.oauth.consumerSecret",Weibo.CONSUMER_SECRET);

// 然后才能初始化Weibo对象!!!
weibo = new Weibo();

/* 2.这是对“帮我译”这个帐号的access 凭据 */
weibo.setToken("e50xxxxxxxxxxxxxxxxxxxxxxxxxx", "536xxxxxxxxxxxxxxxxxxxxxxx");

/* 然后,就可以对“帮我译”这个帐号进行操作了。 */
/* 每5秒执行一次,检查是否有@我的微博,如有则回复 */
timer.schedule(ckAtMe, 0, 60000);
} catch (Exception e) {
System.out.println("Failed: " + e.getMessage());
System.exit(-1);
}
}

上面ckAtMe是一个定时器(Timer),用来每分钟检查一下@这个帐号的微博信息。

精简以后的定时器代码示例如下:
TimerTask ckAtMe = new TimerTask() {
public void run() {
List<Status> list;
try {
list = weibo.getMentions(paging);
for (Status status : list) {
long id = status.getId();
if (id > lastId) {
lastId = id;
paging.setSinceId(lastId);
}
String word = status.getText().replaceAll("@帮我译", "");
// 最去掉可能的前后标点、空格等多余字符(略)

// 使用apache的org.apache.commons.httpclient.HttpClient获得翻译
HttpClient client = new HttpClient();
//从某个在线词典网站(url)获得解释
GetMethod get = new GetMethod(url+weibo4j.util.URLEncodeUtils.encodeURL(word));// 需要(只需要)加码汉字部分

// 执行这个get,and handle any error responses.
client.executeMethod(get);

InputStream in = get.getResponseBodyAsStream();
BufferedReader br = new BufferedReader( new InputStreamReader(in));

// 从这个input stream提取文本
String pagetext = "";
String c;
while ((c = br.readLine()) != null) {
pagetext += c;
}
get.releaseConnection();

// 根据某些标志提取解释文本
int p1 = pagetext.indexOf("基本解释");// 开始标志
int p2 = pagetext.indexOf("Copyright");// 结束标志
pagetext = pagetext.substring(p1,p2);
//System.out.println(pagetext);//假设pagetext不超长
weibo.updateComment(pagetext, id + "",null);
}

} catch (Exception e) {
e.printStackTrace();
}
}
};

注:上面代码简化了,不能直接运行,仅作为流程示范。



https://wap.sciencenet.cn/blog-461456-474713.html

上一篇:募捐! - 【非常有创意!立人乡村图书馆】
下一篇:Nitch Test: 创意点子简单评估
收藏 IP: 113.59.89.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-18 22:53

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部