-
Notifications
You must be signed in to change notification settings - Fork 0
/
lib.rb
121 lines (106 loc) · 3.07 KB
/
lib.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/env ruby
# coding: utf-8
require 'adwords_api'
require 'csv'
API_VERSION = :v201607
PAGE_SIZE = 1
SEARCH_HEADER_WORD = '日本'
module Ad
class Analysis
def initialize()
adwords = AdwordsApi::Api.new
@targeting_idea_srv = adwords.service(:TargetingIdeaService, API_VERSION)
end
def get_header()
raw_data = request_search_volumes_rawdata(SEARCH_HEADER_WORD)
header = build_header_data(raw_data)
return header
end
def get_volumes(keyword)
return request_search_volumes(keyword)
end
def merge_data(keyword,main_data,sub_data)
main_data.shift
sub_data.shift
e1 = main_data.to_enum
e2 = sub_data.to_enum
sum = []
loop do
sum << e1.next + e2.next
end
return sum.unshift(keyword)
end
def build_csv(header,data)
csv = CSV.generate("", :headers => header, :write_headers => true) do |c|
data.each {|d| c << d }
end
return csv
end
def write_file(data,filename)
File.open(filename, 'w') {|file| file.write(data) }
end
private
def build_header_data(raw_data)
header_data = ["keyword"]
raw_data["TARGETED_MONTHLY_SEARCHES"][:value].reverse.each do |data|
header_data << "#{data[:year]}/#{data[:month]}"
end
header_data << "total"
return header_data
end
def request_search_volumes_rawdata(keyword)
selector = build_selector(keyword)
page = @targeting_idea_srv.get(selector)
return page[:entries][0][:data] if page and page[:entries]
return nil
end
def request_search_volumes(keyword)
page = request_search_volumes_rawdata(keyword)
return convert_csv_format(page) if page != nil
return dummy_data(keyword)
end
def convert_csv_format(raw_data)
csv_format_data = [raw_data["KEYWORD_TEXT"][:value]]
total = 0
raw_data["TARGETED_MONTHLY_SEARCHES"][:value].reverse.each do |data|
csv_format_data << data[:count]
total += data[:count]
end
csv_format_data << total
return csv_format_data
end
def dummy_data(keyword)
return [keyword,0,0,0,0,0,0,0,0,0,0,0,0,0]
end
def build_selector(keyword)
return {
:idea_type => 'KEYWORD',
:request_type => 'STATS',
:requested_attribute_types => ['KEYWORD_TEXT', 'TARGETED_MONTHLY_SEARCHES'],
:search_parameters => [
{
:xsi_type => 'RelatedToQuerySearchParameter',
:queries => [keyword]
},
{
:xsi_type => 'LanguageSearchParameter',
:languages => [{:id => 1005}]
},
{
:xsi_type => 'NetworkSearchParameter',
:network_setting => {
:target_google_search => true,
:target_search_network => false,
:target_content_network => false,
:target_partner_search_network => false
}
}
],
:paging => {
:start_index => 0,
:number_results => PAGE_SIZE
}
}
end
end
end