2014年7月31日木曜日

指定したプロセスの実行経過時間を取得して秒変換するシェルスクリプト

何それって感じですがメモしておきます
OneLinerで記載しているのはzabbixのUserParameterで使いたかったから
絶対もっと簡単に取得する方法があるんだろうなと

TIME=`ps aux | grep PushToUsers | grep -v 'grep' | awk {'print $10'} | tail -n 1`; if [ -n "$TIME" ]; then echo $TIME | awk -F ':' '{if ($1 != 0) print ($1 * 60) + $2; else print $2;}'; else echo 0; fi;

OneLinerではなくフォーマットすると

TIME=`ps aux | grep hogehoge | grep -v 'grep' | awk {'print $10'} | tail -n 1`
if [ -n "$TIME" ]
then
  echo $TIME | awk -F ':' '{if ($1 != 0) print ($1 * 60) + $2; else print $2;}'
else
 echo 0
fi;

hogehogeの部分に監視したいプロセス名を指定します

2014年7月26日土曜日

Eclipse4.4(Luna)でTomcatPluginを動作させる方法

Keplerとかのバージョン時にEclipse MarketPlaceでインストールしているとLunaにバージョンアップした場合に Sysdeo Tomcat Launcher Plugin がうまく動作しませんでした
Sysdeo Tomcat Launcher Plugin の公式サイトに行ってみるとLuna版が配布されていたのでそのインストール方法を紹介します

  1. Eclipse 起動
  2. Help -> Install detail -> sysdeo で検索して検索して出てきたインストール済みのTomcat Pluginを選択して「Uninstall」をクリック
  3. Eclipse 一旦停止
  4. http://www.eclipsetotale.com/tomcatPlugin/tomcatPluginV331.zip をダウンロード、解凍
  5. 解凍してできた com.sysdeo.eclipse.tomcat_3.3.1.jar を /path/to/eclipse/dropins にコピー
  6. Eclipse 起動

でいけるはずです
一旦、前のバージョンをuninstallするのがポイントでしょうか
そのうちEclipse MarcketPlaceでLuna対応版が配布されるはずなのでそれを待ってUpdateしてもいいと思います

2014年7月25日金曜日

JenkinsのAPIを使ってジョブを作成してみた

P.S 20140826
curlを使ってジョブを登録する方法は下部の更におまけに追記しました



前回GET系のリクエストを試したので今回はPOST系を試してみました
Rubyを使ってジョブの登録を実施しています

実行するRubyスクリプトと同じディレクトリに下部に記載したconfig.xmlを配置して
実行してください

また、サンプルが job_list というファイルに記載されている登録したいジョブ名分
登録するようになっているので job_list というファイルも作成してください

#!/usr/bin/ruby
# -*- coding: utf-8 -*-
require 'net/http'
require 'json'

endpoint = "http://localhost:8080"

File.open("job_list").each {|f|
  path = "/createItem?name=" + f
  uri = URI.parse(endpoint + path)
  f = File.read("config.xml")
  
  header = {
    'Content-Type' =>'application/xml',
  }

  request = Net::HTTP::Post.new(uri.request_uri, header)
  request.body = f
  request.basic_auth 'username', 'password'
  
  #http = Net::HTTP::Proxy('proxy_host_name', '8080').new(uri.host, uri.port)
  http = Net::HTTP.new(uri.host, uri.port)
  http.start do |h|
    response = h.request(request)
    puts response.status
  end
}

<?xml version='1.0' encoding='UTF-8'?>
<project>
  <actions/>
  <description>this job is created by api</description>
  <keepdependencies>false</keepDependencies>
  <properties/>
  <scm class="hudson.scm.NullSCM"/>
  <canroam>true</canRoam>
  <disabled>false</disabled>
  <blockbuildwhendownstreambuilding>false</blockBuildWhenDownstreamBuilding>
  <blockbuildwhenupstreambuilding>false</blockBuildWhenUpstreamBuilding>
  <buildwrappers>
    <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.5.4"/>
  </buildWrappers>
</project>

■おまけ CURLでジョブをビルドする方法
curl -X POST --user username:password http://localhost:8080/job/test_job/build

■おまけ CURLでパラメータ付きジョブをビルドする方法
curl -X POST --user username:password "http://localhost:8080/job/test_job/buildWithParameters?key1=value&key2=value"

