User:ZackBot/Infobox-needed

From Wikipedia, the free encyclopedia
require 'mediawiki_api'
require 'HTTParty'
require 'timeout'
require '../helper'
require 'uri'
require 'colorize'
require_relative './page'

URL = "https://petscan.wmflabs.org/?psid=5950450&format=json"

Helper.read_env_vars(file = '../vars.csv')

@content = HTTParty.get(URL)

client = MediawikiApi::Client.new 'https://en.wikipedia.org/w/api.php'
client.log_in ENV['USERNAME'], ENV['PASSWORD']

pages = @content["*"].first['a']['*'].map do |i|
  i["title"].gsub('_', ' ')
end
puts "Total to do: #{pages.size}"

pages.each do |title|
  puts title

  full_text = client.get_wikitext(title).body
  if Page.parse_page(full_text,title)
    talk_title = "Talk:#{title}"
    begin
      talk_page_text = client.get_wikitext(talk_title).body
      new_text = Page.parse_talk_page(talk_page_text)
      client.edit(title: talk_title, text: new_text, summary: "removing 'needs-infobox' as the page has an infobox")
      puts "- success".colorize(:green)
      sleep 5
    rescue Page::NeedsInfoboxNotFound => e
      Helper.print_message('Raised: "NeedsInfoboxNotFound"')
      Helper.print_link(talk_title)
      next      
    end     
  end
end

puts "DONE!"



module Page
  class NeedsInfoboxNotFound < StandardError; end
  def self.parse_page(full_text, title)
    if has_infobox?(full_text)
      Helper.print_message('HAS INFOBOX')
      Helper.print_link(title)
      return "Has Infobox"
    else
      return nil
    end
  end
  
  NEEDS_INFOBOX = /\|\s*needs-infobox\s*=\s*y(?:es){0,1}\s*/
  def self.parse_talk_page(talk_page_text)
    raise NeedsInfoboxNotFound unless talk_page_text.match?(NEEDS_INFOBOX)
    talk_page_text.gsub(NEEDS_INFOBOX,'')
  end

  INFOBOX = /infobox/i
  def self.has_infobox?(text)
    text.match?(INFOBOX)
  end
end