dianping 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,8 @@
1
- == 0.0.1
1
+ == TODO
2
+ 覆盖各接口对应功能
3
+
4
+ == 0.0.2
5
+ 实现find_bunisesses的接口
2
6
 
3
- * init using bundle
7
+ == 0.0.1
8
+ * init
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  source 'https://rubygems.org'
2
+ #source 'http://ruby.taobao.org/'
2
3
 
3
4
  # Specify your gem's dependencies in dianping.gemspec
4
5
  gemspec
@@ -0,0 +1,24 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'minitest' do
5
+ # with Minitest::Unit
6
+ watch(%r|^test/(.*)\/?test_(.*)\.rb|)
7
+ watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
8
+ watch(%r|^test/test_helper\.rb|) { "test" }
9
+
10
+ # with Minitest::Spec
11
+ # watch(%r|^spec/(.*)_spec\.rb|)
12
+ # watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
13
+ # watch(%r|^spec/spec_helper\.rb|) { "spec" }
14
+
15
+ # Rails 3.2
16
+ # watch(%r|^app/controllers/(.*)\.rb|) { |m| "test/controllers/#{m[1]}_test.rb" }
17
+ # watch(%r|^app/helpers/(.*)\.rb|) { |m| "test/helpers/#{m[1]}_test.rb" }
18
+ # watch(%r|^app/models/(.*)\.rb|) { |m| "test/unit/#{m[1]}_test.rb" }
19
+
20
+ # Rails
21
+ # watch(%r|^app/controllers/(.*)\.rb|) { |m| "test/functional/#{m[1]}_test.rb" }
22
+ # watch(%r|^app/helpers/(.*)\.rb|) { |m| "test/helpers/#{m[1]}_test.rb" }
23
+ # watch(%r|^app/models/(.*)\.rb|) { |m| "test/unit/#{m[1]}_test.rb" }
24
+ end
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Dianping
2
2
 
3
3
  点评网接口的封装
4
+ 仅覆盖了find_businesses的接口,实在没有时间写。基本结构都有了,有时间的朋友可以继续补充其余接口功能。
4
5
 
5
6
  ## Installation
6
7
 
@@ -0,0 +1,2 @@
1
+ app_key: "30867601"
2
+ app_secret: "8a714afa86dc4cbd898a4a19a587583d"
@@ -10,10 +10,16 @@ Gem::Specification.new do |gem|
10
10
  gem.email = ["as181920@hotmail.com"]
11
11
  gem.description = %q{dianping.com api wrapper}
12
12
  gem.summary = %q{dianping.com api wrapper}
13
- gem.homepage = ""
13
+ gem.homepage = "https://github.com/as181920/dianping"
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
+
20
+ gem.add_dependency "httparty"
21
+
22
+ gem.add_development_dependency "guard-minitest"
23
+ gem.add_development_dependency "rb-inotify"
24
+
19
25
  end
@@ -1,4 +1,5 @@
1
1
  require "dianping/version"
2
+ require "dianping/client"
2
3
 
3
4
  module DianPing
