スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

rubyでdeliciousのデータを取得

「集合知プログラミング」の「推薦する」にあるdeliciousのデータを取ってくるところを、rubyで書いてみました。

本当は、リコメンデーションの部分を作りたかったのですが、データ打ち込むのめんどくさかったので、まずデータを取ってくるところから作ってみました。

# coding:utf-8
require 'rss'
require 'digest/md5'

# RSSオブジェクトを取得する
def getRss url
rss = nil
begin
rss = RSS::Parser.parse(url)
rescue RSS::InvalidRSSError
rss = RSS::Parser.parse(url, false)
end
return rss
end

# ポピュラーなリンクを取得する
def getPopular tag
url = "http://feeds.delicious.com/v2/rss/popular/#{tag}"
rss = getRss(url)
result = []
rss.items.each {|it|
row = {
"title" => it.title,
"url" => it.link
}
result << row
}
return result
end

# あるリンクの登録ユーザを取得する
def getUrlposts link
hs = Digest::MD5.hexdigest(link)
url = "http://feeds.delicious.com/v2/rss/url/#{hs}"
rss = getRss(url)
result = []
rss.items.each {|it|
row = {
"user" => it.dc_creator
}
result << row
}
return result
end

# ユーザ一覧初期化
def initializeUserDict tag, count=5
userDict = {}
populars = getPopular(tag)
for i in 0..count
users = getUrlposts(populars[i]["url"])
users.each {|it|
userDict[it["user"]] = {}
}
end
return userDict
end

# ユーザのポストを取得
def getUserPosts user
url = "http://feeds.delicious.com/v2/rss/#{user}"
for i in 0..2
rss = getRss(url)
if nil != rss
break
end
sleep 4
end
if nil == rss
return nil
end
result = []
rss.items.each {|it|
row = {
"url" => it.link
}
result << row
}
return result
end

# アイテム情報を取得
def fillItems userDict
allItems = []
userDict.each_key {|user|
posts = getUserPosts(user)
if nil == posts
next
end
posts.each {|post|
url = post["url"]
userDict[user][url] = 1.0
allItems << url
}
}
userDict.each_value{|data|
allItems.each{|url|
if !data.key?(url)
data[url] = 0.0
end
}
}
end

#ユーザデータ取得
userDict = initializeUserDict("lifehack")
# 自分追加
userDict["zibunzisin"] = {}
# 点数を計算
fillItems(userDict)

# 結果をrubyの大域変数として保存
puts "# coding:utf-8"
puts "$critics = "
puts userDict

上のソースをreco.rbとすると、「ruby reco.rb >data.rb」として実行しています。
実行すると結構時間がかかります。data.rbは6MBを超えました。
データは別ファイルにして、大域変数として宣言して、他のファイルから利用するようにしました。

load 'data.rb'
puts $critics["zibunzisin"]
スポンサーサイト

Tag : 集合知プログラミング

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。