Class: Quickpress::Wordpress
- Inherits:
-
Object
- Object
- Quickpress::Wordpress
- Defined in:
- lib/quickpress/wordpress.rb
Overview
Represents an instance of a Wordpress connection. Handles direct calls to the Wordpress API.
Constant Summary collapse
- VERY_LARGE_NUMBER =
Yes it is
2**31 - 1
Instance Attribute Summary collapse
-
#categories ⇒ Object
readonly
All categories on blog.
-
#options ⇒ Object
readonly
Blog’s options in a Hash.
-
#tagline ⇒ Object
readonly
Blog subtitle.
-
#title ⇒ Object
readonly
Blog title.
-
#url ⇒ Object
readonly
Blog address.
Instance Method Summary collapse
-
#delete_page(id) ⇒ Object
Deletes page with numerical
id. -
#delete_post(id) ⇒ Object
Deletes post with numerical
id. -
#edit_post(options) ⇒ Object
Edits post/page on the Wordpress site with
options. -
#get_all_media ⇒ Object
Returns all media items on the blog.
-
#get_category_status ⇒ Object
Returns categories and how many posts they have.
-
#get_comment_status ⇒ Object
Returns comment counts according to their status.
- #get_media(id) ⇒ Object
-
#get_options ⇒ Object
Retrieves as much metadata about the blog as it can.
-
#get_page(id) ⇒ Object
Returns page with numerical
id. -
#get_pages(ammount = 0) ⇒ Object
Returns
ammountpages. -
#get_post(id) ⇒ Object
Returns post with numerical
id. -
#get_posts(ammount = 0) ⇒ Object
Returns
ammountposts. -
#get_users ⇒ Object
Returns all users currently registered on the blog.
-
#initialize(url, user, pass) ⇒ Wordpress
constructor
Creates a new connection to
urlwithuser/pass. -
#new_media(filename) ⇒ Object
Uploads
filenameto Wordpress, returning it’s ID, URL and unique filename inside Wordpress. -
#new_post(options) ⇒ Object
Sends a post/page to the Wordpress site with
options. -
#set_options(new_options) ⇒ Object
Sets the blog’s options according to
new_optionshash.
Constructor Details
#initialize(url, user, pass) ⇒ Wordpress
Creates a new connection to url with user/pass.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/quickpress/wordpress.rb', line 23 def initialize(url, user, pass) # Sanitizing url: # # If provided with something like "mysite.com/blog" # * host will be "mysite.com" # * path will be "/blog/xmlrpc.php" host = url path = "/xmlrpc.php" paths = url.split '/' if paths.size > 1 host = paths[0] path = '/' + paths[1..-1].join('/') + "/xmlrpc.php" end @client = Rubypress::Client.new(:host => host, :path => path, :username => user, :password => pass) # Actually connecting, takes a while = @client.getOptions(:options => ["blog_title", "blog_tagline", "blog_url"]) @title = ["blog_title"]["value"] @tagline = ["blog_tagline"]["value"] @url = ["blog_url"]["value"] @categories = [] terms = @client.getTerms(:taxonomy => "category") terms.each do |term| @categories << term["name"] end end |
Instance Attribute Details
#categories ⇒ Object (readonly)
All categories on blog
14 15 16 |
# File 'lib/quickpress/wordpress.rb', line 14 def categories @categories end |
#options ⇒ Object (readonly)
Blog’s options in a Hash. Need to call get_options first.
17 18 19 |
# File 'lib/quickpress/wordpress.rb', line 17 def @options end |
#tagline ⇒ Object (readonly)
Blog subtitle.
12 13 14 |
# File 'lib/quickpress/wordpress.rb', line 12 def tagline @tagline end |
#title ⇒ Object (readonly)
Blog title.
11 12 13 |
# File 'lib/quickpress/wordpress.rb', line 11 def title @title end |
#url ⇒ Object (readonly)
Blog address
13 14 15 |
# File 'lib/quickpress/wordpress.rb', line 13 def url @url end |
Instance Method Details
#delete_page(id) ⇒ Object
Deletes page with numerical id.
146 147 148 149 150 151 |
# File 'lib/quickpress/wordpress.rb', line 146 def delete_page id @client.deletePost(:post_id => id, :filter => { :post_type => 'page' }) end |
#delete_post(id) ⇒ Object
Deletes post with numerical id.
141 142 143 |
# File 'lib/quickpress/wordpress.rb', line 141 def delete_post id @client.delnetePost(:post_id => id) end |
#edit_post(options) ⇒ Object
Edits post/page on the Wordpress site with options.
Format is the same as Wordpress#new_post. Check it out.
93 94 95 96 97 98 99 100 |
# File 'lib/quickpress/wordpress.rb', line 93 def edit_post @client.editPost() info = @client.getPost(:post_id => [:post_id], :fields => [:link]) info["link"] end |
#get_all_media ⇒ Object
Returns all media items on the blog
256 257 258 259 260 261 262 263 264 |
# File 'lib/quickpress/wordpress.rb', line 256 def get_all_media lib = @client.getMediaLibrary return [] if lib.empty? # Getting only the fields we're interested on lib.map do |m| [m["attachment_id"], m["title"], m["link"]] end end |
#get_category_status ⇒ Object
Returns categories and how many posts they have. It’s an Array of two elements:
-
Category name
-
Post count
225 226 227 228 229 |
# File 'lib/quickpress/wordpress.rb', line 225 def get_category_status status = @client.getTerms(:taxonomy => 'category') status.map { |s| [s["name"], s["count"]] } # all we need end |
#get_comment_status ⇒ Object
Returns comment counts according to their status. It’s an Array of two elements:
-
Wordpress’ internal status name
-
Comment counts on that status
213 214 215 216 217 |
# File 'lib/quickpress/wordpress.rb', line 213 def get_comment_status status = @client.getCommentCount status.to_a end |
#get_media(id) ⇒ Object
266 267 268 |
# File 'lib/quickpress/wordpress.rb', line 266 def get_media id @client.getMediaItem(:attachment_id => id) end |
#get_options ⇒ Object
Retrieves as much metadata about the blog as it can.
Returns an array of 3-element arrays:
-
Wordpress’ internal option name. You must use it to set options. See
set_options. -
Human-readable description of the option.
-
Current value.
The values are detailed here: codex.wordpress.org/Option_Reference
165 166 167 168 169 |
# File 'lib/quickpress/wordpress.rb', line 165 def = @client.getOptions .map { |o| [o[0], o[1]["desc"], o[1]["value"]] } end |
#get_page(id) ⇒ Object
Returns page with numerical id. It’s a Hash with attributes/values.
121 122 123 124 125 126 |
# File 'lib/quickpress/wordpress.rb', line 121 def get_page id @client.getPost(:post_id => id, :filter => { :post_type => 'page' }) end |
#get_pages(ammount = 0) ⇒ Object
Returns ammount pages. If ammount is zero, will return all posts. FIXME when getting by ammount it is ordered by the opposite
131 132 133 134 135 136 137 138 |
# File 'lib/quickpress/wordpress.rb', line 131 def get_pages(ammount=0) ammount = VERY_LARGE_NUMBER if ammount.zero? @client.getPosts(:filter => { :number => ammount, :post_type => 'page' }) end |
#get_post(id) ⇒ Object
Returns post with numerical id. It’s a Hash with attributes/values.
105 106 107 |
# File 'lib/quickpress/wordpress.rb', line 105 def get_post id @client.getPost(:post_id => id) end |
#get_posts(ammount = 0) ⇒ Object
Returns ammount posts. If ammount is zero, will return all posts. FIXME when getting by ammount it is ordered by the opposite
112 113 114 115 116 |
# File 'lib/quickpress/wordpress.rb', line 112 def get_posts(ammount=0) ammount = VERY_LARGE_NUMBER if ammount.zero? @client.getPosts(:filter => { :number => ammount }) end |
#get_users ⇒ Object
Returns all users currently registered on the blog.
It’s an Array of two-element Arrays:
-
Wordpress’ internal info name
-
It’s value
195 196 197 198 199 200 201 202 203 204 205 |
# File 'lib/quickpress/wordpress.rb', line 195 def get_users users = @client.getUsers # Replacing XML-RPC's ugly DateTime class # with Ruby's Time users.each do |u| u["registered"] = u["registered"].to_time end users.map { |u| u.to_a } end |
#new_media(filename) ⇒ Object
Uploads filename to Wordpress, returning it’s ID, URL and unique filename inside Wordpress.
234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 |
# File 'lib/quickpress/wordpress.rb', line 234 def new_media filename content = XMLRPC::Base64.new(File.read(filename)) if content.encoded.empty? fail "File '#{filename}' is empty" end mime = MimeMagic.by_path filename if mime.nil? fail "Unknown MIME type for '#{filename}'" end file = @client.uploadFile(:data => { :name => File.basename(filename), :bits => content, :type => mime.type }) return file['id'], file['url'], file['file'] end |
#new_post(options) ⇒ Object
Sends a post/page to the Wordpress site with options.
options is a Hash with the following fields:
-
:post_date => Ruby Time Object (or
[]for Time.now) -
:post_title => String
-
:post_content => String
-
:post_status => ‘publish’/‘draft’/‘private’
-
:post_type => ‘post’(default) / ‘page’
To Wordpress, Posts and Pages are the same thing. The only thing that makes them different is the option :post_type.
76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/quickpress/wordpress.rb', line 76 def new_post # Sending post id = @client.newPost(:content => ) # Getting link for it info = @client.getPost(:post_id => id, :fields => [:link]) link = info["link"] return id, link end |
#set_options(new_options) ⇒ Object
Sets the blog’s options according to new_options hash. It points to an array with two elements:
-
Wordpress’ internal option name. See
get_options. -
It’s new value. See link on
get_optionsfor possible values.
Returns the new options, the same way as get_options.
182 183 184 185 186 187 |
# File 'lib/quickpress/wordpress.rb', line 182 def = @client.setOptions .map { |o| [o[0], o[1]["desc"], o[1]["value"]] } end |