4
5
  def self.hi
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ require "digest/md5"
4
+
5
+ module DianPing
6
+ module API
7
+ module Auth
8
+
9
+ def generate_signature(params,app_key,app_secret)
10
+ params_str = params.keys.sort.map{|key| [key,params[key]] }.flatten.join
11
+ sign = app_key+params_str+app_secret
12
+ Digest::SHA1.hexdigest(sign).upcase
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ require "dianping/api/utils"
4
+
5
+ module DianPing
6
+ module API
7
+ module Business
8
+ include DianPing::API::Utils
9
+
10
+ def find_businesses(options={})
11
+ res = send :get, "/v1/business/find_businesses", options
12
+ res["businesses"]
13
+ end
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+
3
+ require "yaml"
4
+ require "httparty"
5
+ require "dianping/api/auth"
6
+
7
+ module DianPing
8
+ module API
9
+ module Utils
10
+ include DianPing::API::Auth
11
+
12
+ def send(request_method, path, options={})
13
+ sign = generate_signature(options,app_key,app_secret)
14
+ query = URI.encode_www_form options
15
+ response = ::HTTParty.send request_method, "http://api.dianping.com#{path}?appkey=#{app_key}&sign=#{sign}&#{query}"
16
+ response.parsed_response
17
+ end
18
+
19
+ =begin
20
+ def objects_from_response(klass, request_method, path, options={})
21
+ response = send(request_method.to_sym, path, options)[:body]
22
+ objects_from_array(klass, response)
23
+ end
24
+ =end
25
+
26
+ private
27
+
28
+ def app_key
29
+ @app_key ||= config["app_key"]
30
+ end
31
+
32
+ def app_secret
33
+ @app_secret ||= config["app_secret"]
34
+ end
35
+
36
+ def config
37
+ YAML.load_file(File.join(File.dirname(__FILE__),"../../../config/dianping.yml"))
38
+ end
39
+
40
+ end
41
+ end
42
+ end
43
+
44
+
@@ -0,0 +1,59 @@
1
+ require "dianping/api/business"
2
+
3
+ module DianPing
4
+ class Client
5
+ include DianPing::API::Business
6
+
7
+ # Initializes a new Client object
8
+ #
9
+ # @param options [Hash]
10
+ # @return [DianPing::Client]
11
+ def initialize(options={})
12
+ end
13
+
14
+ # Perform an HTTP DELETE request
15
+ def delete(path, params={})
16
+ request(:delete, path, params)
17
+ end
18
+
19
+ # Perform an HTTP GET request
20
+ def get(path, params={})
21
+ request(:get, path, params)
22
+ end
23
+
24
+ # Perform an HTTP POST request
25
+ def post(path, params={})
26
+ signature_params = params.values.any?{|value| value.respond_to?(:to_io)} ? {} : params
27
+ request(:post, path, params, signature_params)
28
+ end
29
+
30
+ # Perform an HTTP PUT request
31
+ def put(path, params={})
32
+ request(:put, path, params)
33
+ end
34
+
35
+ private
36
+
37
+ def request(method, path, params={}, signature_params=params)
38
+ Httparty.send method,
39
+ connection.send(method.to_sym, path, params) do |request|
40
+ request.headers[:authorization] = auth_header(method.to_sym, path, signature_params).to_s
41
+ end.env
42
+ #rescue Faraday::Error::ClientError
43
+ # raise Twitter::Error::ClientError
44
+ #rescue MultiJson::DecodeError
45
+ # raise Twitter::Error::DecodeError
46
+ #rescue
47
+ # raise DianPing::Error::RequestError
48
+ end
49
+
50
+ end
51
+ end
52
+
53
+
54
+ =begin
55
+ puts sign
56
+
57
+ response = HTTParty.get "http://api.dianping.com/v1/business/find_businesses?city=%E4%B8%8A%E6%B5%B7&appkey=#{key}&sign=#{sign}"
58
+ p response
59
+ =end
@@ -0,0 +1,29 @@
1
+ module DianPing
2
+ # Custom error class for rescuing from all DianPing errors
3
+ class Error < StandardError
4
+
5
+ # @return [Hash]
6
+ def self.errors
7
+ @errors ||= Hash[descendants.map{|klass| [klass.const_get(:HTTP_STATUS_CODE)]}]
8
+ end
9
+
10
+ # @return [Array]
11
+ def self.descendants
12
+ ObjectSpace.each_object(::Class).select{|klass| klass < self}
13
+ end
14
+
15
+ # Initializes a new Error object
16
+ #
17
+ # @param exception [Exception, String]
18
+ # @param response_headers [Hash]
19
+ # @return [DianPing::Error]
20
+ def initialize(exception=$!, response_headers={})
21
+ exception.respond_to?(:backtrace) ? super(exception.message) : super(exception.to_s)
22
+ end
23
+
24
+ def backtrace
25
+ @wrapped_exception.respond_to?(:backtrace) ? @wrapped_exception.backtrace : super
26
+ end
27
+ end
28
+ end
29
+
@@ -0,0 +1,35 @@
1
+ require "dianping/error"
2
+
3
+ module DianPing
4
+ class Error
5
+ # Raise when DianPing returns a 4xx HTTP status code or there's an error in Httparty
6
+ class ClientError < DianPing::Error
7
+ # Create a new error from an HTTP environment
8
+ #
9
+ # @param response [Hash]
10
+ # @return [DianPing::Error]
11
+ def self.from_response(response={})
12
+ new(parse_error(response[:body]), response[:response_headers])
13
+ end
14
+
15
+ private
16
+
17
+ def self.parse_error(body)
18
+ if body.nil?
19
+ ''
20
+ elsif body[:error]
21
+ body[:error]
22
+ elsif body[errors]
23
+ first = Array(body[errors]).first
24
+ if first.kind_of?(Hash)
25
+ first[:message].chomp
26
+ else
27
+ first.chomp
28
+ end
29
+ end
30
+ end
31
+
32
+ end
33
+ end
34
+ end
35
+
@@ -0,0 +1,10 @@
1
+ require "dianping/error/client_error"
2
+
3
+ module DianPing
4
+ class Error
5
+ # Raise when DianPing returns the HTTP status code 404
6
+ class NotFound < DianPing::Error::ClientError
7
+ HTTP_STATUS_CODE = 404
8
+ end
9
+ end
10
+ end
@@ -1,3 +1,3 @@
1
1
  module Dianping
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -2,7 +2,7 @@
2
2
  require 'minitest/autorun'
