Mushikago SDK for Ruby.

  • Homepage: http://www.mushikago.org/
  • Author: MiningBrownie
  • Copyright: 2011
  • License: Apache License, Version 2.0
  • Latest Version: 2.4.3
  • Release Date: Oct 25th 2012

概要

株式会社マイニングブラウニーが提供するmushikago web serviceを、Rubyから扱うためのライブラリです。

機能一覧

1.mitsubachiを利用する: mitsubachiはウェブサイトをクローリングするためのクラウドプラットフォームサービスです。 環境構築などの準備を一切必要とせず、ユーザーは簡易なスクリプトをmitsubachiサーバにアップロード するだけで、ウェブ上の欲しい情報を高速に収集し保存します。ユーザーは、少しの技術力とアイデアを持っていれば、新たなクローラビジネスを始める事ができます。

2.hotaruを利用する: hotaruとは、自然言語処理を行うSaaS型のサービスです。 hotaruは日本語や英語など、多言語の解析に対応でき、それらの機能を初期費用が掛からず安価なコストから利用できます。また、同じmushikagoのサービスであるmitsubachiを使って、ウェブ上のレビューやブログなどの文章を取得してhotaruで解析するといった様に、 mushikago内のサービスと連携しやすいことも大きな利点です。

3.hanamgriを利用する: hanamgriとは、さまざまなレイアウトのウェブページから特定のデータを抽出するサービスです。 webサイトの構成やレイアウトを意識することなく「欲しい項目」「欲しい項目の周辺にありそうなキーワード」「欲しい情報がありそうなURL」をhanamgriに渡すだけで利用できます。

インストール方法

Mushikago SDK for Rubyはgemを使ってインストールします。

$ gem install mushikago-sdk

(root権限が必要な場合はsudoを使ってください。)

使い方

mitsubachiを利用する

以下のコードでmitsubachiを利用することができます。 スクリプトファイルの記述方法はドキュメントを参照して下さい。

require 'rubygems' # ruby 1.9系では不要
require 'mushikago'

client = Mushikago::Mitsubachi::Client.new(:api_key => '<APIキー>', :secret_key => '<シークレットキー>')

project_name = 'sample_project'

# プロジェクト作成
client.project_create(project_name)

# スクリプトファイルデプロイ
client.script_deploy(project_name, 'sample.rb')

# クロール開始
client.http_fetch(project_name, 'http://www.mushikago.org/', 'sample.rb')

# クロール終了まで待機
sleep 1 until client.project_queues(project_name)['count'] == 0

# クロールログ確認
log_files = client.resource_list(project_name, :filter => 'log/stdout')

# ログファイルURL取得
log_files['files'].each do |file|
  ret = client.resource_get(project_name, file['name'])
  puts ret['url']
end

hotaruを利用する

以下のコードでhotaruを利用することができます。

require 'rubygems' # ruby 1.9系では不要
require 'mushikago'

client = Mushikago::Hotaru::Client.new(:api_key => '<APIキー>', :secret_key => '<シークレットキー>')

domain_name = 'sample_domain'

# ドメイン作成
client.domain_create(domain_name, 'english', :tags => ['negative', 'positive'])

# テキスト登録
client.text_put(domain_name, 'This is too bad.', ['negative'])
client.text_put(domain_name, 'This is very good.', ['positive'])

# 登録されたテキストの学習が完了するまでsleep
sleep 1 until client.text_list(domain_name)['texts'].all?{|text| text['status'] == 'complete'}

# クラス判定
result = client.classifier_judge(domain_name, 'good bye!')
puts result['tag']
# => positive

# 共起グラフ作成
result = client.collocation_create(domain_name, ['negative', 'positive'])
collocation_id = result['collocation_id']

# 共起グラフの作成が完了するまでsleep
sleep 1 until client.collocation_list(domain_name)['collocations'].all?{|col| col['status'] == 'error' || col['status'] == 'complete'}

# 共起語取得
result = client.collocation_get(domain_name, collocation_id, 'This')
puts result['words']
# => [{"word"=>"bad", "score"=>4.4986811569504646},
#     {"word"=>"good", "score"=>4.4986811569504646},
#     {"word"=>"too", "score"=>4.4986811569504646},
#     {"word"=>"very", "score"=>4.4986811569504646},
#     {"word"=>"is", "score"=>3.3137419313374643}]

hanamgriを利用する

以下のコードでhanamgriを利用することができます。

# -*- encoding: utf-8 -*-
require 'rubygems' # ruby 1.9系では不要
require 'mushikago'