■更におまけ CURLでジョブを作成する方法
curl -X POST --user username:password --data-binary "@config.xml" -H "Content-Type: text/xml" "http://localhost:8080/createItem?name=job_name"

■参考サイト

2014年7月23日水曜日

Eclipse設定メモ

インストール

Eclipseの本家サイトからzipをダウンロードして適当な場所に配置して完了

設定

基本設定

Windows -> Preferences -> Run/Debug -> Console -> Limit console ouput のチェックを外す

キーバインド設定

Windows -> Preferences -> General -> Keys から以下を設定

Windows

  • Scheme を Emacs に変更する
  • Ctrl+h で検索して bind されている Ctrl+h を unbind して pevious で検索して Delete Previous に Ctrl+h を bind する
  • undo で検索して bind されている Ctrl+x, u を unbind して Ctrl+\ でbindする
  • Ctrl+f6 で検索して bind されている Next Editor を unbind して Ctrl+Tab を bind する
  • Previous Editor で検索して bind されている Ctrl+Shift+f6 を unbind して Ctrl+Shift+Tab をbind する
  • Ctrl+x, h で検索して SelectAll を unbind して Alt+a を bind する

Mac

設定する場合はKeyRemap4MacBookを終了してから実施すること

  • Scheme を Emacs に変更する
  • 「Open Search Dialog」を unbind、「Delete Previous」に Ctrl +h を bind する
  • 「Undo」の Command + z をunbind、Ctrl + \ で bind する
  • 「Next Editor」を unbind、Ctrl + tab で bind する
  • 「Previous Editor」を unbind、Shift + Ctrl + tab で bind する
  • 「Toggle Comment」を unbind、Ctrl + / で bind する
  • 「Correct Indentation」を unbind、Ctrl + i で bind する

Java設定

Preferences -> Java -> Installed JREs -> Add -> Standard VM -> JRE home

に以下を追加

  • Mac
    • /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home

プラグイン設定

Help -> Eclipse Marketplace
Help -> Install New Software
のどちらかでそれぞれインストール以下を設定

EGit

パースペクティブに Git の項目を追加する

Maven Integration for Eclipse(m2e)

インストールのみ、設定は特に無し

Android Development Tool for Eclipse

  • インストールしたandroid-sdkのパスを設定する
    • Mac ex : /usr/local/Cellar/android-sdk/24.0.1
  • Android SDK Managerを起動して最新版のBuild-toolsをダウンロードする(初回はダウンロードする量が多いので時間がかかる)
  • Intel x86 Emulator Accelerator (HAXM installer) をインストールする
    • SDK ManagerのExtraからインストール
    • インストーラがダウンロードされるので.dmgファイルを実行してインストール

      /usr/local/Cellar/android-sdk/24.0.1/extras/intel/Hardware_Accelerated_Execution_Manager/IntelHAXM_1.1.1_for_below_10_9.dmg

  • 開発用のAVDを作成する
  • appcompat_v7 の追加
    • 適当にAndroidプロジェクトを作成すればOK
  • google-play-services_lib の追加(Admob用)
    \path\to\adt\sdk\extras\google\google_play_services\libproject をプロジェクトとしてインポートするenter code here
    利用するプロジェクトを右クリックして Android -> Library -> Add -> google-play-services_lib を追加する
    google-play-services_lib が異なるドライブにあるとなぜかエラーになるので同一ドライブにコピーしてからインポートすること
  • プロジェクト側の設定

    Properties -> Android -> Add

    から google-play-services_lib を参照するように追加
    appcompat_v7が必要な場合はそれも追加

    • Android Private Libraries が読み込まれない場合
      libs 配下にあるandroid-support-v4.jarappcompat_v7/libs配下にあるandroid-support-v4.jarで上書きする
      既にjarがコミットしている場合にローカルとリポジトリ側でjarに差分があるために発生する

Eclipse Color Theme

  • Windows -> Preferences -> General -> Appearance -> Color Theme で Vibrant Inkを選択

TestNG for Eclipse

インストールのみ、設定は特に無し

Spket IDE

インストールのみ、設定は特に無し、インストールはこちら

Sysdeo Tomcat Launcher Plugin

