baidu 1.2.10 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +82 -0
- data/Rakefile +1 -0
- data/baidu.gemspec +26 -0
- data/lib/baidu.rb +46 -468
- data/lib/baidu/auth.rb +5 -0
- data/lib/baidu/map.rb +66 -0
- data/lib/baidu/rank.rb +5 -0
- data/lib/baidu/sem.rb +14 -0
- data/lib/baidu/sem/account.rb +31 -0
- data/lib/baidu/sem/adgroup.rb +55 -0
- data/lib/baidu/sem/base.rb +96 -0
- data/lib/baidu/sem/bulk.rb +75 -0
- data/lib/baidu/sem/campaign.rb +96 -0
- data/lib/baidu/sem/creative.rb +33 -0
- data/lib/baidu/sem/enum.rb +70 -0
- data/lib/baidu/sem/keyword.rb +35 -0
- data/lib/baidu/sem/kr.rb +9 -0
- data/lib/baidu/sem/new_creative.rb +32 -0
- data/lib/baidu/sem/report.rb +107 -0
- data/lib/baidu/sem/search.rb +79 -0
- data/lib/baidu/version.rb +3 -0
- data/lib/ext.rb +46 -0
- data/spec/map_spec.rb +77 -0
- data/spec/sem_adgroup_spec.rb +119 -0
- data/spec/sem_api_response_spec.rb +97 -0
- data/spec/sem_bulk_spec.rb +89 -0
- data/spec/sem_campaign_spec.rb +94 -0
- data/spec/sem_creative_spec.rb +79 -0
- data/spec/sem_keyword_spec.rb +48 -0
- data/spec/sem_report_spec.rb +52 -0
- data/spec/sem_search_spec.rb +80 -0
- data/spec/spec_helper.rb +356 -0
- metadata +87 -15
data/lib/baidu/auth.rb
ADDED
data/lib/baidu/map.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
module Baidu
|
3
|
+
class Map
|
4
|
+
include HTTParty
|
5
|
+
def initialize(key)
|
6
|
+
@key = key
|
7
|
+
@segments = {:ak=>@key,:output=>'json',:radius=>1000}
|
8
|
+
end
|
9
|
+
|
10
|
+
def bus
|
11
|
+
@segments[:query]='公交站'
|
12
|
+
self
|
13
|
+
end
|
14
|
+
|
15
|
+
def bank
|
16
|
+
@segments[:query]='银行'
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
def cafe
|
21
|
+
@segments[:query]='餐馆'
|
22
|
+
self
|
23
|
+
end
|
24
|
+
|
25
|
+
def spot
|
26
|
+
@segments[:query]='景点'
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
30
|
+
def around(lat,lng)
|
31
|
+
@segments[:location] = "#{lat},#{lng}"
|
32
|
+
self
|
33
|
+
end
|
34
|
+
|
35
|
+
def within(radius)
|
36
|
+
@segments[:radius] = radius
|
37
|
+
self
|
38
|
+
end
|
39
|
+
|
40
|
+
#得到百度地图城市id
|
41
|
+
def self.get_cityid(cityname)
|
42
|
+
body = get "http://api.map.baidu.com/?qt=cur&wd=#{URI.encode(cityname)}&ie=utf-8&res=api"
|
43
|
+
return body['content']['code']
|
44
|
+
end
|
45
|
+
|
46
|
+
#从每条结果中解析x,y坐标
|
47
|
+
def self.coordinate(poiname,cityid)
|
48
|
+
# puts "http://api.map.baidu.com/geocoder?address=#{URI.encode(poiname)}&output=json&key=#{@key}&city=#{URI.encode(cityid)}"
|
49
|
+
url = "http://api.map.baidu.com/geocoder?address=#{URI.encode(poiname)}&output=json&key=#{@key}&city=#{cityid}"
|
50
|
+
result = get url
|
51
|
+
location = result['result']
|
52
|
+
return nil if location.nil? or location.empty?
|
53
|
+
location = location['location']
|
54
|
+
return location['lng'],location['lat'] if result['status'] == 'OK'
|
55
|
+
end
|
56
|
+
|
57
|
+
def info
|
58
|
+
uri = URI::HTTP.build(
|
59
|
+
:host => 'api.map.baidu.com',
|
60
|
+
:query=> URI.encode(@segments.map{|k,v|"#{k}=#{v}"}.join('&')),
|
61
|
+
:path => '/place/v2/search'
|
62
|
+
)
|
63
|
+
self.class.get(uri.to_s)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/baidu/sem.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "baidu/sem/enum"
|
2
|
+
require "baidu/sem/base"
|
3
|
+
require "baidu/sem/report"
|
4
|
+
require "baidu/sem/account"
|
5
|
+
require "baidu/sem/adgroup"
|
6
|
+
require "baidu/sem/bulk"
|
7
|
+
require "baidu/sem/campaign"
|
8
|
+
require "baidu/sem/creative"
|
9
|
+
require "baidu/sem/kr"
|
10
|
+
require "baidu/sem/keyword"
|
11
|
+
require "baidu/sem/new_creative"
|
12
|
+
require "baidu/sem/search"
|
13
|
+
# require "baidu/ext"
|
14
|
+
require "savon"
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Baidu
|
2
|
+
module SEM
|
3
|
+
class AccountService < Base
|
4
|
+
# def getAccountInfo
|
5
|
+
# operation = make_operation('getAccountInfo')
|
6
|
+
# operation.header = operation_header
|
7
|
+
# operation.body = {
|
8
|
+
# :getAccountInfoRequest=>{
|
9
|
+
# :requestData=>[]
|
10
|
+
# }
|
11
|
+
# }
|
12
|
+
|
13
|
+
# response = operation.call
|
14
|
+
# if @debug
|
15
|
+
# puts operation.build
|
16
|
+
# end
|
17
|
+
# response.body
|
18
|
+
# end
|
19
|
+
|
20
|
+
# def updateAccountInfo(accountInfoType)
|
21
|
+
# operation = make_operation('updateAccountInfo')
|
22
|
+
# operation.header = operation_header
|
23
|
+
# operation.body = {
|
24
|
+
# :updateAccountInfoRequest =>{
|
25
|
+
# :accountInfoType => accountInfoType
|
26
|
+
# }
|
27
|
+
# }
|
28
|
+
# end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Baidu
|
2
|
+
module SEM
|
3
|
+
class AdgroupService < Base
|
4
|
+
# def getAllAdgroupId
|
5
|
+
# operation = make_operation('getAllAdgroupId')
|
6
|
+
# operation.header = operation_header
|
7
|
+
# operation.body = {
|
8
|
+
# :getAllAdgroupIdRequest=>{}
|
9
|
+
# }
|
10
|
+
# if @debug
|
11
|
+
# puts operation.build
|
12
|
+
# end
|
13
|
+
# end
|
14
|
+
# def getAdgroupIdByCampaignId(id)
|
15
|
+
# operation = make_operation('getAdgroupIdByCampaignId')
|
16
|
+
# operation.header = operation_header
|
17
|
+
# operation.body ={
|
18
|
+
# :getAdgroupIdByCampaignIdRequest=>{
|
19
|
+
# :campaignIds=>id.to_i
|
20
|
+
# }
|
21
|
+
# }
|
22
|
+
# if @debug
|
23
|
+
# puts operation.build
|
24
|
+
# end
|
25
|
+
# end
|
26
|
+
# def getAdgroupByCampaignId(id)
|
27
|
+
# operation = make_operation('getAdgroupByCampaignId')
|
28
|
+
# operation.header = operation_header
|
29
|
+
# operation.body ={
|
30
|
+
# :getAdgroupByCampaignIdRequest=>{
|
31
|
+
# :campaignIds=>id.to_i
|
32
|
+
# }
|
33
|
+
# }
|
34
|
+
# if @debug
|
35
|
+
# puts operation.build
|
36
|
+
# end
|
37
|
+
# end
|
38
|
+
# def getAdgroupByAdgroupId
|
39
|
+
# operation = make_operation('getAdgroupByAdgroupId')
|
40
|
+
# operation.header = operation_header
|
41
|
+
# operation.body = {
|
42
|
+
# :getAdgroupByAdgroupIdRequest=>{
|
43
|
+
# :adgroupIds=>["long"]
|
44
|
+
# }
|
45
|
+
# }
|
46
|
+
# end
|
47
|
+
# def addAdgroup
|
48
|
+
# end
|
49
|
+
# def updateAdgroup
|
50
|
+
# end
|
51
|
+
# def deleteAdgroup
|
52
|
+
# end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
module Baidu
|
2
|
+
module SEM
|
3
|
+
class Base
|
4
|
+
attr_accessor :username,:password,:token
|
5
|
+
attr_accessor :debug
|
6
|
+
|
7
|
+
def initialize(auth)
|
8
|
+
classname = self.class.name.split('::').last
|
9
|
+
@service_name = classname
|
10
|
+
@port_name = classname
|
11
|
+
@username = auth.username
|
12
|
+
@password = auth.password
|
13
|
+
@token = auth.token
|
14
|
+
@client = Savon.new("https://api.baidu.com/sem/sms/v3/#{classname}?wsdl")
|
15
|
+
# Savon.new(@base_uri+service_name+'?wsdl')
|
16
|
+
end
|
17
|
+
def method_missing(name, *args, &block)
|
18
|
+
options,debug = args[0],args[1]
|
19
|
+
options = {} if options.nil?
|
20
|
+
name = name.to_s
|
21
|
+
name_snake = name.snake_case
|
22
|
+
# p name
|
23
|
+
name_tmp =
|
24
|
+
case name
|
25
|
+
when 'getAllCampaign'
|
26
|
+
'GetAllCampaign'
|
27
|
+
when 'getCampaignByCampaignId'
|
28
|
+
'GetCampaignByCampaignId'
|
29
|
+
when 'addCampaign'
|
30
|
+
'AddCampaign'
|
31
|
+
when 'updateCampaign'
|
32
|
+
'UpdateCampaign'
|
33
|
+
when 'deleteCampaign'
|
34
|
+
'DeleteCampaign'
|
35
|
+
when 'getCampaignByCampaignId'
|
36
|
+
'GetCampaignByCampaignId'
|
37
|
+
else
|
38
|
+
name
|
39
|
+
end
|
40
|
+
|
41
|
+
name_request_sym = (name_tmp+'Request').to_sym #if %w(getCampaignByCampaignId getAllCampaign addCampaign updateCampaign deleteCampaign).include?name
|
42
|
+
# puts name_request_sym
|
43
|
+
name_response_sym = (name+'Response').snake_case.to_sym
|
44
|
+
operation = make_operation(name)
|
45
|
+
operation.header = operation_header
|
46
|
+
operation.body = {
|
47
|
+
name_request_sym => options
|
48
|
+
}
|
49
|
+
ap operation.body if debug
|
50
|
+
puts operation.build if debug
|
51
|
+
response = operation.call
|
52
|
+
ap response if debug
|
53
|
+
# ap response.failures if debug
|
54
|
+
if response.failures
|
55
|
+
raise response.failures.to_s
|
56
|
+
else
|
57
|
+
Baidu::Response.new(response,name_response_sym)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
def operations
|
61
|
+
@client.operations(@service_name,@port_name)
|
62
|
+
end
|
63
|
+
|
64
|
+
def make_operation(operation_name)
|
65
|
+
@client.operation(@service_name,@port_name,operation_name)
|
66
|
+
end
|
67
|
+
|
68
|
+
def operation_header
|
69
|
+
{
|
70
|
+
:AuthHeader=>
|
71
|
+
{
|
72
|
+
:username=>@username,
|
73
|
+
:password=>@password,
|
74
|
+
:token=>@token
|
75
|
+
}
|
76
|
+
}
|
77
|
+
end
|
78
|
+
|
79
|
+
def example(operation,with_header=false)
|
80
|
+
operation = make_operation(operation)
|
81
|
+
if with_header
|
82
|
+
{
|
83
|
+
:example_header => operation.example_header,
|
84
|
+
:example_body => operation.example_body
|
85
|
+
}
|
86
|
+
else
|
87
|
+
operation.example_body
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# def invalid_options?(options,necessary_options)
|
92
|
+
# return true if necessary_options.any?{|necessary_option|!options.has_key?necessary_option}
|
93
|
+
# end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module Baidu
|
2
|
+
module SEM
|
3
|
+
class BulkJobService < Base
|
4
|
+
# class getChangedCampaignIdResponse
|
5
|
+
# attr_accessor :endTime, :changedCampaignIds
|
6
|
+
# end
|
7
|
+
# class getChangedIdResponse
|
8
|
+
# attr_accessor :endTime, :changedCampaignIds,:changedAdgroupIds,:changedKeywordIds,:changedCreativeIds,:changedNewCreativeIds
|
9
|
+
# end
|
10
|
+
# def method_missing(name, *args, &block)
|
11
|
+
# name = name.to_s
|
12
|
+
# name_snake = name.snake_case
|
13
|
+
# name_request_sym = (name+'Request').to_sym
|
14
|
+
# name_response_sym = (name+'Response').snake_case.to_sym
|
15
|
+
# operation = make_operation(name)
|
16
|
+
# operation.header = operation_header
|
17
|
+
# operation.body = {
|
18
|
+
# name_request_sym => args[0]
|
19
|
+
# }
|
20
|
+
# puts operation.build if @debug
|
21
|
+
# response = operation.call
|
22
|
+
# response = response.body[name_response_sym]
|
23
|
+
# response
|
24
|
+
# end
|
25
|
+
# def getChangedCampaignId(options)
|
26
|
+
# operation = make_operation('getChangedCampaignId')
|
27
|
+
# operation.header = operation_header
|
28
|
+
# operation.body = {
|
29
|
+
# :getChangedCampaignIdRequest=>options
|
30
|
+
# }
|
31
|
+
# if @debug
|
32
|
+
# puts operation.build
|
33
|
+
# end
|
34
|
+
# response = operation.call
|
35
|
+
# response = response.body[:get_changed_campaign_id_response]
|
36
|
+
# r = getChangedCampaignIdResponse.new
|
37
|
+
# r.endTime = response[:endTime]
|
38
|
+
# r.changedCampaignIds = response[:changedCampaignIds]
|
39
|
+
# r
|
40
|
+
# end
|
41
|
+
# def getChangedId(startTime)
|
42
|
+
# operation = make_operation('getChangedId')
|
43
|
+
# operation.header = operation_header
|
44
|
+
# operation.body = {:getChangedIdRequest=>{:startTime=>startTime}}
|
45
|
+
# response = operation.call
|
46
|
+
# r = getChangedIdResponse.new
|
47
|
+
# r.endTime = response[:endTime]
|
48
|
+
# r.changedCampaignIds = response[:changedCampaignIds]
|
49
|
+
# r.changedAdgroupIds = response[:changedAdgroupIds]
|
50
|
+
# r.changedKeywordIds = response[:changedKeywordIds]
|
51
|
+
# r.changedCreativeIds = response[:changedCreativeIds]
|
52
|
+
# r.changedNewCreativeIds = response[:changedNewCreativeIds]
|
53
|
+
# r
|
54
|
+
# end
|
55
|
+
# def getChangedNewCreativeId
|
56
|
+
# end
|
57
|
+
# def getChangedScale
|
58
|
+
# end
|
59
|
+
# def getAllObjects
|
60
|
+
# end
|
61
|
+
# def getAllChangedObjects
|
62
|
+
# end
|
63
|
+
# def getFileState
|
64
|
+
# end
|
65
|
+
# def getFilePath
|
66
|
+
# end
|
67
|
+
# def getChangedAdgroupId
|
68
|
+
# end
|
69
|
+
# def getChangedItemId
|
70
|
+
# end
|
71
|
+
# def getSelectedObjects
|
72
|
+
# end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
module Baidu
|
2
|
+
module SEM
|
3
|
+
class CampaignService < Base
|
4
|
+
# def addCampaign(options)
|
5
|
+
# operation = make_operation('addCampaign')
|
6
|
+
# operation.header = operation_header
|
7
|
+
# operation.body = {
|
8
|
+
# :AddCampaignRequest=>{
|
9
|
+
# :campaignTypes=> options
|
10
|
+
# }
|
11
|
+
# }
|
12
|
+
# if @debug
|
13
|
+
# puts operation.build
|
14
|
+
# end
|
15
|
+
# end
|
16
|
+
|
17
|
+
# def updateCampaign(options)
|
18
|
+
# operation = make_operation('updateCampaign')
|
19
|
+
# operation.header = operation_header
|
20
|
+
# operation.body = {
|
21
|
+
# :UpdateCampaignRequest=> {
|
22
|
+
# :campaignTypes => options
|
23
|
+
# }
|
24
|
+
# }
|
25
|
+
# if @debug
|
26
|
+
# puts operation.build
|
27
|
+
# end
|
28
|
+
# end
|
29
|
+
|
30
|
+
# def getCampaignByCampaignId(id)
|
31
|
+
# operation = make_operation('getCampaignByCampaignId')
|
32
|
+
# operation.header = operation_header
|
33
|
+
# operation.body = {
|
34
|
+
# :GetCampaignByCampaignIdRequest=>{:campaignIds=>id.to_i}
|
35
|
+
# }
|
36
|
+
# if @debug
|
37
|
+
# puts operation.build
|
38
|
+
# end
|
39
|
+
# response = operation.call
|
40
|
+
# if @debug
|
41
|
+
# p response.hash
|
42
|
+
# end
|
43
|
+
# end
|
44
|
+
|
45
|
+
# def getAllCampaign
|
46
|
+
# operation = make_operation('getAllCampaign')
|
47
|
+
# p operation_header
|
48
|
+
# operation.header = operation_header
|
49
|
+
# operation.body = {
|
50
|
+
# :GetAllCampaignRequest => {}
|
51
|
+
# }
|
52
|
+
|
53
|
+
# puts operation.build if @debug
|
54
|
+
|
55
|
+
# response = operation.call
|
56
|
+
|
57
|
+
# p response.hash if @debug
|
58
|
+
|
59
|
+
# response = response.body[:GetAllCampaignResponse]
|
60
|
+
# puts response.class
|
61
|
+
# end
|
62
|
+
|
63
|
+
# def getAllCampaignId
|
64
|
+
# warn 'this API may not be ready yet'
|
65
|
+
# operation = make_operation('getAllCampaignId')
|
66
|
+
# operation.header = operation_header
|
67
|
+
# operation.body = {
|
68
|
+
# :getAllCampaignIdRequest => {}
|
69
|
+
# }
|
70
|
+
# if @debug
|
71
|
+
# puts operation.build
|
72
|
+
# end
|
73
|
+
# response = operation.call
|
74
|
+
# if @debug
|
75
|
+
# p response.hash
|
76
|
+
# end
|
77
|
+
# response = response.body[:addCampaignResponse]
|
78
|
+
# end
|
79
|
+
|
80
|
+
# def deleteCampaign(id)
|
81
|
+
# operation = make_operation('deleteCampaign')
|
82
|
+
# operation.header = operation_header
|
83
|
+
# operation.body = {
|
84
|
+
# :DeleteCampaignRequest=>{:campaignIds=>id.to_i}
|
85
|
+
# }
|
86
|
+
# if @debug
|
87
|
+
# puts operation.build
|
88
|
+
# end
|
89
|
+
# response = operation.call
|
90
|
+
# if @debug
|
91
|
+
# p response.hash
|
92
|
+
# end
|
93
|
+
# end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|