client = Mushikago::Hanamgri::Client.new(:api_key => '<APIキー>', :secret_key => '<シークレットキー>')

# domain/create - ドメインを作成する
domain_name = "ec_products" # ドメイン名
seeds = "税込,送料" # キーワード
option = Hash.new
option[:description] = "ecサイト取得用のドメイン" # 抽出データ定義
option[:dictionary_name] = "mushikago/ecsite-20120530" # 使用したい辞書名

schema = Mushikago::Hanamgri::Schema.new do
  add Mushikago::Hanamgri::Field.new('name', true, :string, "mushikago/ecsite/title-20120530")
  add Mushikago::Hanamgri::Field.new('price', true, :number, "mushikago/ecsite/price-20120530")
end

name_knowledge = "mushikago/ecsite/title-20120530" # 使用したい学習データ名
price_knowledge =  "mushikago/ecsite/price-20120530" # 使用したい学習データ名

schema = Mushikago::Hanamgri::Schema.new # 抽出データ定義
schema.add Mushikago::Hanamgri::Field.new('name', true, :string, name_knowledge) # 商品名を抽出するための定義
schema.add Mushikago::Hanamgri::Field.new('price', true, :number, price_knowledge) # 価格を抽出するための定義
schema.add Mushikago::Hanamgri::Field.new('detailed_features', false, :string) # 商品詳細を抽出するための定義

client.create_domain domain_name, seeds, schema, option

# domain/list - ドメインの一覧を取得する
option = Hash.new
option[:limit] = 3
option[:offset] = 3
option[:filter] = 'ec'

response = client.list_domains option

response['domains'].each do |domain|
  puts domain['domain_name']
  puts domain['description']
  puts domain['updated_at']
end
puts response['total']

# domain/info - ドメインの情報を取得する
response = client.get_information domain_name

puts response['domain_name']
puts response['description']
puts response['created_at']
puts response['updated_at']
puts response['seeds']
puts response['schema']

# domain/update - ドメインの説明文を更新する
description = "このドメインは、家電ECサイト用のドメインです。" # ドメインの説明文
client.update_domain domain_name, description

# domain/get_queue_size - ドメインの未完了のタスク数を取得する
response = client.get_queue_size domain_name

puts response['queue_size']

# domain/train - キーワード学習と構造学習(教師付き学習)をさせる
domain_name = "ec_products" # ドメイン名
url = "http://ec.electronics.dummy/about" # urlもしくはhtml形式のテキスト
# 上記のurlはダミーです

# 構造学習のための教師データ
training_data = Mushikago::Hanamgri::TrainingData.new do
  put("name", "サイクロンクリーナー")
  put("price", "11,635円")
  put('detailed_features', '遠心力でごみを分離するすごい掃除機')
end

client.train domain_name, url, training_data

# analysis/request - 解析を実行する
domain_name = "ec_products"# ドメイン名
url = "http://shop.example.com/" # 解析対象URL
# 上記のurlはダミーです
option[:tag] = "サイト1" # 解析結果を識別するためのタグ

response = client.request_analysis domain_name, url, option

puts response['request_id']

# analysis/list - 解析結果の一覧を取得する
domain_name = "ec_products" # ドメイン名

option = Hash.new
option[:limit] = 3 # 最大取得件数
option[:offset] = 3 # 開始位置
option[:filter] = 'サイト1' # 検索文字(tagに対して先頭一致)
option[:status] = 'complete' # 解析の状態

response = client.list_analyses domain_name, option

response['analyses'].each do |analysis|
  puts analysis['request_id'] # 解析結果のリクエストID
  puts analysis['save_url'] # 解析結果(blocks)の保存先url
  puts analysis['status'] # 現在の解析の状態
  puts analysis['updated_at'] # 解析情報の更新日
  puts analysis['tag'] # 解析結果に設定されているtag
end
puts response['total'] # 解析情報の合計数が返ってきます

# analysis/get - 解析結果を取得する
domain_name = "ec_products" # ドメイン名
request_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # リクエストID

response = client.get_analysis domain_name, request_id

puts response['analysis_data']['blocks'] # 解析により抽出されたHTMLの配列
puts response['analysis_data']['results'] # 解析によりblocksから抽出された結果の配列

# dictionary/save - ブロック抽出用辞書を保存する
option = Hash.new
option["description"] = "家電ecサイト用" # 辞書の説明

client.save_dictionary domain_name, option

