module MediaWiki::Gateway::Files
Public Instance Methods
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
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
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 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