wikian 0.1.5 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c7641f6124dd8e9db31fa2dc7688146107db693d65d8347af57d45ee40205519
4
- data.tar.gz: a9def9f5d7d2cc6a00c375f9e690e96aaf193a601359ae98fb1f4abea1f31402
3
+ metadata.gz: 9b9d29a2c2542c0fab6ff8a49f2f3803250b497956b62b1ae4985e6edfb1aead
4
+ data.tar.gz: 524ab9f53e433589678b3751bac059fcec6293b2620f89523285dee5d5db75a0
5
5
  SHA512:
6
- metadata.gz: d7887e82d7f20332717314772cba3ca4bbb4d7cb54d5a1dab3235f1c248654949c3427feaa6915324b437117d0e87147c219a2acbed7654ddeb22c89541abc50
7
- data.tar.gz: 37998e9226c13ddfa504921859e4da1f9f8e96a19edcc617faaf30a7a387d80fff4768e29c868f9ebfb363c168baaada1f3280cbc241c3f91c10c732e378c790
6
+ metadata.gz: 12844ea63af9aba3181ace13c9f1c36dfb7448df719925f21bc93a4e15ec105e1846bfbbb47cb8101432682674bfb895baaefca22df5e1d45d6d76dbc821002e
7
+ data.tar.gz: 2e4eba98c8ba630050bf650b496f3221e388449ae963ab78c49cd0acf8708d76293905909e7bccd613a56eb5bb94bd5c9c5d239cb3fe3f4658bdafae6f872361
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- wikian (0.1.5)
4
+ wikian (0.1.10)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # Wikian
2
2
 
