root/project/lazy-people/thanksbot/lib/wedata.rb

Revision 751, 3.4 kB (checked in by vkgtaro, 4 months ago)

gems json 版 wedata

Line 
1 require 'net/http'
2 require 'uri'
3 require 'json'
4
5 Net::HTTP.version_1_2
6
7 class Wedata
8   def initialize(apikey)
9     @apikey = apikey
10   end
11   def get_database(name)
12     WedataDatabase.new(name, @apikey)
13   end
14   def create_database(name, require_keys, optional_keys, permit_other_keys)
15     query_hash = {
16     "name"=>name,
17     "required_keys"=>required_keys,
18     "optional_keys"=>optional_keys,
19     "permit_other_keys"=>permit_other_keys
20     }
21     Net::HTTP.start('wedata.net') do |http|
22     query = query_hash.map do |key, value|
23       "data[#{URI.encode(key)}]=#{URI.encode(value)}"
24     end.join("&")+"&api_key=#{@apikey}"
25
26       res = http.post("/databases", query)
27       puts "#{res.code}"
28       get_database name
29     end
30   end
31 end
32
33 class WedataDatabase
34   attr_reader :name, :info, :required_keys, :optional_keys
35   def initialize(name, apikey)
36     @apikey = apikey
37
38     Net::HTTP.start('wedata.net') do |http|
39       res1 = http.get("/databases/#{URI.encode(name)}.json")
40       res2 = http.get("/databases/#{URI.encode(name)}/items.json")
41       if res1.code == '200' && res2.code == '200'
42         @name = name
43         @info = JSON.parse(res1.body)
44         @data = JSON.parse(res2.body)
45         @required_keys = @info["required_keys"].scan(/\w+/)
46         @optional_keys = @info["optional_keys"].scan(/\w+/)
47       else puts 'Request Error'
48       end
49     end
50   end
51   def get_item(name)
52     WedataItem.new(@data.find {|item| name == item['name']}, @apikey, @required_keys, @optional_keys)
53   end
54   def create_item(name, data)
55     condition = true
56     @required_keys.each{|i| condition = false unless data.has_key?(i) }
57     unless condition
58       puts "Please enter required_keys"
59       return
60     end
61     query = data.map do |key, value|
62       "data[#{URI.encode(key)}]=#{URI.encode(value)}"
63     end.join("&")+"&api_key=#{@apikey}&name=#{URI.encode(name)}"
64     puts query
65     Net::HTTP.start('wedata.net') do |http|
66       res = http.post("/databases/#{URI.encode(@name)}/items", query)
67       puts "#{res.code}"
68     end
69   end
70   def delete
71     http = Net::HTTP.new('wedata.net', 80)
72     req = Net::HTTP::Delete.new("/databases/#{URI.encode(@name)}")
73     req.body =  "api_key=#{@apikey}"
74     res = http.request(req)
75     puts "#{res.code}"
76   end
77   def get_items
78     items = Array.new
79     @data.each do |item|
80       items.push(WedataItem.new(item, @apikey, @required_keys, @optional_keys))
81     end
82     return items
83   end
84 end
85
86 class WedataItem
87   @@re = /items\/(\d+)$/
88   attr_reader :name, :data, :url, :required_keys, :optional_keys
89   def initialize(data, apikey, required_keys, optional_keys)
90     @name = data['name']
91     @data = data['data']
92     @url = data['resource_url']
93     @apikey = apikey
94     @required_keys = required_keys
95     @optional_keys = optional_keys
96   end
97   def update(data)
98     @required_keys.each{|i| data[i] = @data[i] unless data.has_key?(i) }
99     @optional_keys.each{|i| data[i] = @data[i] if (!data.has_key?(i) && @data.has_key?(i))}
100     query = data.map do |key, value|
101       "data[#{URI.encode(key)}]=#{URI.encode(value)}"
102     end.join("&")+"&api_key=#{@apikey}"
103     puts query
104    
105     @url =~ @@re
106     http = Net::HTTP.new('wedata.net', 80)
107     req = Net::HTTP::Put.new("/items/#{$1}")
108     req.body = query
109     res = http.request(req)
110     puts "#{res.code}"
111   end
112   def delete
113     @url =~ @@re
114     http = Net::HTTP.new('wedata.net', 80)
115     req = Net::HTTP::Delete.new("/items/#{$1}")
116     req.body =  "api_key=#{@apikey}"
117     res = http.request(req)
118     puts "#{res.code}"
119   end
120 end
121
Note: See TracBrowser for help on using the browser.