インストールのみ、設定は特に無し
Eclipse MarcketPlaceからインストールできない場合はこちら

StepCounter

Marketplaceにはないのでjarをダウンロードしてdropinsに配置する

Grep Console

インストールのみ、設定は特に無し、インストールはこちら

Spring Tool Suite

インストールのみ、設定は特に無し、インストールはこちら

Tips

  • Ctrl + o でOutlineを表示できる

JenkinsのAPIを使ってみた

http://localhost:8080/ でジョブの一覧が見れるJenkinsで試した結果です
認証のユーザ情報は「Jenkinsのユーザーデータベース」を利用しています
簡単なGET系のリクエストのみとなります

環境
サーバ
Jenkins 1.517
CentOS 6.3

クライアント
Ruby 2.0.0

■CURLでリクエスト
curl --user username:password http://localhost:8080/api/json?pretty=true

■レスポンスサンプル
{
  "assignedLabels" : [
    {
      
    }
  ],
  "mode" : "NORMAL",
  "nodeDescription" : "the master Jenkins node",
  "nodeName" : "",
  "numExecutors" : 5,
  "description" : "description",
  "jobs" : [
    {
      "name" : "job001",
      "url" : "http://localhost:8080/job/job001/",
      "color" : "blue"
    },
    {
      "name" : "job002",
      "url" : "http://localhost:8080/job/job002/",
      "color" : "blue"
    }
  ],
  "overallLoad" : {
    
  },
  "primaryView" : {
    "name" : "view",
    "url" : "http://localhost:8080/"
  },
  "quietingDown" : false,
  "slaveAgentPort" : 0,
  "unlabeledLoad" : {
    
  },
  "useCrumbs" : false,
  "useSecurity" : true,
  "views" : [
    {
      "name" : "view",
      "url" : "http://localhost:8080/"
    },
    {
      "name" : "view02",
      "url" : "http://localhost:8080/view/view02/"
    }
  ]
}

■rubyから実施
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
require 'open-uri'
require 'json'

uri = "http://localhost:8080/api/json?pretty=true"
auth = ['username', 'password']
#f = open(uri, {:http_basic_authentication => auth})
f = open(uri, {:http_basic_authentication => auth, :proxy => 'http://proxyname:8080/'})

json = JSON.parse(f.read)

json['jobs'].each { |i|
  p i['url']
}

ジョブのURL一覧がずらっと表示されます

特に認証を気にせずJSONでちゃちゃっと取得するだけならこれで十分そうですね
時間があればPOST系のリクエストも試してみたい

2014年7月22日火曜日

Cygwin設定メモ

インストール

Cygwinの公式サイトからインストーラをダウンロードし実行
setup.exe時にインストールする追加パッケージは以下

  • wget, wget-debuginfo
  • vim, vim-common

設定

基本設定

ルートパス変更

vim /etc/passwd

/home/username
↓
/cygdrive/c/Users/username

※ P.S 20150929
/etc/passwd と /etc/group がない場合は以下のコマンドで生成してください

mkpasswd -l > /etc/passwd
mkgroup  -l > /etc/group

cd / && ln -nfs /cygdrive/c/
cd / && ln -nfs /cygdrive/e/

SSH用の設定ファイル作成

mkdir .ssh
touch .ssh/config
vim .ssh/config

ServerAliveInterval 15

作業用ディレクトリ作成

mkdir -p ~/data/repo
mkdir -p ~/Documents/work

bashの設定ファイル作成 

touch .bashrc
vim .bashrc

#!/bin/sh

alias ls='ls --show-control-chars --color'
alias tmuxclean='rm -rf /tmp/tmux'
alias ifconfig='ipconfig | nkf -w'
alias tailf='tail -f'
alias ps='ps -efW'

if [[ "$OSTYPE" =~ "cygwin" ]];then
  # Chocolatey
  alias choco="echo -ne '\n' | cmd /c choco"
  alias cinst='cmd /c cinst'
  alias cup='cmd /c cup'
  alias cuninst='cmd /c cuninst'
fi

touch .bash_profile
vim .bash_profile

#!/bin/sh

if [ -f $HOME/.bashrc ]
then
  source $HOME/.bashrc
fi

.bashrc と .bash_profile の改行コードをLF、文字コードをUTF-8にする

