watson-api-client 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7e3210faf43b3240684b0871e6a09bc77c0aa5ad
4
+ data.tar.gz: 2b40d2d3d87820368555f4577de2f23e538c8765
5
+ SHA512:
6
+ metadata.gz: bfcccc4f138b4ef62b69af897584580f86a6fdc2b71cd221e5688fe6021552f7edfe2ee5c5fb754addc07dd59d5bb991091eab8bc2d2b20ff975813dc17f3bc5
7
+ data.tar.gz: 56d9179cf6db6a307f1ca6e59e99ee3ebec842e80d36ebb901cfe6692314655b31e2abb5ff7573466c57518b17c33bb54256b43d2911f40ea3e74cf7115f00ba
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+ ruby '>= 1.9.3'
3
+
4
+ gem 'rest-client'
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Takashi SUGA <suchowan@box.email.ne.jp>.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,121 @@
1
+ watson-api-client - An IBM Watson™ API client
2
+ ================================================================
3
+
4
+ [![Gem Version](https://badge.fury.io/rb/watson-api-client.svg)](http://badge.fury.io/rb/watson-api-client)
5
+
6
+ The [watson-api-client](http://rubygems.org/gems/watson-api-client) is a gem to use REST API on the IBM Watson™ Developer Cloud.
7
+
8
+ It wraps the [rest-client](https://rubygems.org/gems/rest-client) REST API using [Swagger](http://swagger.io/) documents retrievable from the [Watson API Reference](https://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/apis/).
9
+
10
+
11
+ Installation
12
+ ------------
13
+
14
+ The watson-api-client gem can be installed by running:
15
+
16
+ gem install watson-api-client
17
+
18
+ Since watson-api-client is dependent on the rest-client, when the rest-client is not installed, the rest-client is also installed automatically.
19
+
20
+
21
+ Documentation
22
+ -------------
23
+
24
+ The simple API documentation for the watson-api-client is available on [RubyDoc.info](http://rubydoc.info/gems/watson-api-client).
25
+
26
+ However, most of the classes and methods of this gem are not described in the above document because they are dynamically defined.
27
+ Instead, you can output to the standard output the actual those list of classes and methods when you run the lib/watson-api-client.rb directly.
28
+
29
+
30
+ Source Code
31
+ -----------
32
+
33
+ The source code for the watson-api-client is available on [GitHub](https://github.com/suchowan/watson-api-client).
34
+
35
+
36
+ Example Usage
37
+ -------------
38
+
39
+ ###Preparation
40
+
41
+ The watson-api-client is a gem to use REST API on the IBM Watson™ Developer Cloud.
42
+ To enable these API, you have to do the user registration to the IBM Bluemix™ beforehand, make the services effective, and be relating them to your application.
43
+ For more information, refer to 'Getting Started' in '[Table of Contents for Services Documentation](http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/)'.
44
+
45
+ ###Relationship Extraction example
46
+
47
+ Let's use the 'Relationship Extraction' service.
48
+
49
+ require 'watson-api-client'
50
+ service = WatsonAPIClient::RelationshipExtraction.new(:user=>"xxxxxx",
51
+ :password=>"yyyyy",
52
+ :verify_ssl=>OpenSSL::SSL::VERIFY_NONE)
53
+ result = service.extract('rt' => 'json',
54
+ 'sid' => 'ie-en-news',
55
+ 'txt' => 'John Smith lives in New York, and he has been living there since 2001.')
56
+ p JSON.parse(result.body)
57
+
58
+ ####The generation of the RelationshipExtraction service object
59
+ First of all, the instance of the RelationshipExtraction class has to be generated.
60
+ The constructor argument is passed to the constructor of [RestClient::Resource](http://www.rubydoc.info/gems/rest-client/RestClient/Resource) class.
61
+ Please refer to the document of the rest-client for the details of this hash argument.
62
+
63
+ Class name called RelationshipExtraction is the camel case-ized service name of [Watson API Reference](http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/apis/).
64
+ :user and :password are the 'username' and the 'password' picked out from environment variable VCAP_SERVICES.
65
+ Please refer to '[Viewing Bluemix environment variables](http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/getting_started/gs-bluemix.shtml#vcapViewing)' for the details of VCAP_SERVICES.
66
+
67
+ However, when no server application associated with the service exists, 'Show Credentials' link does not appear on the console window.
68
+ Therefore, it is necessary to start up a server application even if it is a dummy.
69
+
70
+ If the server application is a Ruby on Rails application that require 'watson-api-client', and if it is deployed on the Cloud Foundry, the watson-api-client can read environment variable VCAP_SERVICES directly.
71
+ In this case, the specification of :user and :password is omissible.
72
+
73
+ ####The extraction of relationship in an example sentence using RelationshipExtraction#extract
74
+ Next, by the 'extract' method of the RelationshipExtraction class, we try to extract relationship in an example sentence.
75
+ How to set the argument can be seen by clicking on the 'Expand Operations' link of the Watson API Reference 'Relationship Extraction'.
76
+ The method name called 'extract' is the nickname corresponding to 'POST /v1/sire/0'.
77
+ This can be seen by opening the JSON code of Swagger by clicking on the '[Raw](http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/apis/listings/relationship-extraction)' link of the 'Relationship Extraction' of API Reference window.
78
+
79
+ The list of the method of the RelationshipExtraction class can be seen even by using the following script.
80
+
81
+ p WatsonAPIClient::RelationshipExtraction::API['digest']
82
+
83
+ Since 'json' is specified as Return type ('rt') in this example, the JSON string is stored in the body of the 'extract' method response.
84
+ When converting this JSON string to a hash object using JSON.parse method, the result of Relationship Extraction can be used variously by your client programs.
85
+
86
+ ###Personality Insights example
87
+
88
+ Next, let's use 'Personality Insights'.
89
+
90
+ service = WatsonAPIClient::PersonalityInsights.new(:user=>"xxxxxx",
91
+ :password=>"yyyyy",
92
+ :verify_ssl=>OpenSSL::SSL::VERIFY_NONE)
93
+ result = service.profile(
94
+ 'Content-Type' => "text/plain",
95
+ 'Accept' => "application/json",
96
+ 'Accept-Language' => "en",
97
+ 'Content-Language' => "en",
98
+ 'body' => open('https://raw.githubusercontent.com/suchowan/when_exe/master/LICENSE.txt',
99
+ :ssl_verify_mode=>OpenSSL::SSL::VERIFY_NONE))
100
+ p JSON.parse(result.body)
101
+
102
+ The class name, the method name, and the argument setting rules are the same as that of the case of 'Relationship Extraction' almost.
103
+ The rest-client and the watson-api-client judge which of path, query, header, body each argument is used for automatically.
104
+
105
+
106
+ More
107
+ -------
108
+ At present this gem is a α version and only the normal behavior of RelationshipExtraction and PersonalityInsights are confirmed.
109
+ It is welcome when you can cooperate with the confirmation of other various functions.
110
+
111
+
112
+ Credits
113
+ -------
114
+ Copyright (c) 2015 [Takashi SUGA](http://hosi.org/TakashiSuga.ttl)
115
+
116
+
117
+ Legal
118
+ -------
119
+ The watson-api-client is released under the MIT license, see [LICENSE](https://github.com/suchowan/watson-api-client/blob/master/LICENSE) for details.
120
+
121
+ IBM Watson™ and IBM Bluemix™ are trade marks of the IBM corporation.
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,132 @@
1
+ require 'json'
2
+ require 'openssl'
3
+ require 'open-uri'
4
+ require 'rest-client'
5
+ require 'pp' if __FILE__ == $PROGRAM_NAME
6
+
7
+ class WatsonAPIClient
8
+
9
+ VERSION = '0.0.1'
10
+
11
+ class << self
12
+ def listings(apis)
13
+ methods = {}
14
+ digest = {}
15
+ apis['apis'].each do |api|
16
+ api['operations'].each do |operation|
17
+ body = nil
18
+ (operation['parameters']||[]).each do |parameter|
19
+ next unless parameter['paramType'] == 'body'
20
+ body = parameter['name']
21
+ break
22
+ end
23
+ nickname = operation['nickname'].sub(/(.)/) {$1.downcase}
24
+ methods[nickname] = {'path'=>api['path'], 'operation'=>operation, 'body'=>body}
25
+ digest[nickname] = {'method'=>operation['method'], 'path'=>api['path'], 'summary'=>operation['summary']}
26
+ end
27
+ end
28
+ {'apis'=>apis, 'methods'=>methods, 'digest'=>digest}
29
+ end
30
+ private :listings
31
+ end
32
+
33
+ api_docs = {
34
+ :base => 'https://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/apis/',
35
+ :path => 'listings/api-docs.json',
36
+ :ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE
37
+ }
38
+ JSON.parse(ENV['WATSON_API_DOCS'] || '{}').each_pair do |key, value|
39
+ api_docs[key.to_sym] = value
40
+ end
41
+
42
+ Services = JSON.parse(ENV['VCAP_SERVICES'] || '{}')
43
+ Base = api_docs.delete(:base)
44
+ path = api_docs.delete(:path)
45
+ Options = api_docs
46
+ listings = JSON.parse(open(Base + path, Options).read)
47
+
48
+ listings['apis'].each do |list|
49
+ module_eval %Q{
50
+ class #{list['path'].gsub(/[-_\/](.)/) {$1.upcase}} < self
51
+ Service = superclass::Services['#{list['path'][1..-1].gsub(/-/, '_')}']
52
+ RawDoc = "#{Base + listings['basePath'] + list['path']}"
53
+
54
+ class << self
55
+ alias :_const_missing :const_missing
56
+
57
+ def const_missing(constant)
58
+ if constant == :API
59
+ const_set(:API, listings(JSON.parse(open(RawDoc, superclass::Options).read)))
60
+ else
61
+ _const_missing(constant)
62
+ end
63
+ end
64
+ end
65
+ pp [self, 'See ' + RawDoc, API['digest']] if '#{__FILE__}' == '#{$PROGRAM_NAME}'
66
+ end
67
+ }
68
+ end
69
+
70
+ # All subclass constructors use following hash parameter -
71
+ #
72
+ # @param [Hash] options See following..
73
+ # @option options [String] :url API URL (default: the url described in listings or VCAP_SERVICES)
74
+ # @option options [String] :user USER ID (default: the username described in VCAP_SERVICES)
75
+ # @option options [String] :password USER Password (default: the password described in VCAP_SERVICES)
76
+ # @option options [Object] other_options Other options are passed to RestClient::Resource.new[http://www.rubydoc.info/gems/rest-client/RestClient/Resource] as it is.
77
+ #
78
+ # @note VCAP_SERVICES[http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/getting_started/gs-bluemix.shtml#vcapViewing] is IBM Bluemix™ environment variable.
79
+ #
80
+ def initialize(options={})
81
+ credential = self.class::Service ? self.class::Service.first['credentials'] : {}
82
+ if options[:url]
83
+ @url = options.delete(:url)
84
+ elsif credential['url']
85
+ @url = credential['url']
86
+ else
87
+ @url = self.class::API['apis']['basePath']
88
+ @url += self.class::API['apis']['resourcePath'] unless @url.index(self.class::API['apis']['resourcePath'])
89
+ end
90
+ @options = {:user=>credential['username'], :password=>credential['password']}.merge(options)
91
+ @service = RestClient::Resource.new(@url, @options)
92
+ end
93
+
94
+ private
95
+
96
+ def rest_access_without_body(method, options={})
97
+ path, access = swagger_info(method, options)
98
+ @service[path].send(access, options)
99
+ end
100
+
101
+ def rest_access_with_body(method, options={})
102
+ path, access = swagger_info(method, options)
103
+ body = options.delete(self.class::API['methods'][method.to_s]['body'])
104
+ @service[path].send(access, body, options)
105
+ end
106
+
107
+ def swagger_info(method, options)
108
+ spec = self.class::API['methods'][method.to_s]
109
+ lacked = []
110
+ spec['operation']['parameters'].each do |parameter|
111
+ lacked << parameter['name'] if parameter['required'] && !options[parameter['name']]
112
+ end
113
+ raise ArgumentError, "Parameter(s) '#{lacked.join(', ')}' required, see #{self.class::RawDoc}." unless lacked.empty?
114
+ [spec['path'].gsub(/\{(.+?)\}/) {options.delete($1)}, spec['operation']['method'].downcase]
115
+ end
116
+
117
+ alias :_method_missing :method_missing
118
+
119
+ def method_missing(method, *args, &block)
120
+ definition = self.class::API['methods'][method.to_s]
121
+ if definition
122
+ self.class.module_eval %Q{
123
+ def #{method}(options={})
124
+ rest_access_#{definition['body'] ? 'with' : 'without'}_body("#{method}", options)
125
+ end
126
+ }
127
+ send(method, *args, &block)
128
+ else
129
+ _method_missing(method, *args, &block)
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'watson-api-client'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'watson-api-client'
7
+ s.version = WatsonAPIClient::VERSION
8
+ s.authors = ['Takashi SUGA']
9
+ s.email = ['suchowan@box.email.ne.jp']
10
+ s.homepage = 'https://github.com/suchowan/watson-api-client'
11
+ s.license = 'MIT'
12
+ s.summary = %q{An IBM Watson™ API client}
13
+ s.description = %q{The watson-api-client is a gem to use REST API on the IBM Watson™ Developer Cloud. It wraps the rest-client REST API using Swagger documents retrievable from the Watson API Reference.}
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ['lib']
19
+ s.required_ruby_version = '>= 1.9.3'
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency 'rspec'
23
+ s.add_runtime_dependency 'rest-client'
24
+ end
metadata ADDED
@@ -0,0 +1,67 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: watson-api-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Takashi SUGA
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: The watson-api-client is a gem to use REST API on the IBM Watson™ Developer
28
+ Cloud. It wraps the rest-client REST API using Swagger documents retrievable from
29
+ the Watson API Reference.
30
+ email:
31
+ - suchowan@box.email.ne.jp
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - Gemfile
37
+ - LICENSE
38
+ - README.md
39
+ - Rakefile
40
+ - lib/watson-api-client.rb
41
+ - watson-api-client.gemspec
42
+ homepage: https://github.com/suchowan/watson-api-client
43
+ licenses:
44
+ - MIT
45
+ metadata: {}
46
+ post_install_message:
47
+ rdoc_options: []
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.9.3
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ requirements: []
61
+ rubyforge_project:
62
+ rubygems_version: 2.4.5
63
+ signing_key:
64
+ specification_version: 4
65
+ summary: An IBM Watson™ API client
66
+ test_files: []
67
+ has_rdoc: