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 ‘ammount` pages.
-
#get_post(id) ⇒ Object
Returns post with numerical ‘id`.
-
#get_posts(ammount = 0) ⇒ Object
Returns ‘ammount` posts.
-
#get_users ⇒ Object
Returns all users currently registered on the blog.
-
#initialize(url, user, pass) ⇒ Wordpress
constructor
Creates a new connection to ‘url` with `user`/`pass`.
-
#new_media(filename) ⇒ Object
Uploads ‘filename` to 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_options` hash.
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_options` for 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 |