3
3
  require 'dianping'
4
4
 
5
- class DianPingTest < MiniTest::Unit::TestCase
5
+ class TestDianPing < MiniTest::Unit::TestCase
6
6
  def test_hello
7
7
  assert_equal "hello world", DianPing.hi
8
8
  end
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+ require 'minitest/autorun'
3
+ require 'dianping'
4
+
5
+ describe DianPing do
6
+ before do
7
+ @client = DianPing::Client.new
8
+ end
9
+
10
+ describe "find by city" do
11
+ it "can find some businesses in shanghai" do
12
+ businesses = @client.find_businesses({city: '上海'})
13
+ businesses.must_be_kind_of Array
14
+ businesses.wont_be_empty
15
+ end
16
+
17
+ it "can find businesses in shanghai with limited count" do
18
+ businesses = @client.find_businesses({city: '上海', limit: 10})
19
+ businesses.must_be_kind_of Array
20
+ businesses.length.must_equal 10
21
+ end
22
+ end
23
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dianping
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,56 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-24 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2013-02-08 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: httparty
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: guard-minitest
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rb-inotify
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
14
62
  description: dianping.com api wrapper
15
63
  email:
16
64
  - as181920@hotmail.com
@@ -21,14 +69,24 @@ files:
21
69
  - .gitignore
22
70
  - CHANGELOG.rdoc
23
71
  - Gemfile
72
+ - Guardfile
24
73
  - LICENSE.txt
25
74
  - README.md
26
75
  - Rakefile
76
+ - config/dianping.yml
27
77
  - dianping.gemspec
28
78
  - lib/dianping.rb
79
+ - lib/dianping/api/auth.rb
80
+ - lib/dianping/api/business.rb
81
+ - lib/dianping/api/utils.rb
82
+ - lib/dianping/client.rb
83
+ - lib/dianping/error.rb
84
+ - lib/dianping/error/client_error.rb
85
+ - lib/dianping/error/not_found.rb
29
86
  - lib/dianping/version.rb
30
87
  - test/dianping/test_dianping.rb
31
- homepage: ''
88
+ - test/dianping/test_find_businesses.rb
89
+ homepage: https://github.com/as181920/dianping
32
90
  licenses: []
33
91
  post_install_message:
34
92
  rdoc_options: []
@@ -54,3 +112,4 @@ specification_version: 3
54
112
  summary: dianping.com api wrapper
55
113
  test_files:
56
114
  - test/dianping/test_dianping.rb
115
+ - test/dianping/test_find_businesses.rb