wikian 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +17 -7
- data/lib/wikian.rb +11 -23
- data/lib/wikian/contributions.rb +49 -0
- data/lib/wikian/get.rb +1 -4
- data/lib/wikian/monkeypatches.rb +24 -0
- data/lib/wikian/post.rb +1 -1
- data/lib/wikian/search.rb +1 -3
- data/lib/wikian/subcommand.rb +2 -1
- data/lib/wikian/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4365188a029e7d0d76f906b95ed64da8c5a8e6bdca0f31aa7b6fabde41d228be
|
4
|
+
data.tar.gz: 464993485465534f4d43fc7162d224780ed11ccf40bad13c0d66dda6e3de0b14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b7393793bb7f0c62d1e1a3910a1a99e39c7abd4e0e2374eaf7e376f2cbc125734543feb3a16cda505668b7cb09dd90d35903c87367293d82afc9c408d9768d6
|
7
|
+
data.tar.gz: 3c2ccd2cb6a1b753175a9b0a9bd0b545ea6ea3346418a17bd555df28e9bce88b4c236fab0a800018a9839c0a3e76c21abcff3e62acfdfd140c043e2b6cbb91bd
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# Wikian
|
2
2
|
|
3
|
-
Want to be happier
|
4
|
-
Me too, that's why I use [Wikian](https://rubygems.org/gems/wikian)
|
3
|
+
Want to be a happier [Wikipedian](https://en.wikipedia.org/wiki/Wikipedia:Wikipedians)?
|
4
|
+
Me too, that's why I use [Wikian](https://rubygems.org/gems/wikian) which lets me edit wikipedia pages locally, with my favorite text editor.
|
5
|
+
To install it:
|
5
6
|
|
6
7
|
```
|
7
8
|
$ gem install wikian
|
@@ -39,7 +40,7 @@ $ cat User:$WIKI_USER.en.wikitionary.org.wiki
|
|
39
40
|
== Last section==
|
40
41
|
testing
|
41
42
|
|
42
|
-
$ wi post -
|
43
|
+
$ wi post -a User:$WIKI_USER.en.wikitionary.org.wiki
|
43
44
|
Article uploaded
|
44
45
|
```
|
45
46
|
|
@@ -69,15 +70,24 @@ $ wi post -s 2 Wikipedia:Sandbox.en.wikipedia.org.wiki
|
|
69
70
|
Article uploaded
|
70
71
|
```
|
71
72
|
|
72
|
-
To search for a pattern in
|
73
|
+
To search for a pattern in Wikipedia:
|
73
74
|
|
74
75
|
```
|
75
76
|
$ wi search -t
|
76
77
|
Creating template wiki.yml
|
77
78
|
|
78
|
-
$ wi
|
79
|
-
|
79
|
+
$ wi s
|
80
|
+
Writing to Mr. Fixit.json
|
80
81
|
```
|
81
82
|
|
82
|
-
|
83
|
+
To get your last 10 wikipedia contributions:
|
84
|
+
|
85
|
+
```
|
86
|
+
$ wi c -t
|
87
|
+
Creating template wiki.yml
|
88
|
+
|
89
|
+
$ wi c
|
90
|
+
Writing to User:Example_User.contributions.en.wikipedia.org.json
|
91
|
+
```
|
83
92
|
|
93
|
+
Vim users should try out [mediawiki.vim](https://en.wikipedia.org/wiki/Help:Text_editor_support#Vim) which defines syntax highlighting and abbreviations for wikitext files.
|
data/lib/wikian.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
$LOAD_PATH.unshift __dir__
|
2
2
|
|
3
3
|
require 'wikian/subcommand'
|
4
|
+
require 'wikian/contributions'
|
4
5
|
require 'wikian/get'
|
6
|
+
require 'wikian/monkeypatches'
|
5
7
|
require 'wikian/post'
|
6
8
|
require 'wikian/search'
|
7
9
|
require 'wikian/version'
|
@@ -13,24 +15,6 @@ require 'net/http'
|
|
13
15
|
require 'open-uri'
|
14
16
|
require 'yaml'
|
15
17
|
|
16
|
-
# external libraries
|
17
|
-
require 'byebug'
|
18
|
-
|
19
|
-
class Array
|
20
|
-
# return true if `self` and `elms` have any element in common
|
21
|
-
def have?(elms)
|
22
|
-
(self & elms).length > 0 ? true : false
|
23
|
-
end
|
24
|
-
alias_method :has?, :have?
|
25
|
-
end
|
26
|
-
|
27
|
-
class Hash
|
28
|
-
# return a query string representation of a hash
|
29
|
-
def to_query
|
30
|
-
URI.decode(URI.encode_www_form(self))
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
18
|
class Wikian
|
35
19
|
class WikianError < StandardError; end
|
36
20
|
class UnknownSubcommandError < WikianError; end
|
@@ -53,7 +37,7 @@ class Wikian
|
|
53
37
|
|
54
38
|
@subcommand = args.shift
|
55
39
|
|
56
|
-
raise(UnknownSubcommandError, "Unkown Subcommand") unless %w(g p s get post search).include?(subcommand)
|
40
|
+
raise(UnknownSubcommandError, "Unkown Subcommand") unless %w(c g p s contributions get post search).include?(subcommand)
|
57
41
|
|
58
42
|
if subcommand[0] == 'g'
|
59
43
|
api = Wikian::Get.new(args)
|
@@ -62,13 +46,16 @@ class Wikian
|
|
62
46
|
elsif subcommand[0] == 's'
|
63
47
|
api = Wikian::Search.new(args)
|
64
48
|
api.doit
|
49
|
+
elsif subcommand[0] == 'c'
|
50
|
+
api = Wikian::Contributions.new(args)
|
51
|
+
api.doit
|
65
52
|
else
|
66
53
|
api = Wikian::Post.new(args)
|
67
54
|
api.post
|
68
55
|
end
|
69
56
|
|
70
57
|
rescue UnknownSubcommandError => e
|
71
|
-
puts "#{e.class} #{e.message}"
|
58
|
+
puts "#{e.class} #{e.message} in #{__FILE__}"
|
72
59
|
end
|
73
60
|
|
74
61
|
def help
|
@@ -88,9 +75,10 @@ class Wikian
|
|
88
75
|
-v, --version
|
89
76
|
|
90
77
|
Subcommands:
|
91
|
-
|
92
|
-
|
93
|
-
|
78
|
+
c, contributions [N] get user last N contributions. N defaults to 20
|
79
|
+
g, get get wikitext file from a wikipedia article
|
80
|
+
p, post post wikitext file to a wikipedia article
|
81
|
+
s, search search wikitext file to a wikipedia article
|
94
82
|
|
95
83
|
Examples:
|
96
84
|
# create wiki.yml template
|
@@ -0,0 +1,49 @@
|
|
1
|
+
class Wikian
|
2
|
+
class WikianGetError < StandardError; end
|
3
|
+
class ExtractWikiError < WikianGetError; end
|
4
|
+
class ArgumentRequiredError < WikianGetError; end
|
5
|
+
|
6
|
+
class Contributions < Subcommand
|
7
|
+
DEFAULT_MAX_CONTRIBUTIONS = 20
|
8
|
+
|
9
|
+
def initialize(args)
|
10
|
+
super
|
11
|
+
|
12
|
+
max_contributions = args.find(&:numeric?) || DEFAULT_MAX_CONTRIBUTIONS
|
13
|
+
|
14
|
+
raise(BadUrlError, "Try passing the '-t' option") unless yaml['meta']['site']
|
15
|
+
|
16
|
+
@output_file = 'User:' + ENV['WIKI_USER'] + '.contributions.' + yaml['meta']['site']
|
17
|
+
|
18
|
+
@params.merge!('ucuser' => ENV['WIKI_USER'], 'uclimit' => max_contributions, 'format' => Wikian::RESPONSE_FORMAT)
|
19
|
+
|
20
|
+
@query = @params.to_query
|
21
|
+
|
22
|
+
@api_url = URI("https://#{yaml['meta']['site']}/w/api.php?#{query}")
|
23
|
+
rescue => e
|
24
|
+
puts "#{e.class} in #{__FILE__}. #{e.message}"
|
25
|
+
exit
|
26
|
+
end
|
27
|
+
|
28
|
+
def template
|
29
|
+
<<~eos
|
30
|
+
meta:
|
31
|
+
http_method: get
|
32
|
+
site: en.wikipedia.org
|
33
|
+
headers:
|
34
|
+
#accept-encoding: gzip
|
35
|
+
user-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
|
36
|
+
api:
|
37
|
+
action:
|
38
|
+
- query
|
39
|
+
list:
|
40
|
+
- usercontribs
|
41
|
+
ucprop:
|
42
|
+
- title
|
43
|
+
- comment
|
44
|
+
- timestamp
|
45
|
+
- sizediff
|
46
|
+
eos
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/wikian/get.rb
CHANGED
@@ -2,7 +2,6 @@ class Wikian
|
|
2
2
|
class WikianGetError < StandardError; end
|
3
3
|
class ExtractWikiError < WikianGetError; end
|
4
4
|
class ArgumentRequiredError < WikianGetError; end
|
5
|
-
class BadUrlError < WikianGetError; end
|
6
5
|
|
7
6
|
class Get < Subcommand
|
8
7
|
attr_accessor :title
|
@@ -26,7 +25,7 @@ class Wikian
|
|
26
25
|
|
27
26
|
@api_url = URI("https://#{url.host}/w/api.php?#{query}")
|
28
27
|
rescue => e
|
29
|
-
puts "#{e.class} #{
|
28
|
+
puts "#{e.class} in #{__FILE__}. #{e.message}"
|
30
29
|
exit
|
31
30
|
end
|
32
31
|
|
@@ -90,8 +89,6 @@ class Wikian
|
|
90
89
|
- main
|
91
90
|
formatversion:
|
92
91
|
- 2
|
93
|
-
format:
|
94
|
-
- json
|
95
92
|
eos
|
96
93
|
end
|
97
94
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class Array
|
2
|
+
# return true if `self` and `elms` have any element in common
|
3
|
+
def have?(elms)
|
4
|
+
(self & elms).length > 0 ? true : false
|
5
|
+
end
|
6
|
+
alias_method :has?, :have?
|
7
|
+
end
|
8
|
+
|
9
|
+
class Hash
|
10
|
+
# return a query string representation of a hash
|
11
|
+
def to_query
|
12
|
+
URI.decode(URI.encode_www_form(self))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class String
|
17
|
+
# check is a string is numeric
|
18
|
+
#
|
19
|
+
# usage: 'asdf'.numeric? # => false
|
20
|
+
# '5.1'.numeric? # => true
|
21
|
+
def numeric?
|
22
|
+
Float(self) != nil rescue false
|
23
|
+
end
|
24
|
+
end
|
data/lib/wikian/post.rb
CHANGED
data/lib/wikian/search.rb
CHANGED
@@ -14,7 +14,7 @@ class Wikian
|
|
14
14
|
|
15
15
|
@api_url = URI("https://#{yaml['meta']['site']}/w/api.php?#{query}")
|
16
16
|
rescue => e
|
17
|
-
puts "#{e.class} #{
|
17
|
+
puts "#{e.class} in #{__FILE__}. #{e.message}"
|
18
18
|
exit
|
19
19
|
end
|
20
20
|
|
@@ -32,8 +32,6 @@ class Wikian
|
|
32
32
|
- search
|
33
33
|
srsearch: # text to search for. You can use multiple
|
34
34
|
- Mr. Fixit
|
35
|
-
format:
|
36
|
-
- json
|
37
35
|
eos
|
38
36
|
end
|
39
37
|
end
|
data/lib/wikian/subcommand.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
class Wikian
|
3
3
|
class WikianSubcommandError < StandardError; end
|
4
4
|
class MissingConfigFileError < WikianSubcommandError; end
|
5
|
+
class BadUrlError < WikianSubcommandError; end
|
5
6
|
|
6
7
|
# class to be inherited by other Wikian classes
|
7
8
|
class Subcommand
|
@@ -67,7 +68,7 @@ class Wikian
|
|
67
68
|
|
68
69
|
write_response
|
69
70
|
rescue => e
|
70
|
-
puts "#{e.class} #{
|
71
|
+
puts "#{e.class} in #{__FILE__}. #{e.message}"
|
71
72
|
exit
|
72
73
|
end
|
73
74
|
|
data/lib/wikian/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wikian
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sergioro
|
@@ -32,7 +32,9 @@ files:
|
|
32
32
|
- exe/wikian
|
33
33
|
- lib/.gitignore
|
34
34
|
- lib/wikian.rb
|
35
|
+
- lib/wikian/contributions.rb
|
35
36
|
- lib/wikian/get.rb
|
37
|
+
- lib/wikian/monkeypatches.rb
|
36
38
|
- lib/wikian/post.rb
|
37
39
|
- lib/wikian/search.rb
|
38
40
|
- lib/wikian/subcommand.rb
|