2012年2月29日水曜日

amazon affiliate

エロくローラーに貼るamazon associate(affiliate)をjsonで扱えてキャッシュ出来るrailsのcontrollerを作った。
app/controllerに置いて、Gemfileに gem 'amazon-ecs' を書いて、適当なパスをroutes.rbに書けば動くはず。
# 長ったらしい自慰行為ソースコードと説明文より動く実践コードってなかなか探しても無いものである。

sample
http://krewmen-psychobilly.rhcloud.com/api/0.7/get/affiliate/amazon?callback=callback
# -*- coding: utf-8 -*-
require 'rubygems'
require 'amazon/ecs'
require 'rakuten'
require 'pp'
require 'cgi'

class AffiliateController < ApplicationController

  def amazon

    @code = 200
    @message = nil
    @items = nil
    @max_pages = (params[:max_pages] =~ /^[0-9]+$/)?params[:max_pages]:1
    @max_images = (params[:max_images] =~ /^[0-9]+$/)?params[:max_images]:nil

    begin

      @items = Rails.cache.read("items_#{@max_pages}")
      unless @items
        @items = []

        Amazon::Ecs.options = {
          :associate_tag => 'xxx-22',
          :AWS_access_key_id => 'xxx',
          :AWS_secret_key => 'xxx',
          :country => :jp,
        }

        image_count = 0
        @max_pages.to_i.times do |page|

          res = Amazon::Ecs.item_search("検索キーワード", {:item_page => page + 1, :search_index => "DVD", :response_group => 'Medium', :sort => 'salesrank'})

          res.items.each do |item|
            if @max_images and @max_images.to_i <= image_count
              break
            end
            image_count += 1
            image = item.get("LargeImage/URL")
            if image
              @items.push({
                            :title  => item.get("ItemAttributes/Title"),
                            :actor  => item.get("ItemAttributes/Actor"),
                            :simage => item.get("SmallImage/URL"),
                            :mimage => item.get("MediumImage/URL"),
                            :image  => item.get("LargeImage/URL"),
                            :url    =>CGI::unescape(item.get("DetailPageURL"))
                          })
            end
          end

        end

        # 5min
        Rails.cache.write("items_#{@max_pages}", @items, :expires_in => 300)

      end

    rescue => err
      p err.to_s
      @code = 500
      @message = err.to_s
    end

    render :json => {:header => {:code => @code, :message => @message}, :body => {:items => @items}}, :callback => params[:callback]

  end

end

2012年2月24日金曜日

Amazon Linux AMIにjenkinsをインストール

loginとインストール環境
$ slogin xx-xx-xx-xx-xx.amazonaws.com
$ cat /etc/issue
Amazon Linux AMI release 2011.09
Kernel \r on an \m


repository追加とインストール
$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
$ sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
$ sudo yum install jenkins


確認
$ id jenkins
uid=221(jenkins) gid=497(jenkins) groups=497(jenkins)


config修正
$ sudo diff -c /etc/sysconfig/{jenkins.orig,jenkins}
*** /etc/sysconfig/jenkins.orig 2012-02-24 04:50:06.269101765 +0000
--- /etc/sysconfig/jenkins      2012-02-13 19:19:59.000000000 +0000
***************
*** 16,22 ****
  # Java executable to run Jenkins
  # When left empty, we'll try to find the suitable Java.
  #
! JENKINS_JAVA_CMD="/usr/bin/java"
  
  ## Type:        string
  ## Default:     "jenkins"
--- 16,22 ----
  # Java executable to run Jenkins
  # When left empty, we'll try to find the suitable Java.
  #
! JENKINS_JAVA_CMD=""
  
  ## Type:        string
  ## Default:     "jenkins"


起動
$ sudo service jenkins start
Starting Jenkins                                           [  OK  ]



2012年2月14日火曜日

dropbox cli

CLI環境でdropboxを使う(install)する方法

インストール環境
$ uname -a
Linux $hostnaem 2.6.32-5-amd64 #1 SMP Thu Nov 3 03:41:26 UTC 2011 x86_64 GNU/Linux
$ cat /etc/issue
Debian GNU/Linux 6.0 \n \l

ツールのインストール
$ test -d ${HOME}/bin || mkdir ${HOME}/bin
$ cd ${HOME}/bin
$ wget -O dropbox.py https://www.dropbox.com/download?dl=packages/dropbox.py
$ chmod +x dropbox.py
$ sudo apt-get install python-gpgme
# lennyの場合は python-pyme をインストール

dropbox(daemon)のインストール
$ dropbox.py start --install
$ ls -ld ${HOME}/.dropbox*

dropbox起動
$ dropbox.py start
To link this computer to a dropbox account, visit the following url:
https://www.dropbox.com/cli_link?host_id=00000000000000000000000000000000&cl=ja

リポジトリ同期開始
daemon起動時に出力されたURL(上記)にアクセスしてログイン(または登録)をすれば、${HOME}/Dropbox/ へ同期が開始される