bash補完時のignore-case設定

vim /etc/inputrc

set completion-ignore-case on

カーソルの色を変更する

左上のアイコンから -> Options -> Looks -> Colours -> Cursor でCyanぽい色に変更する

apt-cyg

wget http://apt-cyg.googlecode.com/svn/trunk/apt-cyg
wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
mv apt-cyg /usr/bin
chmod +x /usr/bin/apt-cyg

apt-cyg install openssh automake gcc-core libevent2.0_5 libevent-devel ncurses libncurses-devel pkg-config make vim git procps emacs util-linux
apt-cyg install ruby subversion
apt-cyg install libgmp-devel libcrypt-devel curl

gem install bundler

※P.S 20150929
Cygwin のバージョンが2以上の場合は apt-cyg のソースコードを直接編集する必要があります
http://kakakikikeke.blogspot.jp/2015/09/md5-sum-did-not-match-exiting.html

emacs

mkdir -p ~/.emacs.d/backup
mkdir -p ~/.emacs.d/site-lisp
touch ~/.emacs.d/site-lisp/init.el
vim .emacs

package.el

cd ~/.emacs.d/site-lisp
wget http://repo.or.cz/w/emacs.git/blob_plain/1a0a666f941c99882093d7bd08ced15033bc3f0c:/lisp/emacs-lisp/package.el
emacs ~/.emacs.d/site-lisp/init.el

