[Ruby][MySQL] Yahoo Blog APIから取得したBlog情報をSequelを使ってDBに保存する
なんとなく前回の続き。Sequelいい感じですね。
Sequelを使えばAdapterさえあればMySQLでもPostgreSQLでもSQLite3でもほぼ同等な処理がSQLライク(かどうかは謎。。)で使えます。
ちなみに実験用のソースなんでDBのテーブル制約とかは特につけてないです。
require 'yahoo_blog'ってのは前の投稿で書いといた奴です。
# -*- coding: utf-8 -*- require 'rubygems' require 'sequel' require 'yahoo_blog' ## DB接続 + テーブル作成 ## # enocoding => utf8? # 日本語utf8にしなきゃいけないって記事があったのですが、自分の環境だと問題無し。 options = {} # user pass mydbは環境に応じて変更。。 DB = Sequel.connect('mysql://user:pass@localhost/mydb', options) # テーブルがない場合テーブルを作成(for yahoo blog data) # BlogIdっているのかな。。 DB.create_table? :yahoo_blog do primary_key :id String :Query String :BlogId String :RssUrl String :Title Text :Description String :Url String :Creator String :MobileLink String :SiteTitle String :SiteUrl DateTime :DateTime end ## yahoo blogデータの取得 query = "涼宮春日的憂鬱" yobj = Yahoo_blog_search.new(query) blog_data = yobj.get_all_processing_data ## BlogデータのDBへの挿入 yblog = DB[:yahoo_blog] ## テーブルにyahoo blogデータを導入する blog_data.each do |i| yblog.insert(:BlogId => i["Id"], :Query => query, :RssUrl => i["RssUrl"],:Title => i["Title"], :Description => i["Description"] , :Url => i["Url"], :Creator => i["Creator"],:MobileLink => i["mobileLink"], :SiteTitle => i["SiteTitle"] , :SiteUrl => i["SiteUrl"], :DateTime => i["DateTime"] ) end ## 導入したデータの出力 puts "Blog count: #{yblog.count}" yblog.each do |i| puts " Query: #{i[:Query]} Title: #{i[:Title]} DateTime #{i[:DateTime]}" end
テーブルカラムがキャメルケースなのは如何なものかと。まあ、yahoo apiの出力結果に合わせただけなんですが。
上記のソースを実行すると以下のような出力がされまする。とりあえずテーブルにデータが入ってるのが分かるかと思います。
DateTimeをformat変更しないでも導入出来る点が大変よろしいかと。
Blog count: 35 Query: 涼宮春日的憂鬱 Title: 交響情人夢 - のだめ中国語版 DateTime 2009-10-30 23:55:46 +0900 Query: 涼宮春日的憂鬱 Title: diary DateTime 2009-08-24 23:59:59 +0900 Query: 涼宮春日的憂鬱 Title: [Nico字幕組] 涼宮春日的憂鬱「飛〓!巨乳的天使(朝比奈實久瑠)」 DateTime 2009-07-02 01:00:00 +0900 Query: 涼宮春日的憂鬱 Title: [Nico字幕組] 涼宮春日的憂鬱「我的家人不行〓」ver.2 DateTime 2009-07-01 01:00:00 +0900 Query: 涼宮春日的憂鬱 Title: 100K+1紀念篇之2 組曲「涼宮春日的憂鬱」 DateTime 2009-06-28 01:00:00 +0900 Query: 涼宮春日的憂鬱 Title: 「萌え本」の多様化・国際化の歴史 DateTime 2008-12-27 15:31:19 +0900 Query: 涼宮春日的憂鬱 Title: 台湾旅行レポ〜2日目〜その1 DateTime 2008-07-20 22:51:13 +0900 ...
ちなみにSequelで作られたテーブルをMySQLでカラム情報確認すると以下のようになってるのが分かります。
Stringがvarchar(255), textがtext, datetimeがdatetimeといった感じで作られてますね。
mysql> SHOW COLUMNS FROM yahoo_blog; +-------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | Query | varchar(255) | YES | | NULL | | | BlogId | varchar(255) | YES | | NULL | | | RssUrl | varchar(255) | YES | | NULL | | | Title | varchar(255) | YES | | NULL | | | Description | text | YES | | NULL | | | Url | varchar(255) | YES | | NULL | | | Creator | varchar(255) | YES | | NULL | | | MobileLink | varchar(255) | YES | | NULL | | | SiteTitle | varchar(255) | YES | | NULL | | | SiteUrl | varchar(255) | YES | | NULL | | | DateTime | datetime | YES | | NULL | | +-------------+--------------+------+-----+---------+----------------+ 12 rows in set (0.01 sec)
単純にMySQLでデータを見ると以下のような感じで格納されているのが確認されまする。
mysql> SELECT url FROM yahoo_blog; +----------------------------------------------------------+ | url | +----------------------------------------------------------+ | http://blogs.yahoo.co.jp/nakkun_xiaren/59920937.html | | http://d.hatena.ne.jp/bsiyo/20090824/1251125999 | | http://nico.pixnet.net/blog/post/28514416 | | http://nico.pixnet.net/blog/post/28504268 | | http://nico.pixnet.net/blog/post/28462212 | ..
ちなみに自分が欲しかった、Yahoo Blog APIのDescription(Blogの詳細情報)はBlogの本体情報の始めの部分?をN文字以内にしてsubstringした感じの内容なので、Blogの本体データが欲しい場合はあともう一段階処理する必要がありさうですね。。。
まあ何をしたかったかというと、LSA(潜在意味解析)をBlog情報を元に実行してナニかの類似度を計りたいなーと思っていたところです。。
後はblogのUrl情報からBlog本文情報とってくりゃ終わりですが、はてさて