| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- # encoding:utf-8
- require 'open-uri'
- require 'net/http'
- require 'uri'
- require 'json'
- require 'digest/md5'
- require 'digest/sha1'
- require 'aliyun/oss'
- module Ali
- class Oss
- BUCKET_NAME_PUBLIC_READ = CONFIG_FILE["ali_oss_bucket"]
- URL_FOR_HOST = "#{CONFIG_FILE["ali_oss_bucket"]}.#{CONFIG_FILE["ali_oss_data_center"]}.aliyuncs.com"
- CDN_URL_FOR_HOST = URL_FOR_HOST
- @client = Aliyun::OSS::Client.new(
- :endpoint => "#{CONFIG_FILE["ali_oss_data_center"]}.aliyuncs.com",
- :access_key_id => CONFIG_FILE["ali_access_id"],
- :access_key_secret => CONFIG_FILE["ali_access_secret"])
- class << self
- def create_bucket(name, access = Aliyun::OSS::ACL::PUBLIC_READ)
- begin
- bucket = @client.create_bucket(name)
- bucket.acl = access
- rescue => e
- p e
- end
- return bucket
- end
- def get_bucket(name)
- buckets = @client.list_buckets
- buckets.each do |item|
- if item.name == name
- return item
- end
- end
- return nil
- end
- def store(bucket_name, object_key, data)
- bucket = self.get_bucket(bucket_name)
- if bucket.blank?
- bucket = self.create_bucket(bucket_name)
- end
- bucket.put_object(object_key){ |stream| stream << data }
- end
- def object_exist?(bucket_name, object_key)
- bucket = self.get_bucket(bucket_name)
- if not bucket.blank?
- objects = bucket.list_objects
- objects.each do |obj|
- if obj.key == object_key
- return true
- end
- end
- return false
- else
- raise "Bucket is not found with name: #{bucket_name}"
- end
- end
- def delete_object(bucket_name, object_key)
- bucket = self.get_bucket(bucket_name)
- if not bucket.blank?
- begin
- bucket.delete_object(object_key)
- rescue Exception => e
- p e
- end
- else
- raise "Bucket is not found with name: #{bucket_name}"
- end
- end
- end
- end
- class Css
- # attr_reader :version, :host
- # attr_accessor :client_id, :secret_key
- ACCESS_KEY_ID = "HNPD1U7r1eWPzB82"
- SECRET_ACCESS_KEY = "yhmPqp3jBndWf8D9b5p40BRyNyqYG6"
- #内网
- # HOST = "http://intranet.opensearch-cn-hangzhou.aliyuncs.com"
- #外网
- HOST = {
- "production" => "http://opensearch-cn-hangzhou.aliyuncs.com",
- "development" => "http://opensearch-cn-qingdao.aliyuncs.com"
- }
- class << self
- #根据参数创建签名信息
- def _signature(params, method)
- _params = {}
- params.each do |k,v|
- _params[k.to_s] = v
- end
- _params = _params.sort
- data = []
- _params.each do |p|
- next if p[1].size <= 0
- # p "before encode:#{p[1]}" if p[0] == "items"
- _p = URI.encode_www_form_component(p[1])
- _p = _p.gsub("+","%20").gsub("*","%2A").gsub("%7E","~")
- # p "after encode:#{_p}" if p[0] == "items"
- data << "#{URI.encode_www_form_component(p[0])}=#{_p}"
- end
- data = URI.encode_www_form_component(data.join("&"))
- data = [method.upcase, URI.encode_www_form_component("/"), data].join("&")
- # p "stringtosign=#{data}"
- data = data.gsub("%7E","~")
- signature = Base64::encode64(HMAC::SHA1.digest("#{SECRET_ACCESS_KEY}&", data))
- # p "signature=#{signature[0..-2]}"
- return signature[0..-2]
- end
- def _api_call(url, method = 'GET', params = {})
- begin
- params['Version'] = "v2"
- params['AccessKeyId'] = ACCESS_KEY_ID
- params['SignatureMethod'] = "HMAC-SHA1"
- t = Time.now.to_i - 8*3600
- params['Timestamp'] = "#{Time.at(t).strftime("%Y-%m-%dT%H:%M:%SZ")}"
- params['SignatureVersion'] = "1.0"
- params['SignatureNonce'] = "#{Time.now.to_i}#{'%04d'%rand(9999)}"
- params['Signature'] = _signature(params, method)
- url = self::HOST[Rails.env] + url
- if method.upcase == 'GET'
- response = RestClient.get url, {:params => params}
- else
- response = RestClient.post url, params
- end
- return JSON.parse(response.body)
- rescue => e
- p e
- end
- end
- def list_index()
- uri = "/index"
- _api_call(uri, "get",{})
- end
- def create_index(index_name, template = "xikego_product")
- uri = "/index/#{index_name}"
- _api_call(uri, "post", {:action => "create", :template => template})
- end
- def delete_index(index_name)
- uri = "/index/#{index_name}"
- _api_call(uri, "post",{:action => "delete"})
- end
- def show_index(index_name)
- uri = "/index/#{index_name}"
- _api_call(uri, "get",{:action => "status"})
- end
- #items是个数组
- def create_doc(index_name, table_name, fields)
- uri = "/index/doc/#{index_name}"
- # t = (Time.now.to_i - 8*3600)*1000
- # items = [{"cmd" => "add", "timestamp" => t, "fields" => fields}]
- items = [{"cmd" => "add", "fields" => fields}]
- items = items.to_json
- ret = _api_call(uri, "post",{"action" => "push", "table_name" => table_name, "items" => items})
- return ret
- end
- def delete_doc(index_name, table_name, id)
- uri = "/index/doc/#{index_name}"
- items = [{"cmd" => "delete", "fields" => {"id" => id.to_s}}]
- items = items.to_json
- _api_call(uri, "post",{"action" => "push", "table_name" => table_name, "items" => items})
- end
- def update_doc(index_name, table_name, fields)
- uri = "/index/doc/#{index_name}"
- # t = (Time.now.to_i - 8*3600)*1000
- # items = [{"cmd" => "update", "timestamp" => t, "fields" => fields}]
- items = [{"cmd" => "update", "fields" => fields}]
- items = items.to_json
- _api_call(uri, "post",{"action" => "push","table_name" => table_name, "items" => items})
- end
- def search_doc(index_names, query)
- if index_names.class == Array
- index_name = index_names.join(";")
- else index_names.class == String
- index_name = index_names
- end
- uri = "/search"
- _api_call(uri,"get",{:query => query, :index_name => index_name, :summary_field => "title" })
- end
- end
- end
- end
- if __FILE__ == $0
- end
|