浏览 4360 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-22
最后修改:2009-02-22
JavaEye的闲聊api做些什么:
昨天和ouspec闲聊谈到可以用http://quake.iteye.com/blog/chat/1766 引用 用JavaEye的闲聊API可以做什么?举例子:你可以注册一个账号,写个小程序从某个"专讲冷笑话"的网站定时抓取,然后用闲聊方式发布,大家只要订阅这个账号就可以享受到每天N个冷笑话的洗礼。
今天试了一下,不过改成了抓取百度MP3新歌Top 100,将最新上榜的歌曲名称,百度搜索链接,另外加3个可以直接下载的url,看看效果: http://baidump3.iteye.com/blog/chat 完整代码在文章最下面,主要用hpricot和open-uri来抓取,其中破解百度MP3的加密用到了这篇文章中提到的:http://suninny.iteye.com/blog/234635,另外用到了tinyurl提供的api来减少url的长度。 你可以将baidump3这个用户加入到你的订阅,就可以获得最新上榜的mp3信息,大家可以讨论看还可以用JavaEye的闲聊API做写什么? require 'rubygems' require 'hpricot' require 'open-uri' require 'iconv' def _mktab(x) t0 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" p = t0.partition(x) p[1] + p[2] + p[0] end def decode(s) s.tr(_mktab(s[0].chr), s=~ /....:\// ? _mktab('h') : _mktab('f')) #http|ftp end def tiny_url(url, encode = false) result = open(encode ? URI.encode("http://tinyurl.com/api-create.php?url=#{url}") : "http://tinyurl.com/api-create.php?url=#{url}").read result =~ /^Error/ ? url : result end def actual_download_url(search_url, limit = 2) doc = Hpricot(open(search_url)) doc.search("table#Tbs td.d a").map{|a| a.attributes["href"]}[0..limit].map {|url| decode(open(URI.encode(url)).read[/var I="([^"]*)"/, 1]) } end def get_maidu_mp3_top100 url = "http://list.mp3.baidu.com/list/newhits.html" doc = Hpricot(Iconv.conv("UTF8", "GBK", open(url).read)) result = {} doc.search("table.list td:not(.th)").each{|t| name = t.inner_text.gsub(/\s+/, " ") search_url = t.search("a")[0].attributes["href"] result[name] = search_url } return result end def get_new_data local_data = File.open('data.yaml') { |file| YAML::load(file) } rescue {} remote_data = get_maidu_mp3_top100 new_data = {} remote_data.each_pair { |key, value| unless local_data.has_key?(key) local_data[key] = value new_data[key] = value end } File.open('data.yaml', 'w') { |file| YAML.dump(local_data, file) } return new_data end def update_javaeye_chat(username, password) get_new_data.each_pair { |key, value| message = "#{key} 搜索 #{tiny_url value}" actual_download_url(value).each_with_index{|url, index| message << " 下载#{index+1} #{tiny_url(url, true)}" } open(URI.encode("http://www.iteye.com/api/twitters/create?body=#{message}"), :http_basic_authentication=>[username, password]).read } end update_javaeye_chat("javaeye用户名", "javaeye密码") 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-03-06
以前也曾经尝试用python做过类时的东西,不过是去豆瓣自动获取一张专辑所有的歌曲列表,然后利用一个百度未公开的API,根据歌曲和歌手来查询到可以下载的链接,然后再去ping这些链接,看看是否有效,最后再自动去下载
不过后来发现百度搜索的结果并不是很精确,或者要搜索专辑的歌太新 |
|
返回顶楼 | |