commit e015f902521e2423271572ba79e454fe4ca65a78 Author: Alexander Yakovlev Date: Sun Jan 15 13:18:33 2017 +0700 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5b6b072 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +config.yaml diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..6df0916 --- /dev/null +++ b/Gemfile @@ -0,0 +1,2 @@ +source 'https://rubygems.org' +gem 'mediawiki_api' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..d1ec5e7 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,37 @@ +GEM + remote: https://rubygems.org/ + specs: + domain_name (0.5.20161129) + unf (>= 0.0.5, < 1.0.0) + faraday (0.11.0) + multipart-post (>= 1.2, < 3) + faraday-cookie_jar (0.0.6) + faraday (>= 0.7.4) + http-cookie (~> 1.0.0) + faraday_middleware (0.11.0) + faraday (>= 0.7.4, < 1.0) + http-cookie (1.0.3) + domain_name (~> 0.5) + mediawiki_api (0.7.0) + faraday (~> 0.9, >= 0.9.0) + faraday-cookie_jar (~> 0.0, >= 0.0.6) + faraday_middleware (~> 0.10, >= 0.10.0) + mini_portile2 (2.1.0) + multipart-post (2.0.0) + nokogiri (1.7.0.1) + mini_portile2 (~> 2.1.0) + pandoc-ruby (2.0.1) + unf (0.1.4) + unf_ext + unf_ext (0.0.7.2) + +PLATFORMS + ruby + +DEPENDENCIES + mediawiki_api + nokogiri + pandoc-ruby + +BUNDLED WITH + 1.13.6 diff --git a/MWClient.rb b/MWClient.rb new file mode 100644 index 0000000..3ec8b10 --- /dev/null +++ b/MWClient.rb @@ -0,0 +1,7 @@ +require 'mediawiki_api' + +class MWClient < MediawikiApi::Client + def get_wikitext(title) + @conn.get '/index.php', action: 'raw', title: title + end +end diff --git a/README.md b/README.md new file mode 100644 index 0000000..c26194d --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# A MediaWiki bot for VoteNY widget + +Adds a **VoteNY** widget to every page in "Jokes" category. + +### Script configuration +See `config.yaml`: + +* `username`: wiki user login +* `password`: wiki user password +* `dummy`: test mode if `true` diff --git a/Wiki.rb b/Wiki.rb new file mode 100644 index 0000000..24bfcf6 --- /dev/null +++ b/Wiki.rb @@ -0,0 +1,45 @@ +require 'yaml' +require 'json' +require './MWClient.rb' + +class Wiki + @client = nil + @text = nil + @dummy = false + + def initialize + config = YAML::load_file(File.join(__dir__, 'config.yaml')) + @client = MWClient.new config["url"] + @client.log_in config["username"], config["password"] + @dummy = config["dummy"] + end + + def create_page(name, content) + if not @dummy then + @client.create_page name, content + return true + else + if @dummy then + puts "Draft mode.\n" + end + puts @text + return true + end + end + def exists?(name) + status = @client.get_wikitext(name).status + if status.to_i == 404 then + return false + end + return true + end + def get_list + list = @client.query list: 'allpages' + return list.data + end + def get_text(page_title) + return @client.get_wikitext(page_title) + end + + attr_accessor :dummy +end diff --git a/start.rb b/start.rb new file mode 100755 index 0000000..b799347 --- /dev/null +++ b/start.rb @@ -0,0 +1,13 @@ +#!/usr/bin/ruby +require 'pp' +require './Wiki.rb' + +wiki = Wiki.new +list = wiki.get_list()['allpages'] +for page in list do + page_text = wiki.get_text(page['title']).body + if page_text.match("[[Category:Jokes]]") and not page_text.match("") then + page_text = page_text + "\n\n" + wiki.create_page(page['title'], page_text) + end +end