module MediaWiki::Gateway::Files

Public Instance Methods

download(file_name, options = {}) click to toggle source

Download file_name (without “File:” or “Image:” prefix). Returns file contents. All options are passed to image_info however options is forced to url. You can still set other options to control what file you want to download.

# File lib/media_wiki/gateway/files.rb, line 161
def download(file_name, options = {})
  if attributes = image_info(file_name, options.merge('iiprop' => 'url'))
    RestClient.get(attributes['url'])
  end
end
image_info(file_name_or_page_id, options = {}) click to toggle source

Requests image info from MediaWiki. Follows redirects.

file_name_or_page_id should be either:

  • a file name (String) you want info about without File: prefix.

  • or a Fixnum page id you of the file.

options is Hash passed as query arguments. See www.mediawiki.org/wiki/API:Query_-_Properties#imageinfo_.2F_ii for more information.

options should be either a string of properties joined by '|' or an Array (or more precisely something that responds to join).

Hash like object is returned where keys are image properties.

Example:

mw.image_info(
  'Trooper.jpg', 'iiprop' => ['timestamp', 'user']
).each do |key, value|
  puts "#{key.inspect} => #{value.inspect}"
end

Output:

"timestamp" => "2009-10-31T12:59:11Z"
"user" => "Valdas"
# File lib/media_wiki/gateway/files.rb, line 131
def image_info(file_name_or_page_id, options = {})
  if options['iiprop'].respond_to?(:join)
    options['iiprop'] = options['iiprop'].join('|')
  end

  form_data = options.merge(
    'action'    => 'query',
    'prop'      => 'imageinfo',
    'redirects' => true
  )

  file_name_or_page_id.is_a?(Fixnum) ?
    form_data['pageids'] = file_name_or_page_id :
    form_data['titles']  = "File:#{file_name_or_page_id}"

  xml = send_request(form_data)

  if valid_page?(page = xml.elements['query/pages/page'])
    if xml.elements['query/redirects/r']
      # We're dealing with redirect here.
      image_info(page.attributes['pageid'].to_i, options)
    else
      page.elements['imageinfo/ii'].attributes
    end
  end
end
images(article_or_pageid, imlimit = 200, options = {}) click to toggle source

Get image list for given article. Follows redirects.

article_or_pageid is the title or pageid of a single article imlimit is the maximum number of images to return (defaults to 200) options is the hash of additional options

Example:

images = mw.images('Gaborone')

images would contain ['File:Gaborone at night.jpg', 'File:Gaborone2.png', …]

# File lib/media_wiki/gateway/files.rb, line 82
def images(article_or_pageid, imlimit = 200, options = {})
  form_data = options.merge(
    'action'    => 'query',
    'prop'      => 'images',
    'imlimit'   => imlimit,
    'redirects' => true
  )

  form_data[article_or_pageid.is_a?(Fixnum) ?
    'pageids' : 'titles'] = article_or_pageid

  xml = send_request(form_data)

  if valid_page?(page = xml.elements['query/pages/page'])
    if xml.elements['query/redirects/r']
      # We're dealing with redirect here.
      images(page.attributes['pageid'].to_i, imlimit)
    else
      REXML::XPath.match(page, 'images/im').map { |x| x.attributes['title'] }
    end
  end
end
upload(path, options = {}) click to toggle source

Upload a file, or get the status of pending uploads. Several methods are available:

  • Upload file contents directly.

  • Have the MediaWiki server fetch a file from a URL, using the 'url' parameter

Requires Mediawiki 1.16+

Arguments:

  • path

    Path to file to upload. Set to nil if uploading from URL.

  • options

    Hash of additional options

Note that queries using session keys must be done in the same login session as the query that originally returned the key (i.e. do not log out and then log back in).

Options:

  • 'filename' - Target filename (defaults to local name if not given), options is alias for this.

  • 'comment' - Upload comment. Also used as the initial page text for new files if 'text' is not specified.

  • 'text' - Initial page text for new files

  • 'watch' - Watch the page

  • 'ignorewarnings' - Ignore any warnings

  • 'url' - Url to fetch the file from. Set path to nil if you want to use this.

Deprecated but still supported options:

  • :description - Description of this file. Used as 'text'.

  • :target - Target filename, same as 'filename'.

  • :summary - Edit summary for history. Used as 'comment'. Also used as 'text' if neither it or :description is specified.

Examples:

mw.upload('/path/to/local/file.jpg', 'filename' => 'RemoteFile.jpg')
mw.upload(nil, 'filename' => 'RemoteFile2.jpg', 'url' => 'http://remote.com/server/file.jpg')
# File lib/media_wiki/gateway/files.rb, line 41
def upload(path, options = {})
  if options[:description]
    options['text'] = options.delete(:description)
  end

  if options[:target]
    options['filename'] = options.delete(:target)
  end

  if options[:summary]
    options['text'] ||= options[:summary]
    options['comment'] = options.delete(:summary)
  end

  options['comment'] ||= 'Uploaded by MediaWiki::Gateway'

  options['file'] = File.new(path) if path

  full_name = path || options['url']
  options['filename'] ||= File.basename(full_name) if full_name

  unless options['file'] || options['url'] || options['sessionkey']
    raise ArgumentError,
      "One of the 'file', 'url' or 'sessionkey' options must be specified!"
  end

  send_request(options.merge(
    'action' => 'upload',
    'token'  => get_token('edit', options['filename'])
  ))
end