3
- Want to be happier while editing wiki files?
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
+ Then you want [Wikian](https://rubygems.org/gems/wikian), which lets you edit Wikipedia pages locally, with your 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 -p User:$WIKI_USER.en.wikitionary.org.wiki
43
+ $ wi post -a User:$WIKI_USER.en.wikitionary.org.wiki
43
44
  Article uploaded
44
45
  ```
45
46
 
@@ -55,12 +56,38 @@ Writing to Wikipedia:Sandbox.en.wikipedia.org.json
55
56
  Writing to Wikipedia:Sandbox.en.wikipedia.org.wiki
56
57
  ```
57
58
 
58
- You can then edit the the article in your favorite text editor and uploaded:
59
+ Then edit the article and upload it:
59
60
 
60
61
  ```bash
61
62
  $ wi post Wikipedia:Sandbox.en.wikipedia.org.wiki
62
63
  Article uploaded
63
64
  ```
64
65
 
65
- 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.
66
+ To append wikitext to section 2:
66
67
 
68
+ ```bash
69
+ $ wi post -s 2 Wikipedia:Sandbox.en.wikipedia.org.wiki
70
+ Article uploaded
71
+ ```
72
+
73
+ To search for a pattern in Wikipedia:
74
+
75
+ ```
76
+ $ wi search -t
77
+ Creating template wiki.yml
78
+
79
+ $ wi s
80
+ Writing to Mr. Fixit.json
81
+ ```
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
+ ```
92
+
93
+ Vim users should try [mediawiki.vim](https://en.wikipedia.org/wiki/Help:Text_editor_support#Vim) which adds syntax highlighting and abbreviations for wikitext files.
@@ -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
@@ -83,13 +70,15 @@ class Wikian
83
70
  -m, --message MESSAGE add a commit message (HIGHLY recommended)
84
71
  -p, --prepend prepend the input file
85
72
  -r, --remove-cookie remove API cookie
73
+ -s, --section NUMBER section to edit
86
74
  -t, --template create template configuration file
87
75
  -v, --version
88
76
 
89
77
  Subcommands:
90
- g, get get wikitext file from a wikipedia article
91
- p, post post wikitext file to a wikipedia article
92
- s, search search wikitext file to a wikipedia article
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
93
82
 
94
83
  Examples:
95
84
  # create wiki.yml template
@@ -0,0 +1,50 @@
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
+ # for a list of parameters to use here see: https://www.mediawiki.org/wiki/API:Usercontribs
31
+ meta:
32
+ http_method: get
33
+ site: en.wikipedia.org
34
+ headers:
35
+ #accept-encoding: gzip
36
+ user-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
37
+ api:
38
+ action:
39
+ - query
40
+ list:
41
+ - usercontribs
42
+ ucprop:
43
+ - title
44
+ - comment
45
+ - timestamp
46
+ - sizediff
47
+ eos
48
+ end
49
+ end
50
+ end
@@ -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} #{e.message} in #{__FILE__}"
28
+ puts "#{e.class} in #{__FILE__}. #{e.message}"
30
29
  exit
31
30
  end
32
31
 
@@ -57,7 +56,6 @@ class Wikian
57
56
 
58
57
  # this is ugly, but Wikipedia is inconsistent in their JSON value for 'pages'. Sometimes it's a hash, sometimes it's an array.
59
58
  if pages.respond_to? :keys
60
- byebug
61
59
  create_wiki.call(pages.values.first['title'], pages.values.first['revisions'])
62
60
  else
63
61
  pages.each do |page|
@@ -68,12 +66,13 @@ class Wikian
68
66
  rescue => e
69
67
  puts "An error occurred while extracting the wikitext",
70
68
  "Try using a new config file by pasing the '-t' option.",
71
- "Or pass '-d' option for debugging"
69
+ "Or pass the '-d' option for debugging"
72
70
  exit
73
71
  end
74
72
 
75
73
  def template
76
74
  <<~eos
75
+ # for a list of parameters to use here see: https://www.mediawiki.org/wiki/API:Get_the_contents_of_a_page
77
76
  meta:
78
77
  headers:
79
78
  user-agent: Wikian
@@ -84,15 +83,13 @@ class Wikian
84
83
  - revisions
85
84
  rvprop:
86
85
  - content
87
- #rvsection:
88
- # - 0
89
- # - 2
86
+ #rvsection: # get specific sections
87
+ # - 0
88
+ # - 2
90
89
  rvslots:
91
90
  - main
92
91
  formatversion:
93
92
  - 2
94
- format:
95
- - json
96
93
  eos
97
94
  end
98
95
  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
@@ -23,7 +23,7 @@ class Wikian
23
23
 
24
24
  @debug = (args & %w(-d --debug)).length > 0 ? true : false
25
25
  rescue => e
26
- puts "#{e.class} in #{__FILE__}"
26
+ puts "#{e.class} in #{__FILE__}. #{e.message}"
27
27
  exit
28
28
  end
29
29
 
@@ -107,12 +107,15 @@ class Wikian
107
107
  # pass the wikitext in request body
108
108
  @body_text = wikitext
109
109
  end
110
- if args.include?('-c')
110
+ if args.have?(%w(-c --captcha))
111
111
  params['captchaid'], params['captchaword'] = args[args.index('-c')+1].split(':')
112
112
  end
113
- if args.include?('-m')
113
+ if args.have?(%w(-m --message))
114
114
  params['summary'] = args[args.index('-m')+1]
115
115
  end
116
+ if args.have?(%w(-s --section))
117
+ params['section'] = args[args.index('-s')+1]
118
+ end
116
119
  @query = URI.encode_www_form(params)
117
120
  end
118
121
 
@@ -14,13 +14,13 @@ 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} #{e.message} in #{__FILE__}"
17
+ puts "#{e.class} in #{__FILE__}. #{e.message}"
18
18
  exit
19
19
  end
20
20
 
21
21
  def template
22
22
  <<~eos
23
- # Get last 5 revisions of the Main Page.
23
+ # for a list of parameters to use here see: https://www.mediawiki.org/wiki/API:Search
24
24
  meta:
25
25
  site: en.wikipedia.org
26
26
  headers:
@@ -30,10 +30,8 @@ class Wikian
30
30
  - query
31
31
  list:
32
32
  - search
33
- srsearch:
34
- - Craig Noone
35
- format:
36
- - json
33
+ srsearch: # text to search for. You can use multiple
34
+ - Mr. Fixit
37
35
  eos
38
36
  end
39
37
  end
@@ -1,5 +1,9 @@
1
1
  #!/usr/bin/env -S ruby -W0
2
2
  class Wikian
3
+ class WikianSubcommandError < StandardError; end
4
+ class MissingConfigFileError < WikianSubcommandError; end
5
+ class BadUrlError < WikianSubcommandError; end
6
+
3
7
  # class to be inherited by other Wikian classes
4
8
  class Subcommand
5
9
  attr_accessor :args, :res, :yaml, :query, :title, :api_url, :debug, :output_file
@@ -15,10 +19,14 @@ class Wikian
15
19
 
16
20
  @debug = (args & %w(-d --debug)).length > 0 ? true : false
17
21
 
22
+ raise MissingConfigFileError unless File.exist?(Wikian::CONFIG_FILE)
18
23
  @yaml=YAML.load(File.open(Wikian::CONFIG_FILE))
19
24
 
20
25
  # some params like 'titles' can contain multiple entries joined by '|'. More info in Wikipedia API docs
21
26
  @params = Hash[yaml['api'].keys.zip(yaml['api'].values.map{|arr| arr.join("|")})]
27
+ rescue MissingConfigFileError => e
28
+ puts "#{e.class} try passing the '-t' option to generate #{Wikian::CONFIG_FILE} in #{__FILE__}"
29
+ exit
22
30
  end
23
31
 
24
32
  def make_template
@@ -28,9 +36,7 @@ class Wikian
28
36
  (puts 'Bye'; exit) if answer != 'y'
29
37
  end
30
38
 
31
- File.open(CONFIG_FILE, 'w') do |f|
32
- f.write template
33
- end
39
+ File.write(CONFIG_FILE, template)
34
40
  exit
35
41
  end
36
42
 
@@ -60,7 +66,7 @@ class Wikian
60
66
 
61
67
  write_response
62
68
  rescue => e
63
- puts "#{e.class} #{e.message} in #{__FILE__}"
69
+ puts "#{e.class} in #{__FILE__}. #{e.message}"
64
70
  exit
65
71
  end
66
72
 
@@ -1,3 +1,3 @@
1
1
  class Wikian
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.10"
3
3
  end
@@ -6,9 +6,9 @@ Gem::Specification.new do |spec|
6
6
  spec.authors = ["sergioro"]
7
7
  spec.email = ["yo@sergioro.com"]
8
8
 
9
- spec.summary = %q{Get and edit wikipedia articles}
10
- spec.description = %q{Get and edit wikipedia articles}
11
- #spec.homepage = "TODO: Put your gem's website or public repo URL here."
9
+ spec.summary = %q{Get and update Wikipedia articles}
10
+ spec.description = %q{Get and update Wikipedia articles}
11
+ spec.homepage = "https://sergioro.mx/posts/wikian"
12
12
  spec.license = "MIT"
13
13
  spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
14
14
 
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wikian
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - sergioro
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-11 00:00:00.000000000 Z
11
+ date: 2020-09-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Get and edit wikipedia articles
13
+ description: Get and update Wikipedia articles
14
14
  email:
15
15
  - yo@sergioro.com
16
16
  executables:
@@ -32,13 +32,15 @@ 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
39
41
  - lib/wikian/version.rb
40
42
  - wikian.gemspec
41
- homepage:
43
+ homepage: https://sergioro.mx/posts/wikian
42
44
  licenses:
43
45
  - MIT
44
46
  metadata: {}
@@ -60,5 +62,5 @@ requirements: []
60
62
  rubygems_version: 3.1.4
61
63
  signing_key:
62
64
  specification_version: 4
63
- summary: Get and edit wikipedia articles
65
+ summary: Get and update Wikipedia articles
64
66
  test_files: []