# dictionary/list - ブロック抽出用辞書の一覧を取得する
option = Hash.new
option[:limit] = 3 # 最大取得件数
option[:offset] = 3 # 開始位置

response = client.list_dictionaries option

# ブロック抽出用辞書の情報が入った配列
response['dictionaries'].each do |dictionary|
  puts dictionary['dictionary_name'] # 辞書名
  puts dictionary['description'] # 辞書の説明
  puts dictionary['created_at'] # 辞書の作成日
end
puts response['total'] # 辞書の合計数が返ってきます

# dictionary/delete - 保存したブロック抽出用辞書を削除する
dictionary_name = "xxxxx-xxxxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxxxx" # 辞書名

client.delete_dictionary dictionary_name

# knowledge/save - パラメータ抽出のための学習データを保存する
field_name = "name" # フィールド名
option = Hash.new
option[:description] = "家電用ecサイトの商品名" # 保存する学習データの説明文

client.save_knowledge domain_name, field_name, option

# knowledge/list - パラメータ抽出のための学習データの一覧を取得する
option = Hash.new
option[:limit] = 3 # 最大取得件数
option[:offset] = 3 # 開始位置
option[:status] = 'complete'# 学習データ保存の進捗状況

response = client.list_knowledges option

# 保存した学習データの情報が入った配列
response['knowledges'].each do |knowledge|
  puts knowledge['knowledge_name'] # 学習データ名
  puts knowledge['description'] # 学習データの説明文
  puts knowledge['status'] # 学習データ保存の進捗状況
  puts knowledge['created_at'] # 学習データの作成日
end
puts response['total'] # ヒットした学習データの総数

# knowledge/delete - 保存したパラメータ抽出のための学習データを削除する
knowledge_name = "xxxxxxxxx/xxxxx/xxxxx-xxxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxxxx" # 学習データ名

client.delete_knowledge knowledge_name

# domain/delete - 作成したドメインを削除する
domain_name = "ec_products" # ドメイン名

client.delete_domain domain_name

APIキーとシークレットキーの設定方法

APIキーとシークレットキーは以下の方法でも設定することができます。

YAMLファイルを利用する場合

以下のYAMLファイルを用意します。


api_key:<APIキー>
secret_key:<シークレットキー>

以下のコードでYAMLファイルを読み込んで使用してください。

require 'rubygems' # ruby 1.9系では不要
require 'mushikago'

Mushikago.config.load(YAML.load(File.read('config.yml')))

client = Mushikago::Tombo::Client.new

環境変数を利用する場合

環境変数MUSHIKAGO_API_KEYとMUSHIKAGO_SECRET_KEYにそれぞれAPIキーとシークレットキーの設定を行います。


$ export MUSHIKAGO_API_KEY=<APIキー>
$ export MUSHIKAGO_SECRET_KEY=<シークレットキー>
require 'rubygems' # ruby 1.9系では不要
require 'mushikago'

client = Mushikago::Tombo::Client.new

変更履歴

  • Oct.25.12: 2.4.3 release
    • http_fetch/pushに:encodingオプション追加
  • Sep.14.12: 2.4.2 release
    • mitsubachiのproject_infoのオプション変更に対応
  • Aug.27.12: 2.4.1 release
    • tomboのcapturesにstateがない件を修正
  • Aug.20.12: 2.4 release
    • tomboのdisplay_width対応
  • Aug.3.12: 2.2 release
    • mitsubachiのcookiejar対応
  • Jul.31.12: 2.1.1 release
    • tomboのuser_agent修正
  • May.30.12: 2.1.0 release
    • hanamgri(β)サポート
  • May.23.12: 2.0.0 release
    • hanamgriのベータサポート
  • Feb.20.12: 0.4.2 release
    • tomboのcaptureオプション「delay_time」に対応
  • Feb.20.12: 0.4.0 release
    • 新サービス「hotaru」対応
  • Feb.14.12: 0.3.7 release
    • Multipartでアップロードするファイルの最後に改行が付与される件修正
  • Jan.27.12: 0.3.6 release
    • resource_get,script_getに:with_bodyオプション追加
  • Jan.27.12: 0.3.4 release
    • 数字を含むリクエストの不具合に対応
  • Jan.26.12: 0.3.2 release
    • mitsubachiに対応
  • Sep.13.11: 0.2.3 release
    • captureメソッドのuseragentに対応
  • Sep.8.11: 0.2.1 release
    • ライセンスをApache License, Version 2.0に変更
  • Sep.6.11: 0.1.8 release
    • Mushikago SDK for Ruby新規作成
    • Tombo サポート