(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
(add-to-list 'package-archives  '("marmalade" . "http://marmalade-repo.org/packages/"))
(package-initialize)

package.el が 404 で見つからない場合は以下から取得する
http://kakakikikeke.blogspot.jp/2015/10/emacs23-package-el.html

package-install でインストールするパッケージ一覧

  • パッケージのインストール方法
    M-x package-install [package-name]
    or
    M-x package-list-packages
    iでインストールするパッケージを選択してxでインストールを実行する
  • require
    • anything
    • anything-config
    • anything-match-plugin
    • auto-complete
    • flycheck
      • gem install ruby-lint
      • 各言語ごとに必要なsyntax checkerはインストールすること
    • twittering-mode
    • php-mode
    • markdown-mode
    • highlight-symbol
  • options
    • flymake
    • w3m
    • Navi2ch
  • emacs ~/.emacs.d/site-lisp/init.el
;;; .init.el --- init config emacs

;;; Commentary:
;;;; Author: kakakikikeke
;;;; Version: 0.1

;;; Code:
; for package.el
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
(add-to-list 'package-archives  '("marmalade" . "http://marmalade-repo.org/packages/"))
(package-initialize)

; for anything
(require 'anything-startup)
(keyboard-translate ?\C-h ?\C-?)
(add-to-list 'anything-sources 'anything-c-source-emacs-commands)

; for auto-complete
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/elpa/auto-complete-20140618.2217/dict")
(ac-config-default)
(setq ac-use-menu-map t)
(define-key ac-menu-map "\C-n" 'ac-next)
(define-key ac-menu-map "\C-p" 'ac-previous)

; for flymake
(add-hook 'after-init-hook #'global-flycheck-mode)

; for twittering-mode
(require 'twittering-mode)
;(setq twittering-proxy-use t)
(setq twittering-use-master-password t)

; highlight-symbol
(require 'highlight-symbol)
(setq highlight-symbol-colors
      '(
        "DarkOrange" "DodgerBlue1" "DeepPink1"
        "goldenrod3" "orchid2" "chartreuse3"
        "yellow3" "firebrick1" "green2"
        "IndianRed3" "SeaGreen3" "turquoise1"
        "SlateBlue2" "medium orchid" "sea green"
        ))
(global-set-key "\C-x," 'highlight-symbol-at-point)

;;; init.el ends here

nkf

http://sourceforge.jp/projects/nkf/downloads/59912/nkf-2.1.3.tar.gz/ からブラウザを使ってダウンロード
cd ~/Downloads
tar zvxf nkf-2.1.3.tar.gz
cd nkf-2.1.3
make && make install

tmux

http://sourceforge.net/projects/tmux/files/tmux/tmux-1.9/tmux-1.9a.tar.gz/download?use_mirror=jaist からブラウザを使ってダウロード
https://tmux.github.io/ の Download から最新版をダウンロードしてください

tar zvxf tmux-1.9a.tar.gz
cd tmux-1.9a
./configure && make && make install

touch ~/.tmux.conf
emacs ~/.tmux.conf
これを記載する

git

git config –global color.ui true

vim ~/.gitconfig

[alias]
    tr = log --graph --pretty='format:%C(yellow)%h%Creset %s %Cgreen(%an)%Creset %Cred%d%Creset'

percol

apt-cyg install python-setuptools
easy_install https://pypi.python.org/packages/source/p/pip/pip-1.4.1.tar.gz
pip install percol
mkdir ~/.percol.d
touch ~/.percol.d/rc.py
emacs ~/.percol.d/rc.py

percol.view.PROMPT  = ur"<bold><yellow>Let's percol ></yellow></bold> %q"

# Emacs like
percol.import_keymap({
    "C-h" : lambda percol: percol.command.delete_backward_char(),
    "C-d" : lambda percol: percol.command.delete_forward_char(),
    "C-k" : lambda percol: percol.command.kill_end_of_line(),
    "C-y" : lambda percol: percol.command.yank(),
    "C-t" : lambda percol: percol.command.transpose_chars(),
    "C-a" : lambda percol: percol.command.beginning_of_line(),
    "C-e" : lambda percol: percol.command.end_of_line(),
    "C-b" : lambda percol: percol.command.backward_char(),
    "C-f" : lambda percol: percol.command.forward_char(),
    "M-f" : lambda percol: percol.command.forward_word(),
    "M-b" : lambda percol: percol.command.backward_word(),
    "M-d" : lambda percol: percol.command.delete_forward_word(),
    "M-h" : lambda percol: percol.command.delete_backward_word(),
    "C-n" : lambda percol: percol.command.select_next(),
    "C-p" : lambda percol: percol.command.select_previous(),
    "C-v" : lambda percol: percol.command.select_next_page(),
    "M-v" : lambda percol: percol.command.select_previous_page(),
    "M-<" : lambda percol: percol.command.select_top(),
    "M->" : lambda percol: percol.command.select_bottom(),
    "C-m" : lambda percol: percol.finish(),
    "C-j" : lambda percol: percol.finish(),
    "C-g" : lambda percol: percol.cancel(),
})

other

ant

wget http://ftp.kddilabs.jp/infosystems/apache//ant/binaries/apache-ant-1.9.4-bin.tar.gz
tar zvxf apache-ant-1.9.4-bin.tar.gz
mv apache-ant-1.9.4 /usr/bin/
cd /usr/bin
ln -nfs /usr/bin/apache-ant-1.9.4/bin/ant ant

maven

wget http://ftp.kddilabs.jp/infosystems/apache/maven/maven-3/3.2.2/binaries/apache-maven-3.2.2-bin.tar.gz
tar zvxf apache-maven-3.2.2-bin.tar.gz
mv apache-maven-3.2.2 /usr/bin
cd /usr/bin
ln -nfs /usr/bin/apache-maven-3.2.2/bin/mvn mvn

jq

http://kakakikikeke.blogspot.com/2015/03/cygwin-jq.html

Tips

uname -a でcygwinのバージョンを確認することができる
ps -efW でWindowsで動作しているプロセスの一覧も確認できる

2014年7月18日金曜日

コマンドラインからAmazonアソシエイトの広告リンクを作成してみた

AmazonアソシエイトのHTMLリンクを1商品分だけコマンドで簡単に生成できたらいいなーと思って作ってみました
Rubyの「amazon-ecs」というGemを使っています

■環境
Mac OS X 10.8.5
Ruby 2.1.2p95
Gem 2.2.2
amazon-ecs 2.2.5

■設定
gem install amazon-ecs
gem install launchy

■ソースコード
touch call_amazon_api.rb

# -*- coding: utf-8 -*-
require 'amazon/ecs'
require 'launchy'

if ARGV.length != 1
then 
  p "Please input search keyword using the argument"
  exit 1
end
keyword = ARGV[0];

amazon_tracking_id = "Please input your amazon asociate tracking id"
access_key = "Please input your aws access_key or specified evn ACCESS_KEY at executing"
secret_key = "Please input your aws access_key or specified evn SECRET_KEY at executing"

if ENV["ACCESS_KEY"]
then
  access_key = ENV["ACCESS_KEY"]
end

if ENV["SECRET_KEY"]
then
  secret_key = ENV["SECRET_KEY"]
end

Amazon::Ecs.options = {
  :associate_tag => amazon_tracking_id,
  :AWS_access_key_id => access_key,
  :AWS_secret_key => secret_key
}

res = Amazon::Ecs.item_search(keyword, :response_group => 'Small, ItemAttributes, Images', :search_index => 'All', :country => 'jp')

#puts res.marshal_dump

res.items.each do |item|
  element = item.get_element('ItemAttributes')
  
  data = {
    :asin => item.get('ASIN'), 
    :title => element.get("Title"), 
    :page_url => "http://www.amazon.co.jp/dp/#{item.get('ASIN')}?tag=#{amazon_tracking_id}", 
    :isbn => element.get("ISBN"), 
    :author => element.get_array("Author").join(", "), 
    :product_group => element.get("ProductGroup"), 
    :manufacturer => element.get("Manufacturer"), 
    :publication_date => element.get("PublicationDate"), 
    :small_image => item.get_hash("SmallImage"), 
    :medium_image => item.get_hash("MediumImage"), 
    :large_image => item.get_hash("LargeImage")
  }
  image_info = data[:medium_image]
  html_file = "index.html"
  file_path = File.dirname(__FILE__) + "/" + html_file
  f = File::open(File.dirname(__FILE__) + "/" + html_file, "w+");
  f.puts(
         "<a href=\"#{data[:page_url]}\" target=\"_blank\"><table style=\"border-style: solid;\">" + 
         "<tr>" +
         "<td><img src=\"#{image_info['URL']}\" /></td>" +
         "<td><div>#{data[:title]}</div><div style=\"margin-top: 5px; font-size: 11px;\">#{data[:manufacturer]}</div><div style=\"font-size: 11px;\">#{data[:author]}</div></td>" +
         "</tr>" +
         "</table></a>"
         );
  f.rewind
  puts f.read
  f.close();
  Launchy.open(file_path)
  break;
end

まず「amazon_tracking_id」に自分のAmazonアソシエイト用のtrackingIDを指定します
次に「access_key」と「secret_key」ですが、これは直接ソースを編集してもいいし、ruby実行時の環境変数(ACCESS_KEY, SECRET_KEY)で指定しても大丈夫です

各自で設定する箇所は以上であとは ruby call_amazon_api.rb Java と実行すればOKです
Javaと指定している部分はAmazonで検索するキーワードで好きなキーワードを指定することができます
日本語もきっと使用できます

処理の流れとしてはキーワードを元にランキングを取得し1位の情報だけを取り出してWebサイトで表示するためのHTMLを作成します
作成したHTMLはターミナルの標準出力に表示されるので使いたい場合はコピペして使ってください
また、作成すると同時にHTML情報をデフォルトのブラウザで表示するようにしているので、HTMLのサンプルを作成することもできます

■サンプルレスポンス
<a href="http://www.amazon.co.jp/dp/4844330861?tag=kakakikikeke-22" target="_blank">
  <table style="border-style: solid;">
    <tr>
      <td>
        <img src="http://ecx.images-amazon.com/images/I/51fRtwXdWLL._SL160_.jpg" />
      </td>
      <td>
        <div>スッキリわかるJava入門</div>
        <div style="margin-top: 5px; font-size: 11px;">インプレスジャパン</div>
        <div style="font-size: 11px;">中山 清喬, 国本 大悟</div>
      </td>
    </tr>
  </table>
</a>


Web上での表示は以下の通り
スッキリわかるJava入門
インプレスジャパン
中山 清喬, 国本 大悟


ちょっとした商品を紹介するときには役にたつかなと思います

■参考リンク
Amazon-ECS APIリファレンス
ソースコード

進め方としては基本はAPIリファレンスベースに進めるといいと思う
APIのリクエストパラメータはruby内部でcamelizeしているので
SearchIndex -> :search_index
みたいな感じで変換してパラメータを設定することができる
レスポンスに関してはget_elementメソッドを使ってXMLの要素名を指定することでオブジェクトを取得してそこからgetなどでString情報を抜き出すことができる