wikian 0.1.5 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
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: []