wikifari 0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 61c547b9abdd5c59c3e94f4576560441e8a2d29c
4
+ data.tar.gz: 6b165201ec26349ae8ae530f08ea2b8730808262
5
+ SHA512:
6
+ metadata.gz: 4bfd391bfe718308738deabf9cdbc798971a98432e506c706328533592f0e3b1dab90622923d61c078b7b7e5b555efa4c8ae487e84a4db781dcefb193fc64809
7
+ data.tar.gz: 1be148f0cf5eb1982992b43407d4cfe7f899c55299e8c70853654be6331df98cf5dae94c8521d2781401791de55a0b2d7e690f6da629be047a4d73bc9cfbff60
@@ -0,0 +1,18 @@
1
+ module WikiFari
2
+ class Helper
3
+ # Thanks, CGI!
4
+ def encode(string)
5
+ string.gsub(/([^\sa-zA-Z0-9\_\.\-\+]+)/) do
6
+ "%" + $1.unpack("H2" * $1.bytesize).join("%").upcase
7
+ end.tr(" ", "+")
8
+ end
9
+
10
+ def query(hash)
11
+ string = ""
12
+
13
+ hash.each { |key, val| string << "#{key.to_s}=#{val}&" }
14
+
15
+ string.sub /\&$/, ""
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,36 @@
1
+ module WikiFari
2
+ class Page
3
+ def initialize(data)
4
+ @data = JSON.parse data
5
+ @raw = data
6
+ end
7
+
8
+ def content
9
+ self.page["revisions"].first["*"] if self.page["revisions"]
10
+ end
11
+
12
+ def id
13
+ self.page["pageid"].to_s if self.page["pageid"]
14
+ end
15
+
16
+ def page
17
+ @data["query"]["pages"].values.first
18
+ end
19
+
20
+ def raw
21
+ @raw
22
+ end
23
+
24
+ def redirect?
25
+ self.content && self.content.match(/\#REDIRECT\s+\[\[(.*?)\]\]/i)
26
+ end
27
+
28
+ def redirect
29
+ self.content.match(/\#REDIRECT\s+\[\[(.*?)\]\]/i)[1]
30
+ end
31
+
32
+ def title
33
+ self.page["title"] if self.page["title"]
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,31 @@
1
+ module WikiFari
2
+ class Request < Helper
3
+ def find(title)
4
+ data = self.read :action => "query",
5
+ :prop => "revisions",
6
+ :rvprop => "content",
7
+ :titles => self.encode(title)
8
+
9
+ page = Page.new data
10
+
11
+ return self.find(page.redirect) if page.redirect?
12
+
13
+ page
14
+ end
15
+
16
+ def read(options)
17
+ site = Options[:site]
18
+ query = self.query options
19
+
20
+ URI.parse("#{site}?format=json&#{query}").read
21
+ end
22
+
23
+ def search(title)
24
+ data = self.read :action => "opensearch",
25
+ :limit => "10",
26
+ :search => self.encode(title)
27
+
28
+ Search.new data
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,16 @@
1
+ module WikiFari
2
+ class Search
3
+ def initialize(data)
4
+ @data = JSON.parse data
5
+ @raw = data
6
+ end
7
+
8
+ def list
9
+ @data[1] if @data[1]
10
+ end
11
+
12
+ def raw
13
+ @raw
14
+ end
15
+ end
16
+ end
data/lib/wikifari.rb ADDED
@@ -0,0 +1,23 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require "json"
4
+ require "open-uri"
5
+
6
+ require "wikifari/helper.rb"
7
+ require "wikifari/page.rb"
8
+ require "wikifari/request.rb"
9
+ require "wikifari/search.rb"
10
+
11
+ module WikiFari
12
+ Options = {
13
+ :site => "http://en.wikipedia.org/w/api.php"
14
+ }
15
+
16
+ Version = "0.1"
17
+
18
+ class Config < Request
19
+ def initialize(site = nil)
20
+ Options[:site] = site if site
21
+ end
22
+ end
23
+ end
metadata ADDED
@@ -0,0 +1,48 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wikifari
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Oscar Palmér
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-07-04 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Read and search for content on MediaWiki-powered sites.
14
+ email: opalmer@me.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/wikifari/helper.rb
20
+ - lib/wikifari/page.rb
21
+ - lib/wikifari/request.rb
22
+ - lib/wikifari/search.rb
23
+ - lib/wikifari.rb
24
+ homepage: http://git.io/wf
25
+ licenses:
26
+ - MIT
27
+ metadata: {}
28
+ post_install_message:
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 2.0.3
45
+ signing_key:
46
+ specification_version: 4
47
+ summary: WikiFari!
48
+ test_files: []